github.com/Prakhar-Agarwal-byte/moby@v0.0.0-20231027092010-a14e3e8ab87e/builder/remotecontext/tarsum_test.go (about) 1 package remotecontext // import "github.com/Prakhar-Agarwal-byte/moby/builder/remotecontext" 2 3 import ( 4 "os" 5 "path/filepath" 6 "testing" 7 8 "github.com/Prakhar-Agarwal-byte/moby/builder" 9 "github.com/Prakhar-Agarwal-byte/moby/pkg/archive" 10 "github.com/Prakhar-Agarwal-byte/moby/pkg/reexec" 11 "github.com/pkg/errors" 12 "gotest.tools/v3/skip" 13 ) 14 15 const ( 16 filename = "test" 17 contents = "contents test" 18 ) 19 20 func TestMain(m *testing.M) { 21 if reexec.Init() { 22 return 23 } 24 os.Exit(m.Run()) 25 } 26 27 func TestCloseRootDirectory(t *testing.T) { 28 contextDir, err := os.MkdirTemp("", "builder-tarsum-test") 29 defer os.RemoveAll(contextDir) 30 if err != nil { 31 t.Fatalf("Error with creating temporary directory: %s", err) 32 } 33 34 src := makeTestArchiveContext(t, contextDir) 35 err = src.Close() 36 37 if err != nil { 38 t.Fatalf("Error while executing Close: %s", err) 39 } 40 41 _, err = os.Stat(src.Root()) 42 43 if !errors.Is(err, os.ErrNotExist) { 44 t.Fatal("Directory should not exist at this point") 45 } 46 } 47 48 func TestHashFile(t *testing.T) { 49 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 50 defer cleanup() 51 52 createTestTempFile(t, contextDir, filename, contents, 0o755) 53 54 tarSum := makeTestArchiveContext(t, contextDir) 55 56 sum, err := tarSum.Hash(filename) 57 if err != nil { 58 t.Fatalf("Error when executing Stat: %s", err) 59 } 60 61 if len(sum) == 0 { 62 t.Fatalf("Hash returned empty sum") 63 } 64 65 expected := "55dfeb344351ab27f59aa60ebb0ed12025a2f2f4677bf77d26ea7a671274a9ca" 66 67 if actual := sum; expected != actual { 68 t.Fatalf("invalid checksum. expected %s, got %s", expected, actual) 69 } 70 } 71 72 func TestHashSubdir(t *testing.T) { 73 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 74 defer cleanup() 75 76 contextSubdir := filepath.Join(contextDir, "builder-tarsum-test-subdir") 77 err := os.Mkdir(contextSubdir, 0o755) 78 if err != nil { 79 t.Fatalf("Failed to make directory: %s", contextSubdir) 80 } 81 82 testFilename := createTestTempFile(t, contextSubdir, filename, contents, 0o755) 83 84 tarSum := makeTestArchiveContext(t, contextDir) 85 86 relativePath, err := filepath.Rel(contextDir, testFilename) 87 if err != nil { 88 t.Fatalf("Error when getting relative path: %s", err) 89 } 90 91 sum, err := tarSum.Hash(relativePath) 92 if err != nil { 93 t.Fatalf("Error when executing Stat: %s", err) 94 } 95 96 if len(sum) == 0 { 97 t.Fatalf("Hash returned empty sum") 98 } 99 100 expected := "74a3326b8e766ce63a8e5232f22e9dd895be647fb3ca7d337e5e0a9b3da8ef28" 101 102 if actual := sum; expected != actual { 103 t.Fatalf("invalid checksum. expected %s, got %s", expected, actual) 104 } 105 } 106 107 func TestRemoveDirectory(t *testing.T) { 108 contextDir, cleanup := createTestTempDir(t, "", "builder-tarsum-test") 109 defer cleanup() 110 111 contextSubdir := createTestTempSubdir(t, contextDir, "builder-tarsum-test-subdir") 112 113 relativePath, err := filepath.Rel(contextDir, contextSubdir) 114 if err != nil { 115 t.Fatalf("Error when getting relative path: %s", err) 116 } 117 118 src := makeTestArchiveContext(t, contextDir) 119 120 _, err = os.Stat(filepath.Join(src.Root(), relativePath)) 121 if err != nil { 122 t.Fatalf("Statting %s shouldn't fail: %+v", relativePath, err) 123 } 124 125 tarSum := src.(modifiableContext) 126 err = tarSum.Remove(relativePath) 127 if err != nil { 128 t.Fatalf("Error when executing Remove: %s", err) 129 } 130 131 _, err = os.Stat(filepath.Join(src.Root(), relativePath)) 132 if !errors.Is(err, os.ErrNotExist) { 133 t.Fatalf("Directory should not exist at this point: %+v ", err) 134 } 135 } 136 137 func makeTestArchiveContext(t *testing.T, dir string) builder.Source { 138 skip.If(t, os.Getuid() != 0, "skipping test that requires root") 139 tarStream, err := archive.Tar(dir, archive.Uncompressed) 140 if err != nil { 141 t.Fatalf("error: %s", err) 142 } 143 defer tarStream.Close() 144 tarSum, err := FromArchive(tarStream) 145 if err != nil { 146 t.Fatalf("Error when executing FromArchive: %s", err) 147 } 148 return tarSum 149 }