forked from keploy/keploy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
140 lines (125 loc) · 6.42 KB
/
config.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
// Package config provides configuration structures for the application.
package config
import (
"fmt"
"strings"
"time"
)
type Config struct {
Path string `json:"path" yaml:"path" mapstructure:"path" `
AppID string `json:"appId" yaml:"appId" mapstructure:"appId"`
ReRecord string `json:"rerecord" yaml:"rerecord" mapstructure:"rerecord"`
Command string `json:"command" yaml:"command" mapstructure:"command"`
Port uint32 `json:"port" yaml:"port" mapstructure:"port"`
DNSPort uint32 `json:"dnsPort" yaml:"dnsPort" mapstructure:"dnsPort"`
ProxyPort uint32 `json:"proxyPort" yaml:"proxyPort" mapstructure:"proxyPort"`
Debug bool `json:"debug" yaml:"debug" mapstructure:"debug"`
DisableTele bool `json:"disableTele" yaml:"disableTele" mapstructure:"disableTele"`
DisableANSI bool `json:"disableANSI" yaml:"disableANSI" mapstructure:"disableANSI"`
InDocker bool `json:"inDocker" yaml:"inDocker" mapstructure:"inDocker"`
ContainerName string `json:"containerName" yaml:"containerName" mapstructure:"containerName"`
NetworkName string `json:"networkName" yaml:"networkName" mapstructure:"networkName"`
BuildDelay uint64 `json:"buildDelay" yaml:"buildDelay" mapstructure:"buildDelay"`
Test Test `json:"test" yaml:"test" mapstructure:"test"`
Record Record `json:"record" yaml:"record" mapstructure:"record"`
Normalize Normalize `json:"normalize" yaml:"normalize" mapstructure:"normalize"`
ConfigPath string `json:"configPath" yaml:"configPath" mapstructure:"configPath"`
BypassRules []BypassRule `json:"bypassRules" yaml:"bypassRules" mapstructure:"bypassRules"`
EnableTesting bool `json:"enableTesting" yaml:"enableTesting" mapstructure:"enableTesting"`
GenerateGithubActions bool `json:"generateGithubActions" yaml:"generateGithubActions" mapstructure:"generateGithubActions"`
KeployContainer string `json:"keployContainer" yaml:"keployContainer" mapstructure:"keployContainer"`
KeployNetwork string `json:"keployNetwork" yaml:"keployNetwork" mapstructure:"keployNetwork"`
CommandType string `json:"cmdType" yaml:"cmdType" mapstructure:"cmdType"`
}
type Record struct {
Filters []Filter `json:"filters" yaml:"filters" mapstructure:"filters"`
RecordTimer time.Duration `json:"recordTimer" yaml:"recordTimer" mapstructure:"recordTimer"`
}
type Normalize struct {
SelectedTests []SelectedTests `json:"selectedTests" yaml:"selectedTests" mapstructure:"selectedTests"`
TestRun string `json:"testReport" yaml:"testReport" mapstructure:"testReport"`
}
type BypassRule struct {
Path string `json:"path" yaml:"path" mapstructure:"path"`
Host string `json:"host" yaml:"host" mapstructure:"host"`
Port uint `json:"port" yaml:"port" mapstructure:"port"`
}
type Filter struct {
BypassRule `mapstructure:",squash"`
URLMethods []string `json:"urlMethods" yaml:"urlMethods" mapstructure:"urlMethods"`
Headers map[string]string `json:"headers" yaml:"headers" mapstructure:"headers"`
}
type Test struct {
SelectedTests map[string][]string `json:"selectedTests" yaml:"selectedTests" mapstructure:"selectedTests"`
GlobalNoise Globalnoise `json:"globalNoise" yaml:"globalNoise" mapstructure:"globalNoise"`
Delay uint64 `json:"delay" yaml:"delay" mapstructure:"delay"`
APITimeout uint64 `json:"apiTimeout" yaml:"apiTimeout" mapstructure:"apiTimeout"`
Coverage bool `json:"coverage" yaml:"coverage" mapstructure:"coverage"` // boolean to capture the coverage in test
CoverageReportPath string `json:"coverageReportPath" yaml:"coverageReportPath " mapstructure:"coverageReportPath"` // directory path to store the coverage files
GoCoverage bool `json:"goCoverage" yaml:"goCoverage" mapstructure:"goCoverage"` // boolean to capture the coverage in test
IgnoreOrdering bool `json:"ignoreOrdering" yaml:"ignoreOrdering" mapstructure:"ignoreOrdering"`
MongoPassword string `json:"mongoPassword" yaml:"mongoPassword" mapstructure:"mongoPassword"`
Language string `json:"language" yaml:"language" mapstructure:"language"`
RemoveUnusedMocks bool `json:"removeUnusedMocks" yaml:"removeUnusedMocks" mapstructure:"removeUnusedMocks"`
FallBackOnMiss bool `json:"fallBackOnMiss" yaml:"fallBackOnMiss" mapstructure:"fallBackOnMiss"`
}
type Globalnoise struct {
Global GlobalNoise `json:"global" yaml:"global" mapstructure:"global"`
Testsets TestsetNoise `json:"test-sets" yaml:"test-sets" mapstructure:"test-sets"`
}
type SelectedTests struct {
TestSet string `json:"testSet" yaml:"testSet" mapstructure:"testSet"`
Tests []string `json:"tests" yaml:"tests" mapstructure:"tests"`
}
type (
Noise map[string][]string
GlobalNoise map[string]map[string][]string
TestsetNoise map[string]map[string]map[string][]string
)
func SetByPassPorts(conf *Config, ports []uint) {
for _, port := range ports {
conf.BypassRules = append(conf.BypassRules, BypassRule{
Path: "",
Host: "",
Port: port,
})
}
}
func GetByPassPorts(conf *Config) []uint {
var ports []uint
for _, rule := range conf.BypassRules {
ports = append(ports, rule.Port)
}
return ports
}
func SetSelectedTests(conf *Config, testSets []string) {
if conf.Test.SelectedTests == nil {
conf.Test.SelectedTests = make(map[string][]string)
}
for _, testSet := range testSets {
conf.Test.SelectedTests[testSet] = []string{}
}
}
func SetSelectedTestsNormalize(conf *Config, value string) error {
testSets := strings.FieldsFunc(value, func(r rune) bool {
return r == ',' || r == ' '
})
var tests []SelectedTests
if len(testSets) == 0 {
conf.Normalize.SelectedTests = tests
return nil
}
for _, ts := range testSets {
parts := strings.Split(ts, ":")
if len(parts) != 2 {
return fmt.Errorf("invalid format: %s", ts)
}
testCases := strings.Split(parts[1], " ")
tests = append(tests, SelectedTests{
TestSet: parts[0],
Tests: testCases,
})
}
conf.Normalize.SelectedTests = tests
return nil
}