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"
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