-
Notifications
You must be signed in to change notification settings - Fork 0
/
fetch_test.go
133 lines (105 loc) · 2.82 KB
/
fetch_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package gcpsecretfetch
import (
"fmt"
"github.com/joho/godotenv"
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"log"
"os"
"reflect"
"testing"
"time"
)
const GCP_PROJECT_ENV_KEY = "GCP_PROJECT_ID"
var GCP_PROJECT string
func init() {
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
GCP_PROJECT = os.Getenv(GCP_PROJECT_ENV_KEY)
if GCP_PROJECT == "" {
log.Fatal(GCP_PROJECT_ENV_KEY + " env var must be defined")
}
}
func TestBadProjectUpdate(t *testing.T) {
err := UpdateSecrets("bad-project-name-alkdjwopiunhauwihd", map[string]string{"SECRET_IDENTIFIER": "SECRET_VALUE", "BOTH_IDENTIFIER": "GCP"}, WithDisablePrior())
assert.Error(t, err)
}
func TestBadProjectInitialize(t *testing.T) {
type config struct {
BOTH_IDENTIFIER string
}
var cfg config
err := InitializeConfig(&cfg, "aawdwadawdawdwaawdawdawdawd")
assert.Error(t, err)
fmt.Println(cfg)
}
func TestNotAPointer(t *testing.T) {
type config struct {
BOTH_IDENTIFIER string
}
var cfg config
err := InitializeConfig(cfg, "bad-project-name-alkdjwopiunhauwihd")
assert.Error(t, err)
}
func TestNotAStruct(t *testing.T) {
err := InitializeConfig("cfg", "bad-project-name-alkdjwopiunhauwihd")
assert.Error(t, err)
}
func TestNotAStructPointer(t *testing.T) {
cfg := "cfg"
err := InitializeConfig(&cfg, "bad-project-name-alkdjwopiunhauwihd")
assert.Error(t, err)
}
func TestStructWithNonStringField(t *testing.T) {
type config struct {
BOTH_IDENTIFIER string
INTFIELD int
}
var cfg config
err := InitializeConfig(&cfg, "bad-project-name-alkdjwopiunhauwihd")
assert.Error(t, err)
}
func TestViperCase(t *testing.T) {
v := viper.New()
type config struct {
BOTH_IDENTIFIER string
}
var cfg config
err := InitializeConfig(&cfg, GCP_PROJECT, WithViper(v), WithConcurrency(1))
assert.NoError(t, err)
assert.NotEmpty(t, cfg.BOTH_IDENTIFIER)
assert.Equal(t, v.GetString("both_identifier"), cfg.BOTH_IDENTIFIER)
}
func TestViperCaseMissingVar(t *testing.T) {
v := viper.New()
type config struct {
MissingSecret string
}
var cfg config
err := InitializeConfig(&cfg, GCP_PROJECT, WithViper(v))
assert.Error(t, err)
assert.Empty(t, cfg.MissingSecret)
}
func isEmptyValue(v reflect.Value) bool {
switch v.Kind() {
case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
return v.Len() == 0
case reflect.Bool:
return !v.Bool()
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
return v.Int() == 0
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
return v.Uint() == 0
case reflect.Float32, reflect.Float64:
return v.Float() == 0
case reflect.Interface, reflect.Ptr:
return v.IsNil()
case reflect.Struct:
if t, ok := v.Interface().(time.Time); ok {
return t.IsZero()
}
}
return false
}