func TestFileBlobStore_RemoveBlob(t *testing.T) { bs := tu.TestFileBlobStoreOfName("filebstest_rm") if err := tu.WriteVersionedBlob(bs, "hoge", 5); err != nil { t.Errorf("Failed to write blob: %v", err) return } if err := tu.AssertBlobVersion(bs, "hoge", 5); err != nil { t.Errorf("Failed to read back blob: %v", err) return } if err := tu.WriteVersionedBlob(bs, "safe", 3); err != nil { t.Errorf("Failed to write blob: %v", err) return } if err := bs.RemoveBlob("hoge"); err != nil { t.Errorf("Failed to remove blob: %v", err) } blobs, err := bs.ListBlobs() if err != nil { t.Errorf("ListBlobs failed: %v", err) return } if !reflect.DeepEqual(blobs, []string{"safe"}) { t.Errorf("ListBlobs wrong result: %v", blobs) } if _, err := bs.OpenReader("hoge"); err == nil { t.Errorf("Open removed file succeeded???") } }
func TestFileBlobStore_ListBlobs(t *testing.T) { bs := tu.TestFileBlobStoreOfName("filebstest_list") if err := tu.WriteVersionedBlob(bs, "hoge", 5); err != nil { t.Errorf("Failed to write blob: %v", err) return } if err := tu.WriteVersionedBlob(bs, "fuga", 5); err != nil { t.Errorf("Failed to write blob: %v", err) return } if err := os.Mkdir(path.Join(bs.GetBase(), "piyo"), 0755); err != nil { t.Errorf("Failed to mkdir dummy blob: %v", err) return } blobs, err := bs.ListBlobs() if err != nil { t.Errorf("ListBlobs failed: %v", err) return } sort.Strings(blobs) if !reflect.DeepEqual(blobs, []string{"fuga", "hoge"}) { t.Errorf("ListBlobs wrong result: %v", blobs) } }
func TestCachedBlobStore_Invalidate(t *testing.T) { backendbs := tu.TestFileBlobStoreOfName("backend") cachebs := tu.TestFileBlobStoreOfName("cache") s := scheduler.NewScheduler() if err := tu.WriteVersionedBlob(cachebs, "backendnewer", 2); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlob(backendbs, "backendnewer", 3); err != nil { t.Errorf("%v", err) return } bs, err := cachedblobstore.New(backendbs, cachebs, s, flags.O_RDWRCREATE, tu.TestQueryVersion) if err != nil { t.Errorf("Failed to create CachedBlobStore: %v", err) return } if err := tu.AssertBlobVersionRA(bs, "backendnewer", 3); err != nil { t.Errorf("%v", err) return } // assert cache fill if err := tu.AssertBlobVersion(cachebs, "backendnewer", 3); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlobRA(bs, "backendnewer", 4); err != nil { t.Errorf("%v", err) return } if err := tu.AssertBlobVersionRA(bs, "backendnewer", 4); err != nil { t.Errorf("%v", err) return } if err := bs.Sync(); err != nil { t.Errorf("Sync failed: %v", err) return } if err := tu.AssertBlobVersion(cachebs, "backendnewer", 4); err != nil { t.Errorf("%v", err) return } if err := tu.AssertBlobVersion(backendbs, "backendnewer", 4); err != nil { t.Errorf("%v", err) return } }
func TestCachedBlobStore(t *testing.T) { backendbs := tu.TestFileBlobStoreOfName("backend") cachebs := tu.TestFileBlobStoreOfName("cache") if err := tu.WriteVersionedBlob(backendbs, "backendonly", 5); err != nil { t.Errorf("%v", err) return } bs, err := cachedblobstore.New(backendbs, cachebs, flags.O_RDWRCREATE, tu.TestQueryVersion) if err != nil { t.Errorf("Failed to create CachedBlobStore: %v", err) return } if err := tu.AssertBlobVersion(backendbs, "backendonly", 5); err != nil { t.Errorf("%v", err) return } // assert cache not yet filled if err := tu.AssertBlobVersion(cachebs, "backendonly", 0); err != nil { t.Errorf("%v", err) return } if err := tu.AssertBlobVersionRA(bs, "backendonly", 5); err != nil { t.Errorf("%v", err) return } // assert cache fill if err := tu.AssertBlobVersion(cachebs, "backendonly", 5); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlobRA(bs, "backendonly", 10); err != nil { t.Errorf("%v", err) return } if err := bs.Sync(); err != nil { t.Errorf("Sync failed: %v", err) return } if err := tu.AssertBlobVersionRA(bs, "backendonly", 10); err != nil { t.Errorf("%v", err) return } if err := tu.AssertBlobVersion(cachebs, "backendonly", 10); err != nil { t.Errorf("%v", err) return } if err := tu.AssertBlobVersion(backendbs, "backendonly", 10); err != nil { t.Errorf("%v", err) return } }
func TestCachedBlobStore_ListBlobs(t *testing.T) { backendbs := tu.TestFileBlobStoreOfName("backend") cachebs := tu.TestFileBlobStoreOfName("cache") s := scheduler.NewScheduler() bs, err := cachedblobstore.New(backendbs, cachebs, s, flags.O_RDWRCREATE, tu.TestQueryVersion) if err != nil { t.Errorf("Failed to create CachedBlobStore: %v", err) return } if err := tu.WriteVersionedBlob(backendbs, "backendonly", 1); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlob(cachebs, "cacheonly", 2); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlobRA(bs, "synced", 3); err != nil { t.Errorf("%v", err) return } if err := bs.Sync(); err != nil { t.Errorf("Sync failed: %v", err) return } if err := tu.WriteVersionedBlobRA(bs, "unsynced", 4); err != nil { t.Errorf("%v", err) return } bpaths, err := bs.ListBlobs() if err != nil { t.Errorf("ListBlobs failed: %v", err) return } sort.Strings(bpaths) if !reflect.DeepEqual([]string{"backendonly", "synced", "unsynced"}, bpaths) { t.Errorf("ListBlobs returned unexpected result: %v", bpaths) } }
func TestCachedBackendVersion_FillCache(t *testing.T) { bs := tu.TestFileBlobStore() if err := tu.WriteVersionedBlob(bs, "uncached", 42); err != nil { t.Errorf("%v", err) return } cbv := cachedblobstore.NewCachedBackendVersion(bs, tu.TestQueryVersion) v, err := cbv.Query("uncached") if err != nil { t.Errorf("Unexpected Query() err: %v", err) return } if v != 42 { t.Errorf("Unexpected Query() result. v: %d", v) return } }
func TestCachedBlobStore_RemoveBlob(t *testing.T) { backendbs := tu.TestFileBlobStoreOfName("backend") cachebs := tu.TestFileBlobStoreOfName("cache") bs, err := cachedblobstore.New(backendbs, cachebs, flags.O_RDWRCREATE, tu.TestQueryVersion) if err != nil { t.Errorf("Failed to create CachedBlobStore: %v", err) return } if err := tu.WriteVersionedBlob(backendbs, "backendonly", 1); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlob(cachebs, "cacheonly", 2); err != nil { t.Errorf("%v", err) return } if err := tu.WriteVersionedBlobRA(bs, "synced", 3); err != nil { t.Errorf("%v", err) return } if err := bs.Sync(); err != nil { t.Errorf("Sync failed: %v", err) return } if err := tu.WriteVersionedBlobRA(bs, "unsynced", 4); err != nil { t.Errorf("%v", err) return } if err := bs.RemoveBlob("backendonly"); err != nil { t.Errorf("RemoveBlob failed: %v", err) return } if err := bs.RemoveBlob("synced"); err != nil { t.Errorf("RemoveBlob failed: %v", err) return } if err := bs.RemoveBlob("unsynced"); err != nil { t.Errorf("RemoveBlob failed: %v", err) return } bpaths, err := bs.ListBlobs() if err != nil { t.Errorf("ListBlobs failed: %v", err) return } if len(bpaths) > 0 { t.Errorf("Left over blobs: %v", bpaths) } for _, bp := range []string{"backendonly", "synced", "unsynced"} { if err := tu.AssertBlobVersionRA(bs, bp, 0); err != nil { t.Errorf("left over blob in bs: %s", bp) } if err := tu.AssertBlobVersion(cachebs, bp, 0); err != nil { t.Errorf("left over blob in cachebs: %s", bp) } if err := tu.AssertBlobVersion(backendbs, bp, 0); err != nil { t.Errorf("left over blob in backendbs: %s", bp) } } }