@ -1,9 +1,13 @@
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					package  tests 
 
					 
					 
					 
					package  tests 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					import  ( 
 
					 
					 
					 
					import  ( 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						"bytes" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						"encoding/json" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"errors" 
 
					 
					 
					 
						"errors" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"fmt" 
 
					 
					 
					 
						"fmt" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"os" 
 
					 
					 
					 
						"os" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						"path/filepath" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						"strings" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"testing" 
 
					 
					 
					 
						"testing" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"github.com/containerd/containerd/platforms" 
 
					 
					 
					 
						"github.com/containerd/containerd/platforms" 
 
				
			 
			
		
	
	
		
		
			
				
					
						
						
						
							
								 
							 
						
					 
					 
					@ -11,6 +15,7 @@ import (
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"github.com/moby/buildkit/util/contentutil" 
 
					 
					 
					 
						"github.com/moby/buildkit/util/contentutil" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"github.com/moby/buildkit/util/testutil" 
 
					 
					 
					 
						"github.com/moby/buildkit/util/testutil" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"github.com/moby/buildkit/util/testutil/integration" 
 
					 
					 
					 
						"github.com/moby/buildkit/util/testutil/integration" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						"github.com/opencontainers/go-digest" 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						"github.com/stretchr/testify/require" 
 
					 
					 
					 
						"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 ) { 
 
					 
					 
					 
					var  buildTests  =  [ ] func ( t  * testing . T ,  sb  integration . Sandbox ) { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						testBuild , 
 
					 
					 
					 
						testBuild , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
						testImageIDOutput , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						testBuildLocalExport , 
 
					 
					 
					 
						testBuildLocalExport , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						testBuildRegistryExport , 
 
					 
					 
					 
						testBuildRegistryExport , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						testBuildTarExport , 
 
					 
					 
					 
						testBuildTarExport , 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -83,6 +89,56 @@ func testBuildRegistryExport(t *testing.T, sb integration.Sandbox) {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						require . Equal ( t ,  img . Layers [ 0 ] [ "bar" ] . Data ,  [ ] byte ( "foo" ) ) 
 
					 
					 
					 
						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  { 
 
					 
					 
					 
					func  createTestProject ( t  * testing . T )  string  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
						dockerfile  :=  [ ] byte ( ` 
 
					 
					 
					 
						dockerfile  :=  [ ] byte ( ` 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					FROM  busybox : latest  AS  base 
 
					 
					 
					 
					FROM  busybox : latest  AS  base