github.com/SupersunnySea/draft@v0.16.0/pkg/storage/kube/configmap/store_test.go (about) 1 package configmap 2 3 import ( 4 "context" 5 "reflect" 6 "testing" 7 8 "github.com/Azure/draft/pkg/storage" 9 ) 10 11 func TestStoreDeleteBuilds(t *testing.T) { 12 var ( 13 store = newMockConfigMapsTestFixture(t) 14 ctx = context.Background() 15 ) 16 switch objs, err := store.DeleteBuilds(ctx, "app1"); { 17 case err != nil: 18 t.Fatalf("failed to delete builds: %v", err) 19 case len(objs) != 4: 20 t.Fatalf("expected 4 deleted builds, got %d", len(objs)) 21 } 22 } 23 24 func TestStoreDeleteBuild(t *testing.T) { 25 var ( 26 store = newMockConfigMapsTestFixture(t) 27 ctx = context.Background() 28 ) 29 obj, err := store.DeleteBuild(ctx, "app1", "foo4") 30 if err != nil { 31 t.Fatalf("failed to delete build: %v", err) 32 } 33 assertEqual(t, "DeleteBuild", obj, objectStub("foo4", "bar4", []byte("foobar4"))) 34 } 35 36 func TestStoreCreateBuild(t *testing.T) { 37 var ( 38 store = newMockConfigMapsTestFixture(t) 39 ctx = context.Background() 40 ) 41 obj := objectStub("foo1", "bar1", []byte("foobar1")) 42 err := store.CreateBuild(ctx, "app2", obj) 43 if err != nil { 44 t.Fatalf("failed to create build: %v", err) 45 } 46 got, err := store.GetBuild(ctx, "app2", "foo1") 47 if err != nil { 48 t.Fatalf("failed to get storage object: %v", err) 49 } 50 assertEqual(t, "CreateBuild", got, obj) 51 } 52 53 func TestStoreUpdateBuild(t *testing.T) { 54 var ( 55 store = newMockConfigMapsTestFixture(t) 56 ctx = context.Background() 57 ) 58 obj := objectStub("foo1", "bar1", []byte("foobar1")) 59 err := store.UpdateBuild(ctx, "app2", obj) 60 if err != nil { 61 t.Fatalf("failed to update build: %v", err) 62 } 63 got, err := store.GetBuild(ctx, "app2", "foo1") 64 if err != nil { 65 t.Fatalf("failed to get storage object: %v", err) 66 } 67 assertEqual(t, "UpdateBuild", got, obj) 68 } 69 70 func TestStoreGetBuilds(t *testing.T) { 71 var ( 72 store = newMockConfigMapsTestFixture(t) 73 ctx = context.Background() 74 ) 75 switch got, err := store.GetBuilds(ctx, "app1"); { 76 case err != nil: 77 t.Fatalf("failed to get builds: %v", err) 78 case len(got) != 4: 79 t.Fatalf("expected 4 storage objects, got %d", len(got)) 80 } 81 } 82 83 func TestStoreGetBuild(t *testing.T) { 84 var ( 85 store = newMockConfigMapsTestFixture(t) 86 ctx = context.Background() 87 want = objectStub("foo1", "bar1", []byte("foobar1")) 88 ) 89 got, err := store.GetBuild(ctx, "app1", "foo1") 90 if err != nil { 91 t.Fatalf("failed to get storage object: %v", err) 92 } 93 assertEqual(t, "GetBuild", got, want) 94 } 95 96 // 97 // test fixtures / helpers 98 // 99 100 func newMockConfigMapsTestFixture(t *testing.T) *ConfigMaps { 101 var mocks = []struct { 102 appName string 103 objects []*storage.Object 104 }{ 105 { 106 appName: "app1", 107 objects: []*storage.Object{ 108 objectStub("foo1", "bar1", []byte("foobar1")), 109 objectStub("foo2", "bar2", []byte("foobar2")), 110 objectStub("foo3", "bar3", []byte("foobar3")), 111 objectStub("foo4", "bar4", []byte("foobar4")), 112 }, 113 }, 114 } 115 return NewConfigMapsWithMocks(t, mocks...) 116 } 117 118 func objectStub(buildID, release string, contextID []byte) *storage.Object { 119 return &storage.Object{ 120 BuildID: buildID, 121 Release: release, 122 ContextID: contextID, 123 } 124 } 125 126 func assertEqual(t *testing.T, label string, a, b interface{}) { 127 if !reflect.DeepEqual(a, b) { 128 t.Errorf("failed equality for %s", label) 129 } 130 }