Skip to content

Commit 0a9fb10

Browse files
Merge pull request #5 from Shopify/prevent-fail-on-no-env
prevents failure due to missing environment
2 parents 0980893 + 43cabd1 commit 0a9fb10

7 files changed

Lines changed: 105 additions & 17 deletions

File tree

cmd/ejson2env/env_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,42 @@ func TestLoadSecrets(t *testing.T) {
4040

4141
}
4242

43+
func TestLoadNoEnvSecrets(t *testing.T) {
44+
45+
rawValues, err := ReadSecrets("test2.ejson", "./key", TestKeyValue)
46+
if nil != err {
47+
t.Fatal(err)
48+
}
49+
50+
_, err = ExtractEnv(rawValues)
51+
if errNoEnv != err {
52+
t.Fatal(err)
53+
}
54+
55+
if isFailure(err) {
56+
t.Fatalf("shouldn't have caused a failure: %s", err)
57+
}
58+
59+
}
60+
61+
func TestLoadBadEnvSecrets(t *testing.T) {
62+
63+
rawValues, err := ReadSecrets("test3.ejson", "./key", TestKeyValue)
64+
if nil != err {
65+
t.Fatal(err)
66+
}
67+
68+
_, err = ExtractEnv(rawValues)
69+
if errEnvNotMap != err {
70+
t.Fatal(err)
71+
}
72+
73+
if isFailure(err) {
74+
t.Fatalf("shouldn't have caused a failure: %s", err)
75+
}
76+
77+
}
78+
4379
func TestInvalidEnvironments(t *testing.T) {
4480
testGood := map[string]interface{}{
4581
"environment": map[string]interface{}{

cmd/ejson2env/key_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"testing"
6+
)
7+
8+
func TestReadKey(t *testing.T) {
9+
buffer := bytes.NewBufferString(TestKeyValue)
10+
value, err := readKey(buffer)
11+
12+
if nil != err {
13+
t.Errorf("shouldn't have returned an error, return: %s", err)
14+
}
15+
16+
if value != TestKeyValue {
17+
t.Errorf("value does not match expected:\nvalue: \"%s\"\nexpected: \"%s\"", value, TestKeyValue)
18+
}
19+
}

cmd/ejson2env/main.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,6 @@ func fail(err error) {
1313
os.Exit(1)
1414
}
1515

16-
// exportSecrets wraps the read, extract, and export steps. Returns
17-
// an error if any step fails.
18-
func exportSecrets(filename, keyDir, privateKey string) error {
19-
secrets, err := ReadSecrets(filename, keyDir, privateKey)
20-
if nil != err {
21-
return (fmt.Errorf("could not load ejson file: %s", err))
22-
}
23-
24-
envValues, err := ExtractEnv(secrets)
25-
if nil != err {
26-
return fmt.Errorf("could not load environment from file: %s", err)
27-
}
28-
29-
ExportEnv(os.Stdout, envValues)
30-
return nil
31-
}
32-
3316
func main() {
3417
app := cli.NewApp()
3518
app.Usage = "get environment variables from ejson files"

cmd/ejson2env/secrets.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package main
33
import (
44
"bytes"
55
"encoding/json"
6+
"fmt"
7+
"os"
68

79
"github.com/Shopify/ejson"
810
)
@@ -26,3 +28,26 @@ func ReadSecrets(filename, keyDir, privateKey string) (map[string]interface{}, e
2628

2729
return secrets, nil
2830
}
31+
32+
// isFailure returns true if the passed error should prompt a
33+
// failure.
34+
func isFailure(err error) bool {
35+
return (nil != err && errNoEnv != err && errEnvNotMap != err)
36+
}
37+
38+
// exportSecrets wraps the read, extract, and export steps. Returns
39+
// an error if any step fails.
40+
func exportSecrets(filename, keyDir, privateKey string) error {
41+
secrets, err := ReadSecrets(filename, keyDir, privateKey)
42+
if nil != err {
43+
return fmt.Errorf("could not load ejson file: %s", err)
44+
}
45+
46+
envValues, err := ExtractEnv(secrets)
47+
if isFailure(err) {
48+
return fmt.Errorf("could not load environment from file: %s", err)
49+
}
50+
51+
ExportEnv(os.Stdout, envValues)
52+
return nil
53+
}

cmd/ejson2env/secrets_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import (
4+
"strings"
5+
"testing"
6+
)
7+
8+
func TestReadSecrets(t *testing.T) {
9+
var err error
10+
11+
_, err = ReadSecrets("bad.ejson", "./key", TestKeyValue)
12+
if nil == err {
13+
t.Fatal("failed to fail when loading a broken ejson file")
14+
}
15+
if !strings.Contains(err.Error(), "no such file or directory") {
16+
t.Errorf("error should be \"no such file or directory\": %s", err)
17+
}
18+
}

cmd/ejson2env/test2.ejson

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"_public_key": "795e671066eef17025c816b6d7c4f5c658b191cfaa31baca69963d761606415c"
3+
}

cmd/ejson2env/test3.ejson

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"_public_key": "795e671066eef17025c816b6d7c4f5c658b191cfaa31baca69963d761606415c",
3+
"environment": "EJ[1:vLCXRxBXJjdT+w8gSPlM45F3HdykWvUdNAeXLJ51GQ4=:BxQq4GdlfxXvCHs0xall8LKesFVjEStm:K2GhhrTy4Tvhb2w0d3RyR9Y/Gg==]"
4+
}

0 commit comments

Comments
 (0)