-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathsetup_test.go
145 lines (138 loc) · 4.58 KB
/
setup_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
134
135
136
137
138
139
140
141
142
143
144
145
package poplar
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.mongodb.org/mongo-driver/v2/bson"
yaml "gopkg.in/yaml.v2"
)
func TestReportSetup(t *testing.T) {
tmpDir, err := ioutil.TempDir(".", "setup_test")
require.NoError(t, err)
defer func() {
assert.NoError(t, os.RemoveAll(tmpDir))
}()
expectedReport := &Report{
Project: "project",
Version: "version",
Order: 101,
Variant: "variant",
TaskName: "task_name",
Execution: 5,
Mainline: true,
BucketConf: BucketConfiguration{
APIKey: "key",
APISecret: "secret",
APIToken: "token",
Name: "bucket",
Prefix: "pre",
Region: "east",
},
Tests: []Test{},
}
t.Run("InvalidReportType", func(t *testing.T) {
report, err := ReportSetup("invalid", "")
assert.Error(t, err)
assert.Nil(t, report)
})
t.Run("InvalidFileName", func(t *testing.T) {
report, err := ReportSetup(ReportTypeJSON, "DNE")
assert.Error(t, err)
assert.Nil(t, report)
})
t.Run("Marshal", func(t *testing.T) {
for _, test := range []struct {
name string
marshal func(interface{}) ([]byte, error)
reportType ReportType
}{
{
name: "JSON",
marshal: json.Marshal,
reportType: ReportTypeJSON,
},
{
name: "BSON",
marshal: bson.Marshal,
reportType: ReportTypeBSON,
},
{
name: "YAML",
marshal: yaml.Marshal,
reportType: ReportTypeYAML,
},
} {
t.Run(test.name, func(t *testing.T) {
data, err := test.marshal(expectedReport)
require.NoError(t, err)
filename := filepath.Join(tmpDir, fmt.Sprintf("test.%s", test.name))
file, err := os.Create(filename)
require.NoError(t, err)
defer func() {
assert.NoError(t, file.Close())
}()
_, err = file.Write(data)
require.NoError(t, err)
report, err := ReportSetup(test.reportType, filename)
assert.NoError(t, err)
assert.Equal(t, expectedReport, report)
})
}
})
t.Run("Env", func(t *testing.T) {
require.NoError(t, os.Setenv(ProjectEnv, expectedReport.Project))
require.NoError(t, os.Setenv(VersionEnv, expectedReport.Version))
require.NoError(t, os.Setenv(OrderEnv, fmt.Sprintf("%d", expectedReport.Order)))
require.NoError(t, os.Setenv(VariantEnv, expectedReport.Variant))
require.NoError(t, os.Setenv(TaskNameEnv, expectedReport.TaskName))
require.NoError(t, os.Setenv(ExecutionEnv, fmt.Sprintf("%d", expectedReport.Execution)))
require.NoError(t, os.Setenv(MainlineEnv, fmt.Sprintf("%v", expectedReport.Mainline)))
require.NoError(t, os.Setenv(APIKeyEnv, expectedReport.BucketConf.APIKey))
require.NoError(t, os.Setenv(APISecretEnv, expectedReport.BucketConf.APISecret))
require.NoError(t, os.Setenv(APITokenEnv, expectedReport.BucketConf.APIToken))
require.NoError(t, os.Setenv(BucketNameEnv, expectedReport.BucketConf.Name))
require.NoError(t, os.Setenv(BucketPrefixEnv, expectedReport.BucketConf.Prefix))
require.NoError(t, os.Setenv(BucketRegionEnv, expectedReport.BucketConf.Region))
t.Run("ValidVars", func(t *testing.T) {
report, err := ReportSetup(ReportTypeEnv, "")
assert.NoError(t, err)
assert.Equal(t, expectedReport, report)
})
t.Run("PatchBuild", func(t *testing.T) {
require.NoError(t, os.Setenv(MainlineEnv, fmt.Sprintf("%v", false)))
require.NoError(t, os.Setenv(OrderEnv, "NOT_AN_INT"))
report, err := ReportSetup(ReportTypeEnv, "")
assert.NoError(t, err)
assert.False(t, report.Mainline)
assert.Zero(t, report.Order)
require.NoError(t, os.Setenv(MainlineEnv, fmt.Sprintf("%v", expectedReport.Mainline)))
require.NoError(t, os.Setenv(OrderEnv, fmt.Sprintf("%d", expectedReport.Order)))
})
t.Run("InvalidOrder", func(t *testing.T) {
require.NoError(t, os.Setenv(OrderEnv, "NOT_AN_INT"))
report, err := ReportSetup(ReportTypeEnv, "")
assert.Error(t, err)
assert.Nil(t, report)
require.NoError(t, os.Setenv(OrderEnv, fmt.Sprintf("%d", expectedReport.Order)))
})
t.Run("InvalidExecution", func(t *testing.T) {
require.NoError(t, os.Setenv(ExecutionEnv, "NOT_AN_INT"))
report, err := ReportSetup(ReportTypeEnv, "")
assert.Error(t, err)
assert.Nil(t, report)
require.NoError(t, os.Setenv(ExecutionEnv, fmt.Sprintf("%d", expectedReport.Execution)))
})
t.Run("InvalidMainline", func(t *testing.T) {
require.NoError(t, os.Setenv(MainlineEnv, "NOT_A_BOOL"))
report, err := ReportSetup(ReportTypeEnv, "")
assert.Error(t, err)
assert.Nil(t, report)
require.NoError(t, os.Setenv(MainlineEnv, fmt.Sprintf("%v", expectedReport.Mainline)))
})
})
}