@ -1,9 +1,13 @@
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				package  tests 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				import  ( 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"bytes" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"encoding/json" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"errors" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"fmt" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"os" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"path/filepath" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"strings" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"testing" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/containerd/containerd/platforms" 
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -11,6 +15,7 @@ import (
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/moby/buildkit/util/contentutil" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/moby/buildkit/util/testutil" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/moby/buildkit/util/testutil/integration" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/opencontainers/go-digest" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					"github.com/stretchr/testify/require" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
	
		
			
				
					
						
						
						
							
								 
							 
						
					 
				
			
			 
			 
			
				@ -23,6 +28,7 @@ func buildCmd(sb integration.Sandbox, args ...string) (string, error) {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				var  buildTests  =  [ ] func ( t  * testing . T ,  sb  integration . Sandbox ) { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					testBuild , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					testImageIDOutput , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					testBuildLocalExport , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					testBuildRegistryExport , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					testBuildTarExport , 
 
			
		 
		
	
	
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
				
			
			 
			 
			
				@ -83,6 +89,56 @@ func testBuildRegistryExport(t *testing.T, sb integration.Sandbox) {
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . Equal ( t ,  img . Layers [ 0 ] [ "bar" ] . Data ,  [ ] byte ( "foo" ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				func  testImageIDOutput ( t  * testing . T ,  sb  integration . Sandbox )  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dockerfile  :=  [ ] byte ( ` FROM busybox:latest ` ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dir ,  err  :=  tmpdir ( t , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						fstest . CreateFile ( "Dockerfile" ,  dockerfile ,  0600 ) , 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NoError ( t ,  err ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					targetDir  :=  t . TempDir ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					outFlag  :=  "--output=type=docker" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					if  sb . Name ( )  ==  "remote"  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						// there is no Docker atm to load the image
 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						outFlag  +=  ",dest="  +  targetDir  +  "/image.tar" 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					cmd  :=  buildxCmd ( sb ,  "build" ,  "-q" ,  outFlag ,  "--iidfile" ,  filepath . Join ( targetDir ,  "iid.txt" ) ,  "--metadata-file" ,  filepath . Join ( targetDir ,  "md.json" ) ,  dir ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					stdout  :=  bytes . NewBuffer ( nil ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					cmd . Stdout  =  stdout 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					cmd . Stderr  =  os . Stderr 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					err  =  cmd . Run ( ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NoError ( t ,  err ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dt ,  err  :=  os . ReadFile ( filepath . Join ( targetDir ,  "iid.txt" ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NoError ( t ,  err ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					imageID  :=  string ( dt ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NotEmpty ( t ,  imageID ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dgst ,  err  :=  digest . Parse ( string ( dt ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NoError ( t ,  err ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . Equal ( t ,  dgst . String ( ) ,  strings . TrimSpace ( stdout . String ( ) ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dt ,  err  =  os . ReadFile ( filepath . Join ( targetDir ,  "md.json" ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NoError ( t ,  err ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					type  mdT  struct  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
						ConfigDigest  string  ` json:"containerimage.config.digest" ` 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					var  md  mdT 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					err  =  json . Unmarshal ( dt ,  & md ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NoError ( t ,  err ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . NotEmpty ( t ,  md . ConfigDigest ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					require . Equal ( t ,  dgst ,  digest . Digest ( md . ConfigDigest ) ) 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				} 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				func  createTestProject ( t  * testing . T )  string  { 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
					dockerfile  :=  [ ] byte ( ` 
 
			
		 
		
	
		
			
				 
				 
			
			 
			 
			
				FROM  busybox : latest  AS  base