1 package rulestest
2
3 import (
4 "bytes"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8
9 "edge-infra.dev/pkg/lib/fog"
10 rulesengine "edge-infra.dev/pkg/sds/emergencyaccess/rules"
11 "edge-infra.dev/pkg/sds/emergencyaccess/rules/storage/database"
12 "edge-infra.dev/test/f2"
13 "edge-infra.dev/test/f2/x/postgres"
14 )
15
16 func setupRulesEngineNoServer(ctx f2.Context, t *testing.T) rulesengine.RulesEngine {
17 buf := new(bytes.Buffer)
18 db := postgres.FromContextT(ctx, t).DB()
19 log := fog.New(fog.To(buf))
20 ds := database.New(log, db)
21 return rulesengine.New(ds)
22 }
23
24
25
26
27
28 func TestDefaultRulesForPrivs(t *testing.T) {
29 var (
30 reng = rulesengine.RulesEngine{}
31 testPrivilege rulesengine.Privilege
32 testCommand rulesengine.Command
33 )
34 feat := f2.NewFeature("GetDefaultRules tests").
35 Setup("Setup a new rules engine service", func(ctx f2.Context, t *testing.T) f2.Context {
36 reng = setupRulesEngineNoServer(ctx, t)
37 return ctx
38 }).
39 Setup("Add new data to database", func(ctx f2.Context, t *testing.T) f2.Context {
40 res, err := reng.AddPrivileges(ctx, []rulesengine.PostPrivilegePayload{
41 {
42 Name: "test",
43 },
44 })
45 assert.NoError(t, err)
46 assert.Len(t, res.Conflicts, 0)
47 res, err = reng.AddCommands(ctx, []rulesengine.PostCommandPayload{
48 {
49 Name: "test",
50 },
51 })
52 assert.NoError(t, err)
53 assert.Len(t, res.Conflicts, 0)
54 return ctx
55 }).
56 Setup("Get Command and Privilege from database with IDs", func(ctx f2.Context, t *testing.T) f2.Context {
57 priv, err := reng.ReadPrivilege(ctx, "test")
58 assert.NoError(t, err)
59 assert.NotEqual(t, rulesengine.Privilege{}, priv)
60 testPrivilege = priv
61 com, err := reng.ReadCommand(ctx, "test")
62 assert.NoError(t, err)
63 assert.NotEqual(t, rulesengine.Command{}, com)
64 testCommand = com
65 return ctx
66 }).
67 Test("GetDefaultRules no rules", func(ctx f2.Context, t *testing.T) f2.Context {
68 res, err := reng.GetDefaultRules(ctx)
69 assert.NoError(t, err)
70 assert.Len(t, res, 0)
71 return ctx
72 }).
73 Test("AddDefaultRulesForPrivileges", func(ctx f2.Context, t *testing.T) f2.Context {
74 data := rulesengine.RuleSets{
75 {
76 Privilege: "test",
77 Commands: []string{"test"},
78 },
79 }
80 res, err := reng.AddDefaultRulesForPrivileges(ctx, data)
81 assert.NoError(t, err)
82 assert.Len(t, res.Errors, 0)
83 return ctx
84 }).
85 Test("GetDefaultRules with rules", func(ctx f2.Context, t *testing.T) f2.Context {
86 res, err := reng.GetDefaultRules(ctx, "test")
87 assert.NoError(t, err)
88 assert.EqualValues(t, []rulesengine.ReturnRuleSet{
89 {
90 Privilege: testPrivilege,
91 Commands: []rulesengine.Command{
92 testCommand,
93 },
94 },
95 }, res)
96 return ctx
97 }).
98 Feature()
99 f.Test(t, feat)
100 }
101
102 func TestIdempotentAPIs(t *testing.T) {
103 var (
104 reng = rulesengine.RulesEngine{}
105 )
106 feat := f2.NewFeature("Idempotent APIs").
107 Setup("Setup a new rules engine service", func(ctx f2.Context, t *testing.T) f2.Context {
108 reng = setupRulesEngineNoServer(ctx, t)
109 return ctx
110 },
111 ).
112 Setup("Add new data to database", func(ctx f2.Context, t *testing.T) f2.Context {
113 res, err := reng.AddPrivileges(ctx, []rulesengine.PostPrivilegePayload{
114 {
115 Name: "test",
116 },
117 })
118 assert.NoError(t, err)
119 assert.Len(t, res.Conflicts, 0)
120 res, err = reng.AddCommands(ctx, []rulesengine.PostCommandPayload{
121 {
122 Name: "test",
123 },
124 })
125 assert.NoError(t, err)
126 assert.Len(t, res.Conflicts, 0)
127 return ctx
128 },
129 ).
130 Test("AddPrivilege", func(ctx f2.Context, t *testing.T) f2.Context {
131 res, err := reng.AddPrivileges(ctx, []rulesengine.PostPrivilegePayload{
132 {
133 Name: "test",
134 },
135 })
136 assert.NoError(t, err)
137 assert.Len(t, res.Conflicts, 0)
138 return ctx
139 }).
140 Test("AddCommand", func(ctx f2.Context, t *testing.T) f2.Context {
141 res, err := reng.AddCommands(ctx, []rulesengine.PostCommandPayload{
142 {
143 Name: "test",
144 },
145 })
146 assert.NoError(t, err)
147 assert.Len(t, res.Conflicts, 0)
148 return ctx
149 },
150 ).
151 Feature()
152 f.Test(t, feat)
153 }
154
View as plain text