...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/retriever/integration/retriever_test.go

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

     1  package integration
     2  
     3  import (
     4  	"context"
     5  	"encoding/hex"
     6  	"os"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"edge-infra.dev/pkg/sds/emergencyaccess/retriever"
    12  	"edge-infra.dev/test/f2"
    13  	"edge-infra.dev/test/f2/x/postgres"
    14  )
    15  
    16  var f f2.Framework
    17  
    18  func TestMain(m *testing.M) {
    19  	f = f2.New(
    20  		context.Background(),
    21  		f2.WithExtensions(
    22  			postgres.New(postgres.ApplySeedModel()),
    23  		),
    24  	)
    25  
    26  	os.Exit(f.Run(m))
    27  }
    28  
    29  func TestRetriever(t *testing.T) {
    30  	var ret *retriever.Client
    31  
    32  	scriptSHA, err := hex.DecodeString(exampleScriptSHA)
    33  	require.NoError(t, err)
    34  
    35  	jobSHA, err := hex.DecodeString(exampleJobSHA)
    36  	require.NoError(t, err)
    37  
    38  	feat := f2.NewFeature("Test Retriever").
    39  		Setup("Create Retriever", func(ctx f2.Context, t *testing.T) f2.Context {
    40  			db := postgres.FromContextT(ctx, t).DB()
    41  
    42  			var err error
    43  			ret, err = retriever.New(db)
    44  			require.NoError(t, err)
    45  
    46  			return ctx
    47  		}).
    48  		Setup("Populate Executable Data", insertArtifactHelper("executable", "exampleScript", exampleScript, scriptSHA)).
    49  		Setup("Populate Job Data", insertArtifactHelper("job", "exampleJob", exampleJob, jobSHA)).
    50  		Test("Test script retrieval", func(ctx f2.Context, t *testing.T) f2.Context {
    51  			art, err := ret.Artifact(ctx, "exampleScript", retriever.Executable)
    52  			require.NoError(t, err)
    53  
    54  			exp := retriever.Artifact{
    55  				Name:     "exampleScript",
    56  				Type:     retriever.Executable,
    57  				Artifact: exampleScript,
    58  				SHA:      scriptSHA,
    59  			}
    60  			require.Equal(t, exp, art)
    61  			return ctx
    62  		}).
    63  		Test("Unknown artifact", func(ctx f2.Context, t *testing.T) f2.Context {
    64  			_, err := ret.Artifact(ctx, "unknownScript", retriever.Executable)
    65  			require.EqualError(t, err, `62202: Request Error - Unknown command. Error: unknown artifact: (name: "unknownScript"), (type: "executable")`)
    66  
    67  			return ctx
    68  		}).
    69  		Test("Unknown type", func(ctx f2.Context, t *testing.T) f2.Context {
    70  			_, err := ret.Artifact(ctx, "exampleScript", retriever.ArtifactType("UnknownType"))
    71  			require.EqualError(t, err, `unknown artifact type: "UnknownType"`)
    72  			return ctx
    73  		}).
    74  		Test("Can't return artifact with the same name but different type", func(ctx f2.Context, t *testing.T) f2.Context {
    75  			_, err := ret.Artifact(ctx, "exampleJob", retriever.Executable)
    76  			require.EqualError(t, err, `62202: Request Error - Unknown command. Error: unknown artifact: (name: "exampleJob"), (type: "executable")`)
    77  
    78  			return ctx
    79  		}).
    80  		Feature()
    81  
    82  	f.Test(t, feat)
    83  }
    84  
    85  func insertArtifactHelper(artifactType string, name string, contents []byte, sha []byte) func(ctx f2.Context, t *testing.T) f2.Context {
    86  	return func(ctx f2.Context, t *testing.T) f2.Context {
    87  		db := postgres.FromContextT(ctx, t).DB()
    88  
    89  		res, err := db.ExecContext(ctx, `INSERT INTO oi_artifacts (name, type, artifact, sha) values
    90  			($1, $2, $3, $4)
    91  			;`,
    92  			name,
    93  			artifactType,
    94  			contents,
    95  			sha,
    96  		)
    97  		require.NoError(t, err)
    98  
    99  		rows, err := res.RowsAffected()
   100  		require.NoError(t, err)
   101  		require.Equal(t, int64(1), rows, "expected to affect single row")
   102  
   103  		return ctx
   104  	}
   105  }
   106  
   107  var exampleScriptSHA = "0f95ed04c41face74eb0fb077282821ba0493d5b3cc2c1e725c1a58c6b8f51ba" // hex encoded sha256
   108  var exampleScript = []byte(`#!/bin/sh
   109  
   110  echo hello
   111  
   112  `)
   113  
   114  var exampleJobSHA = "efd866d9bfa4dd45ef189a310b28d4feb4484fe239d8a2513ab9f7b55ddf18ae"
   115  var exampleJob = []byte(`apiVersion: v1
   116  kind: ConfigMap
   117  metadata:
   118    namespace: default
   119    name: configmap
   120  `)
   121  

View as plain text