package integration import ( "context" "encoding/hex" "os" "testing" "github.com/stretchr/testify/require" "edge-infra.dev/pkg/sds/emergencyaccess/retriever" "edge-infra.dev/test/f2" "edge-infra.dev/test/f2/x/postgres" ) var f f2.Framework func TestMain(m *testing.M) { f = f2.New( context.Background(), f2.WithExtensions( postgres.New(postgres.ApplySeedModel()), ), ) os.Exit(f.Run(m)) } func TestRetriever(t *testing.T) { var ret *retriever.Client scriptSHA, err := hex.DecodeString(exampleScriptSHA) require.NoError(t, err) jobSHA, err := hex.DecodeString(exampleJobSHA) require.NoError(t, err) feat := f2.NewFeature("Test Retriever"). Setup("Create Retriever", func(ctx f2.Context, t *testing.T) f2.Context { db := postgres.FromContextT(ctx, t).DB() var err error ret, err = retriever.New(db) require.NoError(t, err) return ctx }). Setup("Populate Executable Data", insertArtifactHelper("executable", "exampleScript", exampleScript, scriptSHA)). Setup("Populate Job Data", insertArtifactHelper("job", "exampleJob", exampleJob, jobSHA)). Test("Test script retrieval", func(ctx f2.Context, t *testing.T) f2.Context { art, err := ret.Artifact(ctx, "exampleScript", retriever.Executable) require.NoError(t, err) exp := retriever.Artifact{ Name: "exampleScript", Type: retriever.Executable, Artifact: exampleScript, SHA: scriptSHA, } require.Equal(t, exp, art) return ctx }). Test("Unknown artifact", func(ctx f2.Context, t *testing.T) f2.Context { _, err := ret.Artifact(ctx, "unknownScript", retriever.Executable) require.EqualError(t, err, `62202: Request Error - Unknown command. Error: unknown artifact: (name: "unknownScript"), (type: "executable")`) return ctx }). Test("Unknown type", func(ctx f2.Context, t *testing.T) f2.Context { _, err := ret.Artifact(ctx, "exampleScript", retriever.ArtifactType("UnknownType")) require.EqualError(t, err, `unknown artifact type: "UnknownType"`) return ctx }). Test("Can't return artifact with the same name but different type", func(ctx f2.Context, t *testing.T) f2.Context { _, err := ret.Artifact(ctx, "exampleJob", retriever.Executable) require.EqualError(t, err, `62202: Request Error - Unknown command. Error: unknown artifact: (name: "exampleJob"), (type: "executable")`) return ctx }). Feature() f.Test(t, feat) } func insertArtifactHelper(artifactType string, name string, contents []byte, sha []byte) func(ctx f2.Context, t *testing.T) f2.Context { return func(ctx f2.Context, t *testing.T) f2.Context { db := postgres.FromContextT(ctx, t).DB() res, err := db.ExecContext(ctx, `INSERT INTO oi_artifacts (name, type, artifact, sha) values ($1, $2, $3, $4) ;`, name, artifactType, contents, sha, ) require.NoError(t, err) rows, err := res.RowsAffected() require.NoError(t, err) require.Equal(t, int64(1), rows, "expected to affect single row") return ctx } } var exampleScriptSHA = "0f95ed04c41face74eb0fb077282821ba0493d5b3cc2c1e725c1a58c6b8f51ba" // hex encoded sha256 var exampleScript = []byte(`#!/bin/sh echo hello `) var exampleJobSHA = "efd866d9bfa4dd45ef189a310b28d4feb4484fe239d8a2513ab9f7b55ddf18ae" var exampleJob = []byte(`apiVersion: v1 kind: ConfigMap metadata: namespace: default name: configmap `)