diff --git a/pkg/envoy/tests/provision_test.go b/pkg/envoy/tests/provision_test.go deleted file mode 100644 index a62f1cc52..000000000 --- a/pkg/envoy/tests/provision_test.go +++ /dev/null @@ -1,187 +0,0 @@ -package tests - -import ( - "context" - "fmt" - "testing" - - "github.com/cortezaproject/corteza-server/compose/types" - su "github.com/cortezaproject/corteza-server/pkg/envoy/store" - "github.com/cortezaproject/corteza-server/pkg/rbac" - "github.com/cortezaproject/corteza-server/store" - "github.com/stretchr/testify/require" -) - -func TestProvision(t *testing.T) { - var ( - ctx = context.Background() - s, err = initStore(ctx) - ) - if err != nil { - t.Fatalf("failed to init sqlite in-memory db: %v", err) - } - - ni := uint64(0) - su.NextID = func() uint64 { - ni++ - return ni - } - - prepare := func(ctx context.Context, s store.Storer, t *testing.T, suite string) (*require.Assertions, error) { - req := require.New(t) - - nn, err := dd(ctx, suite) - req.NoError(err) - - return req, encode(ctx, s, nn) - } - - fullModLoad := func(ctx context.Context, s store.Storer, req *require.Assertions, nsID uint64, handle string) (*types.Module, error) { - mod, err := store.LookupComposeModuleByNamespaceIDHandle(ctx, s, nsID, handle) - req.NoError(err) - req.NotNil(mod) - - mod.Fields, _, err = store.SearchComposeModuleFields(ctx, s, types.ModuleFieldFilter{ModuleID: []uint64{mod.ID}}) - req.NoError(err) - req.NotNil(mod.Fields) - return mod, err - } - - getOptSlice := func(req *require.Assertions, key string, f *types.ModuleField) []interface{} { - opt, _ := (f.Options[key]).([]interface{}) - req.NotNil(opt) - return opt - } - - cases := []*tc{ - { - name: "simple provision set", - suite: "provision", - pre: func() (err error) { - s, err = initStore(ctx) - return ce( - err, - storeRole(ctx, s, 1, "everyone"), - storeRole(ctx, s, 2, "admins"), - ) - }, - post: func(req *require.Assertions, err error) { - req.NoError(err) - }, - check: func(req *require.Assertions) { - // Checkup AC - rrls, _, err := store.SearchRbacRules(ctx, s, rbac.RuleFilter{}) - req.NoError(err) - req.NotNil(rrls) - req.Len(rrls, 14) - // ----------- - - // Checkup namespaces - ns, err := store.LookupComposeNamespaceBySlug(ctx, s, "ns1") - req.NoError(err) - req.NotNil(ns) - // ----------- - - // Checkup modules - m1, err := fullModLoad(ctx, s, req, ns.ID, "mod1") - m2, err := fullModLoad(ctx, s, req, ns.ID, "mod2") - m3, err := fullModLoad(ctx, s, req, ns.ID, "mod3") - - // mod1 - req.Len(m1.Fields, 4) - req.Equal("String", m1.Fields[0].Kind) - - req.Equal("Select", m1.Fields[1].Kind) - opt := getOptSlice(req, "options", m1.Fields[1]) - req.Equal([]interface{}{"f2 opt 1", "f2 opt 2", "f2 opt 3"}, opt) - - req.Equal("Select", m1.Fields[2].Kind) - opt = getOptSlice(req, "options", m1.Fields[2]) - req.Equal([]interface{}{"☆☆☆☆☆", "★☆☆☆☆"}, opt) - - req.Equal("Record", m1.Fields[3].Kind) - req.Equal(m2.ID, uint64(m1.Fields[3].Options.Int64("module"))) - opt = getOptSlice(req, "queryFields", m1.Fields[3]) - req.Equal([]interface{}{"f1"}, opt) - - // mod2 - req.Len(m1.Fields, 4) - - req.Equal("Record", m2.Fields[1].Kind) - req.Equal(m2.ID, uint64(m2.Fields[1].Options.Int64("module"))) - opt = getOptSlice(req, "queryFields", m2.Fields[1]) - req.Equal([]interface{}{"f1"}, opt) - - req.Equal("Record", m2.Fields[3].Kind) - req.Equal(m3.ID, uint64(m2.Fields[3].Options.Int64("module"))) - opt = getOptSlice(req, "queryFields", m2.Fields[3]) - req.Equal([]interface{}{"f1"}, opt) - // ----------- - - // Checkup charts - ch1, err := store.LookupComposeChartByNamespaceIDHandle(ctx, s, ns.ID, "chr1") - req.NoError(err) - req.NotNil(ch1) - - req.Len(ch1.Config.Reports, 1) - r := ch1.Config.Reports[0] - req.Len(r.Dimensions, 1) - req.Len(r.Metrics, 1) - req.Equal(m1.ID, r.ModuleID) - // ----------- - - // Checkup pages - pg1, err := store.LookupComposePageByNamespaceIDHandle(ctx, s, ns.ID, "pg1") - req.NoError(err) - req.NotNil(pg1) - pg2, err := store.LookupComposePageByNamespaceIDHandle(ctx, s, ns.ID, "rpg2") - req.NoError(err) - req.NotNil(pg2) - - // pg1 - req.Len(pg1.Blocks, 3) - - req.Equal("Content", pg1.Blocks[0].Kind) - req.Equal("pg1 b1 content body", pg1.Blocks[0].Options["body"]) - - req.Equal("RecordList", pg1.Blocks[1].Kind) - req.Equal(m1.ID, uint64((pg1.Blocks[1].Options["module"]).(float64))) - - req.Equal("Chart", pg1.Blocks[2].Kind) - req.Equal(ch1.ID, uint64((pg1.Blocks[2].Options["chart"]).(float64))) - - // pg2 - req.Equal(m1.ID, pg2.ModuleID) - req.Equal(pg1.ID, pg2.SelfID) - - req.Equal("Record", pg2.Blocks[0].Kind) - // ----------- - - // Checkup settings records - ms, err := fullModLoad(ctx, s, req, ns.ID, "settings") - rr, _, err := store.SearchComposeRecords(ctx, s, ms, types.RecordFilter{}) - req.NoError(err) - req.Len(rr, 1) - - sr := rr[0] - req.Equal("s1 value", sr.Values.Get("s1", 0).Value) - req.Equal("1", sr.Values.Get("s2", 0).Value) - // ----------- - }, - }, - } - - for _, c := range cases { - t.Run(fmt.Sprintf("%s; %s", c.name, c.suite), func(t *testing.T) { - err = c.pre() - if err != nil { - t.Fatal(err.Error()) - } - req, err := prepare(ctx, s, t, c.suite) - c.post(req, err) - c.check(req) - }) - - ni = 0 - } -} diff --git a/pkg/envoy/tests/main.go b/tests/envoy/main.go similarity index 99% rename from pkg/envoy/tests/main.go rename to tests/envoy/main.go index f9b78b1ec..44f6bbf46 100644 --- a/pkg/envoy/tests/main.go +++ b/tests/envoy/main.go @@ -1,4 +1,4 @@ -package tests +package envoy import ( "context" diff --git a/pkg/envoy/tests/mod_rel_test.go b/tests/envoy/mod_rel_test.go similarity index 99% rename from pkg/envoy/tests/mod_rel_test.go rename to tests/envoy/mod_rel_test.go index 95971b8a6..39ba3bc85 100644 --- a/pkg/envoy/tests/mod_rel_test.go +++ b/tests/envoy/mod_rel_test.go @@ -1,4 +1,4 @@ -package tests +package envoy import ( "context" diff --git a/tests/envoy/provision_test.go b/tests/envoy/provision_test.go new file mode 100644 index 000000000..f0d7bf276 --- /dev/null +++ b/tests/envoy/provision_test.go @@ -0,0 +1,188 @@ +package envoy + +import ( + "context" + "testing" + + "github.com/cortezaproject/corteza-server/compose/types" + su "github.com/cortezaproject/corteza-server/pkg/envoy/store" + "github.com/cortezaproject/corteza-server/pkg/rbac" + "github.com/cortezaproject/corteza-server/store" + "github.com/stretchr/testify/require" +) + +func TestProvision(t *testing.T) { + var ( + ctx = context.Background() + s, err = initStore(ctx) + + rrls = rbac.RuleSet{} + ns = &types.Namespace{} + m1 = &types.Module{} + m2 = &types.Module{} + m3 = &types.Module{} + ch1 = &types.Chart{} + pg1 = &types.Page{} + pg2 = &types.Page{} + ) + if err != nil { + t.Fatalf("failed to init sqlite in-memory db: %v", err) + } + + ni := uint64(0) + su.NextID = func() uint64 { + ni++ + return ni + } + + prepare := func(ctx context.Context, s store.Storer, t *testing.T, suite string) (*require.Assertions, error) { + req := require.New(t) + + nn, err := dd(ctx, suite) + req.NoError(err) + + return req, encode(ctx, s, nn) + } + + fullModLoad := func(ctx context.Context, s store.Storer, req *require.Assertions, nsID uint64, handle string) (*types.Module, error) { + mod, err := store.LookupComposeModuleByNamespaceIDHandle(ctx, s, nsID, handle) + req.NoError(err) + req.NotNil(mod) + + mod.Fields, _, err = store.SearchComposeModuleFields(ctx, s, types.ModuleFieldFilter{ModuleID: []uint64{mod.ID}}) + req.NoError(err) + req.NotNil(mod.Fields) + return mod, err + } + + getOptSlice := func(req *require.Assertions, key string, f *types.ModuleField) []interface{} { + opt, _ := (f.Options[key]).([]interface{}) + req.NotNil(opt) + return opt + } + + // Prepare + s, err = initStore(ctx) + err = ce( + err, + + s.TruncateActionlogs(ctx), + s.TruncateApplications(ctx), + s.TruncateAttachments(ctx), + s.TruncateComposeAttachments(ctx), + s.TruncateComposeCharts(ctx), + s.TruncateComposeNamespaces(ctx), + s.TruncateComposeModules(ctx), + s.TruncateComposeModuleFields(ctx), + s.TruncateComposePages(ctx), + + storeRole(ctx, s, 1, "everyone"), + storeRole(ctx, s, 2, "admins"), + ) + if err != nil { + t.Fatal(err.Error()) + } + + req, err := prepare(ctx, s, t, "provision") + req.NoError(err) + + t.Run("ebac rules", func(t *testing.T) { + rrls, _, err = store.SearchRbacRules(ctx, s, rbac.RuleFilter{}) + req.NoError(err) + req.NotNil(rrls) + req.Len(rrls, 14) + }) + + t.Run("namespaces", func(t *testing.T) { + ns, err = store.LookupComposeNamespaceBySlug(ctx, s, "ns1") + req.NoError(err) + req.NotNil(ns) + }) + + t.Run("modules", func(t *testing.T) { + m1, err = fullModLoad(ctx, s, req, ns.ID, "mod1") + m2, err = fullModLoad(ctx, s, req, ns.ID, "mod2") + m3, err = fullModLoad(ctx, s, req, ns.ID, "mod3") + + // mod1 + req.Len(m1.Fields, 4) + req.Equal("String", m1.Fields[0].Kind) + + req.Equal("Select", m1.Fields[1].Kind) + opt := getOptSlice(req, "options", m1.Fields[1]) + req.Equal([]interface{}{"f2 opt 1", "f2 opt 2", "f2 opt 3"}, opt) + + req.Equal("Select", m1.Fields[2].Kind) + opt = getOptSlice(req, "options", m1.Fields[2]) + req.Equal([]interface{}{"☆☆☆☆☆", "★☆☆☆☆"}, opt) + + req.Equal("Record", m1.Fields[3].Kind) + req.Equal(m2.ID, uint64(m1.Fields[3].Options.Int64("module"))) + opt = getOptSlice(req, "queryFields", m1.Fields[3]) + req.Equal([]interface{}{"f1"}, opt) + + // mod2 + req.Len(m1.Fields, 4) + + req.Equal("Record", m2.Fields[1].Kind) + req.Equal(m2.ID, uint64(m2.Fields[1].Options.Int64("module"))) + opt = getOptSlice(req, "queryFields", m2.Fields[1]) + req.Equal([]interface{}{"f1"}, opt) + + req.Equal("Record", m2.Fields[3].Kind) + req.Equal(m3.ID, uint64(m2.Fields[3].Options.Int64("module"))) + opt = getOptSlice(req, "queryFields", m2.Fields[3]) + req.Equal([]interface{}{"f1"}, opt) + }) + + t.Run("charts", func(t *testing.T) { + ch1, err = store.LookupComposeChartByNamespaceIDHandle(ctx, s, ns.ID, "chr1") + req.NoError(err) + req.NotNil(ch1) + + req.Len(ch1.Config.Reports, 1) + r := ch1.Config.Reports[0] + req.Len(r.Dimensions, 1) + req.Len(r.Metrics, 1) + req.Equal(m1.ID, r.ModuleID) + }) + + t.Run("pages", func(t *testing.T) { + pg1, err = store.LookupComposePageByNamespaceIDHandle(ctx, s, ns.ID, "pg1") + req.NoError(err) + req.NotNil(pg1) + pg2, err = store.LookupComposePageByNamespaceIDHandle(ctx, s, ns.ID, "rpg2") + req.NoError(err) + req.NotNil(pg2) + + // pg1 + req.Len(pg1.Blocks, 3) + + req.Equal("Content", pg1.Blocks[0].Kind) + req.Equal("pg1 b1 content body", pg1.Blocks[0].Options["body"]) + + req.Equal("RecordList", pg1.Blocks[1].Kind) + req.Equal(m1.ID, uint64((pg1.Blocks[1].Options["module"]).(float64))) + + req.Equal("Chart", pg1.Blocks[2].Kind) + req.Equal(ch1.ID, uint64((pg1.Blocks[2].Options["chart"]).(float64))) + + // pg2 + req.Equal(m1.ID, pg2.ModuleID) + req.Equal(pg1.ID, pg2.SelfID) + + req.Equal("Record", pg2.Blocks[0].Kind) + }) + + t.Run("setting records", func(t *testing.T) { + ms, err := fullModLoad(ctx, s, req, ns.ID, "settings") + rr, _, err := store.SearchComposeRecords(ctx, s, ms, types.RecordFilter{}) + req.NoError(err) + req.Len(rr, 1) + + sr := rr[0] + req.Equal("s1 value", sr.Values.Get("s1", 0).Value) + req.Equal("1", sr.Values.Get("s2", 0).Value) + }) + +} diff --git a/pkg/envoy/tests/simple_test.go b/tests/envoy/simple_test.go similarity index 99% rename from pkg/envoy/tests/simple_test.go rename to tests/envoy/simple_test.go index 8933e4f67..9d1198bac 100644 --- a/pkg/envoy/tests/simple_test.go +++ b/tests/envoy/simple_test.go @@ -1,4 +1,4 @@ -package tests +package envoy import ( "context" diff --git a/pkg/envoy/tests/testdata/mod_rel/modules_peer_ref.yaml b/tests/envoy/testdata/mod_rel/modules_peer_ref.yaml similarity index 100% rename from pkg/envoy/tests/testdata/mod_rel/modules_peer_ref.yaml rename to tests/envoy/testdata/mod_rel/modules_peer_ref.yaml diff --git a/pkg/envoy/tests/testdata/mod_rel/modules_self_ref.yaml b/tests/envoy/testdata/mod_rel/modules_self_ref.yaml similarity index 100% rename from pkg/envoy/tests/testdata/mod_rel/modules_self_ref.yaml rename to tests/envoy/testdata/mod_rel/modules_self_ref.yaml diff --git a/pkg/envoy/tests/testdata/mod_rel/modules_store_ref.yaml b/tests/envoy/testdata/mod_rel/modules_store_ref.yaml similarity index 100% rename from pkg/envoy/tests/testdata/mod_rel/modules_store_ref.yaml rename to tests/envoy/testdata/mod_rel/modules_store_ref.yaml diff --git a/pkg/envoy/tests/testdata/provision/0000_access_control.yaml b/tests/envoy/testdata/provision/0000_access_control.yaml similarity index 100% rename from pkg/envoy/tests/testdata/provision/0000_access_control.yaml rename to tests/envoy/testdata/provision/0000_access_control.yaml diff --git a/pkg/envoy/tests/testdata/provision/1000_namespace.yaml b/tests/envoy/testdata/provision/1000_namespace.yaml similarity index 100% rename from pkg/envoy/tests/testdata/provision/1000_namespace.yaml rename to tests/envoy/testdata/provision/1000_namespace.yaml diff --git a/pkg/envoy/tests/testdata/provision/1100_modules.yaml b/tests/envoy/testdata/provision/1100_modules.yaml similarity index 100% rename from pkg/envoy/tests/testdata/provision/1100_modules.yaml rename to tests/envoy/testdata/provision/1100_modules.yaml diff --git a/pkg/envoy/tests/testdata/provision/1200_pages.yaml b/tests/envoy/testdata/provision/1200_pages.yaml similarity index 100% rename from pkg/envoy/tests/testdata/provision/1200_pages.yaml rename to tests/envoy/testdata/provision/1200_pages.yaml diff --git a/pkg/envoy/tests/testdata/provision/1300_charts.yaml b/tests/envoy/testdata/provision/1300_charts.yaml similarity index 100% rename from pkg/envoy/tests/testdata/provision/1300_charts.yaml rename to tests/envoy/testdata/provision/1300_charts.yaml diff --git a/pkg/envoy/tests/testdata/provision/1400_record_settings.yaml b/tests/envoy/testdata/provision/1400_record_settings.yaml similarity index 100% rename from pkg/envoy/tests/testdata/provision/1400_record_settings.yaml rename to tests/envoy/testdata/provision/1400_record_settings.yaml diff --git a/pkg/envoy/tests/testdata/simple/applications.yaml b/tests/envoy/testdata/simple/applications.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/applications.yaml rename to tests/envoy/testdata/simple/applications.yaml diff --git a/pkg/envoy/tests/testdata/simple/charts.yaml b/tests/envoy/testdata/simple/charts.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/charts.yaml rename to tests/envoy/testdata/simple/charts.yaml diff --git a/pkg/envoy/tests/testdata/simple/charts_no_mod.yaml b/tests/envoy/testdata/simple/charts_no_mod.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/charts_no_mod.yaml rename to tests/envoy/testdata/simple/charts_no_mod.yaml diff --git a/pkg/envoy/tests/testdata/simple/charts_no_ns.yaml b/tests/envoy/testdata/simple/charts_no_ns.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/charts_no_ns.yaml rename to tests/envoy/testdata/simple/charts_no_ns.yaml diff --git a/pkg/envoy/tests/testdata/simple/modules.yaml b/tests/envoy/testdata/simple/modules.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/modules.yaml rename to tests/envoy/testdata/simple/modules.yaml diff --git a/pkg/envoy/tests/testdata/simple/modules_no_ns.yaml b/tests/envoy/testdata/simple/modules_no_ns.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/modules_no_ns.yaml rename to tests/envoy/testdata/simple/modules_no_ns.yaml diff --git a/pkg/envoy/tests/testdata/simple/namespaces.yaml b/tests/envoy/testdata/simple/namespaces.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/namespaces.yaml rename to tests/envoy/testdata/simple/namespaces.yaml diff --git a/pkg/envoy/tests/testdata/simple/pages.yaml b/tests/envoy/testdata/simple/pages.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/pages.yaml rename to tests/envoy/testdata/simple/pages.yaml diff --git a/pkg/envoy/tests/testdata/simple/pages_no_ns.yaml b/tests/envoy/testdata/simple/pages_no_ns.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/pages_no_ns.yaml rename to tests/envoy/testdata/simple/pages_no_ns.yaml diff --git a/pkg/envoy/tests/testdata/simple/pages_r.yaml b/tests/envoy/testdata/simple/pages_r.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/pages_r.yaml rename to tests/envoy/testdata/simple/pages_r.yaml diff --git a/pkg/envoy/tests/testdata/simple/pages_r_no_mod.yaml b/tests/envoy/testdata/simple/pages_r_no_mod.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/pages_r_no_mod.yaml rename to tests/envoy/testdata/simple/pages_r_no_mod.yaml diff --git a/pkg/envoy/tests/testdata/simple/rbac_rules.yaml b/tests/envoy/testdata/simple/rbac_rules.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/rbac_rules.yaml rename to tests/envoy/testdata/simple/rbac_rules.yaml diff --git a/pkg/envoy/tests/testdata/simple/rbac_rules_no_role.yaml b/tests/envoy/testdata/simple/rbac_rules_no_role.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/rbac_rules_no_role.yaml rename to tests/envoy/testdata/simple/rbac_rules_no_role.yaml diff --git a/pkg/envoy/tests/testdata/simple/records.yaml b/tests/envoy/testdata/simple/records.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/records.yaml rename to tests/envoy/testdata/simple/records.yaml diff --git a/pkg/envoy/tests/testdata/simple/records_no_mod.yaml b/tests/envoy/testdata/simple/records_no_mod.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/records_no_mod.yaml rename to tests/envoy/testdata/simple/records_no_mod.yaml diff --git a/pkg/envoy/tests/testdata/simple/records_no_ns.yaml b/tests/envoy/testdata/simple/records_no_ns.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/records_no_ns.yaml rename to tests/envoy/testdata/simple/records_no_ns.yaml diff --git a/pkg/envoy/tests/testdata/simple/roles.yaml b/tests/envoy/testdata/simple/roles.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/roles.yaml rename to tests/envoy/testdata/simple/roles.yaml diff --git a/pkg/envoy/tests/testdata/simple/settings.yaml b/tests/envoy/testdata/simple/settings.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/settings.yaml rename to tests/envoy/testdata/simple/settings.yaml diff --git a/pkg/envoy/tests/testdata/simple/users.yaml b/tests/envoy/testdata/simple/users.yaml similarity index 100% rename from pkg/envoy/tests/testdata/simple/users.yaml rename to tests/envoy/testdata/simple/users.yaml