...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/rules/server/integration/setup_test.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/rules/server/integration

     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  //go:embed testdata
    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  			// Dataset setup
    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  			// Assert correct type
    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  			// Assert correct type
    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  	// Run the tests
   108  	f.Test(t, feat)
   109  }
   110  

View as plain text