github.com/bazelbuild/remote-apis-sdks@v0.0.0-20240425170053-8a36686a6350/go/pkg/filemetadata/cache_test.go (about) 1 package filemetadata 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/bazelbuild/remote-apis-sdks/go/pkg/digest" 8 "github.com/bazelbuild/remote-apis-sdks/go/pkg/testutil" 9 "github.com/google/go-cmp/cmp" 10 ) 11 12 var ( 13 contents = []byte("example") 14 wantDg = digest.NewFromBlob(contents) 15 ) 16 17 func TestSimpleCacheLoad(t *testing.T) { 18 c := NewSingleFlightCache() 19 filename, err := testutil.CreateFile(t, false, "") 20 if err != nil { 21 t.Fatalf("Failed to create tmp file for testing digests: %v", err) 22 } 23 if err = os.WriteFile(filename, contents, os.ModeTemporary); err != nil { 24 t.Fatalf("Failed to write to tmp file for testing digests: %v", err) 25 } 26 got := c.Get(filename) 27 if got.Err != nil { 28 t.Errorf("Get(%v) failed. Got error: %v", filename, got.Err) 29 } 30 want := &Metadata{ 31 Digest: wantDg, 32 IsExecutable: false, 33 } 34 if diff := cmp.Diff(want, got, ignoreMtime); diff != "" { 35 t.Errorf("Get(%v) returned diff. (-want +got)\n%s", filename, diff) 36 } 37 if c.GetCacheHits() != 0 { 38 t.Errorf("Cache has wrong num of CacheHits, want 0, got %v", c.GetCacheHits()) 39 } 40 41 if c.GetCacheMisses() != 1 { 42 t.Errorf("Cache has wrong num of CacheMisses, want 1, got %v", c.GetCacheMisses()) 43 } 44 } 45 46 func TestCacheOnceLoadMultiple(t *testing.T) { 47 c := NewSingleFlightCache() 48 filename, err := testutil.CreateFile(t, false, "") 49 if err != nil { 50 t.Fatalf("Failed to create tmp file for testing digests: %v", err) 51 } 52 if err = os.WriteFile(filename, contents, os.ModeTemporary); err != nil { 53 t.Fatalf("Failed to write to tmp file for testing digests: %v", err) 54 } 55 want := &Metadata{ 56 Digest: wantDg, 57 IsExecutable: false, 58 } 59 for i := 0; i < 2; i++ { 60 got := c.Get(filename) 61 if got.Err != nil { 62 t.Errorf("Get(%v) failed. Got error: %v", filename, got.Err) 63 } 64 if diff := cmp.Diff(want, got, ignoreMtime); diff != "" { 65 t.Errorf("Get(%v) returned diff. (-want +got)\n%s", filename, diff) 66 } 67 } 68 if c.GetCacheHits() != 1 { 69 t.Errorf("Cache has wrong num of CacheHits, want 1, got %v", c.GetCacheHits()) 70 } 71 if c.GetCacheMisses() != 1 { 72 t.Errorf("Cache has wrong num of CacheMisses, want 1, got %v", c.GetCacheMisses()) 73 } 74 } 75 76 func TestLoadAfterChangeWithoutValidation(t *testing.T) { 77 c := NewSingleFlightCache() 78 filename, err := testutil.CreateFile(t, false, "") 79 if err != nil { 80 t.Fatalf("Failed to create tmp file for testing digests: %v", err) 81 } 82 if err = os.WriteFile(filename, contents, os.ModeTemporary); err != nil { 83 t.Fatalf("Failed to write to tmp file for testing digests: %v", err) 84 } 85 got := c.Get(filename) 86 if got.Err != nil { 87 t.Fatalf("Get(%v) failed. Got error: %v", filename, got.Err) 88 } 89 want := &Metadata{ 90 Digest: wantDg, 91 IsExecutable: false, 92 } 93 if diff := cmp.Diff(want, got, ignoreMtime); diff != "" { 94 t.Fatalf("Get(%v) returned diff. (-want +got)\n%s", filename, diff) 95 } 96 97 change := []byte("change") 98 if err = os.WriteFile(filename, change, os.ModeTemporary); err != nil { 99 t.Fatalf("Failed to write to tmp file for testing digests: %v", err) 100 } 101 got = c.Get(filename) 102 if got.Err != nil { 103 t.Errorf("Get(%v) failed. Got error: %v", filename, got.Err) 104 } 105 if diff := cmp.Diff(want, got, ignoreMtime); diff != "" { 106 t.Errorf("Get(%v) returned diff. (-want +got)\n%s", filename, diff) 107 } 108 if c.GetCacheHits() != 1 { 109 t.Errorf("Cache has wrong num of CacheHits, want 1, got %v", c.GetCacheHits()) 110 } 111 if c.GetCacheMisses() != 1 { 112 t.Errorf("Cache has wrong num of CacheMisses, want 1, got %v", c.GetCacheMisses()) 113 } 114 }