From 2b91c1e1674ee0a5f0dfb10ca90e8880971db02a Mon Sep 17 00:00:00 2001 From: William Petit Date: Fri, 7 Jul 2023 12:22:31 -0600 Subject: [PATCH] feat(store,repository): add more integration tests --- internal/store/testsuite/layer_repository.go | 182 +++++++++++++++++++ internal/store/testsuite/proxy_repository.go | 10 +- 2 files changed, 191 insertions(+), 1 deletion(-) diff --git a/internal/store/testsuite/layer_repository.go b/internal/store/testsuite/layer_repository.go index a70ddf6..a326c0d 100644 --- a/internal/store/testsuite/layer_repository.go +++ b/internal/store/testsuite/layer_repository.go @@ -2,6 +2,7 @@ package testsuite import ( "context" + "reflect" "testing" "forge.cadoles.com/cadoles/bouncer/internal/store" @@ -48,6 +49,187 @@ var layerRepositoryTestCases = []layerRepositoryTestCase{ return errors.Errorf("layer.UpdatedAt should not be zero value") } + return nil + }, + }, + { + Name: "Create then get layer", + Do: func(repo store.LayerRepository) error { + ctx := context.Background() + + var proxyName store.ProxyName = "create_then_get_layer_proxy" + var layerName store.LayerName = "create_then_get_layer" + var layerType store.LayerType = "dummy" + var layerOptions store.LayerOptions = store.LayerOptions{ + "foo": "bar", + "test": struct { + Items []int `json:"items"` + }{ + Items: []int{1, 2, 3}, + }, + } + + createdLayer, err := repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions) + if err != nil { + return errors.WithStack(err) + } + + foundLayer, err := repo.GetLayer(ctx, proxyName, layerName) + if err != nil { + return errors.WithStack(err) + } + + if e, g := createdLayer.Name, foundLayer.Name; e != g { + return errors.Errorf("foundLayer.Name: expected '%v', got '%v'", createdLayer.Name, foundLayer.Name) + } + + if e, g := createdLayer.CreatedAt, foundLayer.CreatedAt; !reflect.DeepEqual(e, g) { + return errors.Errorf("foundLayer.CreatedAt: expected '%v', got '%v'", createdLayer.CreatedAt, foundLayer.CreatedAt) + } + + if e, g := createdLayer.UpdatedAt, foundLayer.UpdatedAt; !reflect.DeepEqual(e, g) { + return errors.Errorf("foundLayer.UpdatedAt: expected '%v', got '%v'", createdLayer.UpdatedAt, foundLayer.UpdatedAt) + } + + if e, g := createdLayer.Enabled, foundLayer.Enabled; !reflect.DeepEqual(e, g) { + return errors.Errorf("foundLayer.Enabled: expected '%v', got '%v'", createdLayer.Enabled, foundLayer.Enabled) + } + + if e, g := createdLayer.Weight, foundLayer.Weight; !reflect.DeepEqual(e, g) { + return errors.Errorf("foundLayer.Weight: expected '%v', got '%v'", createdLayer.Weight, foundLayer.Weight) + } + + if e, g := createdLayer.Proxy, foundLayer.Proxy; !reflect.DeepEqual(e, g) { + return errors.Errorf("foundLayer.Proxy: expected '%v', got '%v'", createdLayer.Proxy, foundLayer.Proxy) + } + + if e, g := createdLayer.Options, foundLayer.Options; !reflect.DeepEqual(e, g) { + return errors.Errorf("foundLayer.Options: expected '%v', got '%v'", createdLayer.Options, foundLayer.Options) + } + + return nil + }, + }, + { + Name: "Create then delete layer", + Do: func(repo store.LayerRepository) error { + ctx := context.Background() + + var layerName store.LayerName = "create_then_delete_layer" + var proxyName store.ProxyName = store.ProxyName(string(layerName) + "_proxy") + var layerType store.LayerType = "dummy" + var layerOptions store.LayerOptions = store.LayerOptions{ + "foo": "bar", + "test": struct { + Items []int `json:"items"` + }{ + Items: []int{1, 2, 3}, + }, + } + + createdLayer, err := repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions) + if err != nil { + return errors.WithStack(err) + } + + if err := repo.DeleteLayer(ctx, createdLayer.Proxy, createdLayer.Name); err != nil { + return errors.WithStack(err) + } + + foundLayer, err := repo.GetLayer(ctx, createdLayer.Proxy, createdLayer.Name) + if err == nil { + return errors.New("err should not be nil") + } + + if !errors.Is(err, store.ErrNotFound) { + return errors.Errorf("err should be store.ErrNotFound, got '%+v'", err) + } + + if foundLayer != nil { + return errors.Errorf("foundLayer should be nil, got '%v'", foundLayer) + } + + return nil + }, + }, + { + Name: "Create already existing layer", + Do: func(repo store.LayerRepository) error { + ctx := context.Background() + + var layerName store.LayerName = "create_already_existing_layer" + var proxyName store.ProxyName = store.ProxyName(string(layerName) + "_proxy") + var layerType store.LayerType = "dummy" + var layerOptions store.LayerOptions = store.LayerOptions{ + "foo": "bar", + "test": struct { + Items []int `json:"items"` + }{ + Items: []int{1, 2, 3}, + }, + } + + _, err := repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions) + if err != nil { + return errors.WithStack(err) + } + + _, err = repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions) + if err == nil { + return errors.New("err should not be nil") + } + + if !errors.Is(err, store.ErrAlreadyExist) { + return errors.Errorf("err: expected store.ErrAlreadyExists, got '%+v'", err) + } + + return nil + }, + }, + { + Name: "Create then query layer", + Do: func(repo store.LayerRepository) error { + ctx := context.Background() + + var layerName store.LayerName = "create_then_query_layer" + var proxyName store.ProxyName = store.ProxyName(string(layerName) + "_proxy") + var layerType store.LayerType = "dummy" + var layerOptions store.LayerOptions = store.LayerOptions{ + "foo": "bar", + "test": struct { + Items []int `json:"items"` + }{ + Items: []int{1, 2, 3}, + }, + } + + createdLayer, err := repo.CreateLayer(ctx, proxyName, layerName, layerType, layerOptions) + if err != nil { + return errors.WithStack(err) + } + + headers, err := repo.QueryLayers(ctx, createdLayer.Proxy) + if err != nil { + return errors.WithStack(err) + } + + if len(headers) < 1 { + return errors.Errorf("len(headers): expected value > 1, got '%v'", len(headers)) + } + + found := false + + for _, h := range headers { + if h.Name == createdLayer.Name { + found = true + break + } + } + + if !found { + return errors.New("could not find created layer in query results") + } + return nil }, }, diff --git a/internal/store/testsuite/proxy_repository.go b/internal/store/testsuite/proxy_repository.go index 58ffa4f..ed55183 100644 --- a/internal/store/testsuite/proxy_repository.go +++ b/internal/store/testsuite/proxy_repository.go @@ -83,6 +83,14 @@ var proxyRepositoryTestCases = []proxyRepositoryTestCase{ return errors.Errorf("foundProxy.To: expected '%v', got '%v'", createdProxy.To, foundProxy.To) } + if e, g := createdProxy.Enabled, foundProxy.Enabled; e != g { + return errors.Errorf("foundProxy.Enabled: expected '%v', got '%v'", createdProxy.Enabled, foundProxy.Enabled) + } + + if e, g := createdProxy.Weight, foundProxy.Weight; e != g { + return errors.Errorf("foundProxy.Weight: expected '%v', got '%v'", createdProxy.Weight, foundProxy.Weight) + } + if e, g := createdProxy.CreatedAt, foundProxy.CreatedAt; e != g { return errors.Errorf("foundProxy.CreatedAt: expected '%v', got '%v'", createdProxy.CreatedAt, foundProxy.CreatedAt) } @@ -127,7 +135,7 @@ var proxyRepositoryTestCases = []proxyRepositoryTestCase{ }, }, { - Name: "Create then query", + Name: "Create then query layer", Do: func(repo store.ProxyRepository) error { ctx := context.Background()