1 package rulestest
2
3 import (
4 "bytes"
5 "embed"
6 "fmt"
7 "os"
8 "path/filepath"
9 "testing"
10
11 "github.com/stretchr/testify/assert"
12 "github.com/stretchr/testify/require"
13
14 "edge-infra.dev/pkg/lib/fog"
15 "edge-infra.dev/pkg/sds/emergencyaccess/config"
16 "edge-infra.dev/pkg/sds/emergencyaccess/eaconst"
17 rulesengine "edge-infra.dev/pkg/sds/emergencyaccess/rules"
18 "edge-infra.dev/pkg/sds/emergencyaccess/rules/setup"
19 "edge-infra.dev/pkg/sds/emergencyaccess/rules/storage/database"
20 "edge-infra.dev/pkg/sds/emergencyaccess/rules/storage/file"
21 "edge-infra.dev/test/f2"
22 "edge-infra.dev/test/f2/x/postgres"
23 )
24
25
26 var testdata embed.FS
27
28 func createTestDataDir(t *testing.T, fsys embed.FS) string {
29 tempDir := t.TempDir()
30 err := os.CopyFS(tempDir, fsys)
31 require.NoError(t, err)
32 return filepath.Join(tempDir, "testdata")
33 }
34
35 func TestSetup(t *testing.T) {
36 var (
37 testJSONDataDir = createTestDataDir(t, testdata)
38 )
39
40 feat := f2.NewFeature("Setup tests").
41 Test("Database storage Setup", func(ctx f2.Context, t *testing.T) f2.Context {
42 var (
43 pg = postgres.FromContextT(ctx, t)
44 )
45
46
47 conf := setup.RulesConfig{
48 SQL: config.SQLConfig{
49 ConnectionName: pg.ConnectionName,
50 DatabaseName: pg.Database,
51 User: pg.User,
52 Password: pg.Password,
53 Host: pg.Host,
54 Port: fmt.Sprint(pg.Port),
55 Schema: pg.Schema(),
56 },
57 }
58
59 buf := new(bytes.Buffer)
60 log := fog.New(fog.To(buf))
61
62 dataset, _, err := setup.CreateDataset(log, conf)
63 assert.NoError(t, err)
64
65
66 assert.IsType(t, database.Dataset{}, dataset)
67
68 _, err = dataset.AddCommands(ctx, []string{"ls"})
69 assert.NoError(t, err)
70 out, err := dataset.ReadAllCommands(ctx)
71 assert.NoError(t, err)
72 assert.Len(t, out, 1)
73 assert.Equal(t, "ls", out[0].Name)
74
75 _, err = dataset.DeleteCommand(ctx, "ls")
76 assert.NoError(t, err)
77
78 return ctx
79 }).
80 Test("File storage Setup", func(ctx f2.Context, t *testing.T) f2.Context {
81 conf := setup.RulesConfig{
82 JSONDataDir: testJSONDataDir,
83 }
84
85 buf := new(bytes.Buffer)
86 log := fog.New(fog.To(buf))
87
88 dataset, _, err := setup.CreateDataset(log, conf)
89 assert.NoError(t, err)
90
91
92 assert.IsType(t, file.Dataset{}, dataset)
93
94 command := rulesengine.Command{
95 Name: "ls",
96 Type: eaconst.Command,
97 }
98
99 out, err := dataset.EARoles(ctx, "2f9f5965-ed2a-4262-9fd9-9d2d8f8bee8a", command)
100 assert.NoError(t, err)
101 assert.Equal(t, []string{"ea-read", "ea-write"}, out)
102
103 return ctx
104 }).
105 Feature()
106
107
108 f.Test(t, feat)
109 }
110
View as plain text