package rulestest import ( "bytes" "embed" "fmt" "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "edge-infra.dev/pkg/lib/fog" "edge-infra.dev/pkg/sds/emergencyaccess/config" "edge-infra.dev/pkg/sds/emergencyaccess/eaconst" rulesengine "edge-infra.dev/pkg/sds/emergencyaccess/rules" "edge-infra.dev/pkg/sds/emergencyaccess/rules/setup" "edge-infra.dev/pkg/sds/emergencyaccess/rules/storage/database" "edge-infra.dev/pkg/sds/emergencyaccess/rules/storage/file" "edge-infra.dev/test/f2" "edge-infra.dev/test/f2/x/postgres" ) //go:embed testdata var testdata embed.FS func createTestDataDir(t *testing.T, fsys embed.FS) string { tempDir := t.TempDir() err := os.CopyFS(tempDir, fsys) require.NoError(t, err) return filepath.Join(tempDir, "testdata") } func TestSetup(t *testing.T) { var ( testJSONDataDir = createTestDataDir(t, testdata) ) feat := f2.NewFeature("Setup tests"). Test("Database storage Setup", func(ctx f2.Context, t *testing.T) f2.Context { var ( pg = postgres.FromContextT(ctx, t) ) // Dataset setup conf := setup.RulesConfig{ SQL: config.SQLConfig{ ConnectionName: pg.ConnectionName, DatabaseName: pg.Database, User: pg.User, Password: pg.Password, Host: pg.Host, Port: fmt.Sprint(pg.Port), Schema: pg.Schema(), }, } buf := new(bytes.Buffer) log := fog.New(fog.To(buf)) dataset, _, err := setup.CreateDataset(log, conf) assert.NoError(t, err) // Assert correct type assert.IsType(t, database.Dataset{}, dataset) _, err = dataset.AddCommands(ctx, []string{"ls"}) assert.NoError(t, err) out, err := dataset.ReadAllCommands(ctx) assert.NoError(t, err) assert.Len(t, out, 1) assert.Equal(t, "ls", out[0].Name) _, err = dataset.DeleteCommand(ctx, "ls") assert.NoError(t, err) return ctx }). Test("File storage Setup", func(ctx f2.Context, t *testing.T) f2.Context { conf := setup.RulesConfig{ JSONDataDir: testJSONDataDir, } buf := new(bytes.Buffer) log := fog.New(fog.To(buf)) dataset, _, err := setup.CreateDataset(log, conf) assert.NoError(t, err) // Assert correct type assert.IsType(t, file.Dataset{}, dataset) command := rulesengine.Command{ Name: "ls", Type: eaconst.Command, } out, err := dataset.EARoles(ctx, "2f9f5965-ed2a-4262-9fd9-9d2d8f8bee8a", command) assert.NoError(t, err) assert.Equal(t, []string{"ea-read", "ea-write"}, out) return ctx }). Feature() // Run the tests f.Test(t, feat) }