@@ -13,6 +13,7 @@ func TestHAProxyFrontendBackendConf(t *testing.T) {
13
13
dest string
14
14
frontends []string
15
15
backends []string
16
+ dnsMap map [string ]int
16
17
}{
17
18
// Single destination IP
18
19
{
@@ -39,7 +40,7 @@ frontend fe2
39
40
backend be1
40
41
server dest1 11.12.13.14:80 check` , `
41
42
backend be2
42
- server dest2 21.22.23.24:100 check` },
43
+ server dest1 21.22.23.24:100 check` },
43
44
},
44
45
// Single destination domain name
45
46
{
@@ -51,6 +52,9 @@ frontend fe1
51
52
backends : []string {`
52
53
backend be1
53
54
server dest1 example.com:80 check resolvers dns-resolver` },
55
+ dnsMap : map [string ]int {
56
+ "example.com" : 1 ,
57
+ },
54
58
},
55
59
// Multiple destination domain names
56
60
{
@@ -66,7 +70,11 @@ frontend fe2
66
70
backend be1
67
71
server dest1 example.com:80 check resolvers dns-resolver` , `
68
72
backend be2
69
- server dest2 foo.com:100 check resolvers dns-resolver` },
73
+ server dest1 foo.com:100 check resolvers dns-resolver` },
74
+ dnsMap : map [string ]int {
75
+ "example.com" : 1 ,
76
+ "foo.com" : 1 ,
77
+ },
70
78
},
71
79
// Destination IP and destination domain name
72
80
{
@@ -82,7 +90,10 @@ frontend fe2
82
90
backend be1
83
91
server dest1 11.12.13.14:80 check` , `
84
92
backend be2
85
- server dest2 example.com:100 check resolvers dns-resolver` },
93
+ server dest1 example.com:100 check resolvers dns-resolver` },
94
+ dnsMap : map [string ]int {
95
+ "example.com" : 1 ,
96
+ },
86
97
},
87
98
// Destination with comments and blank lines
88
99
{
@@ -111,18 +122,80 @@ frontend fe2
111
122
backend be1
112
123
server dest1 11.12.13.14:80 check` , `
113
124
backend be2
114
- server dest2 example.com:100 check resolvers dns-resolver` },
125
+ server dest1 example.com:100 check resolvers dns-resolver` },
126
+ dnsMap : map [string ]int {
127
+ "example.com" : 1 ,
128
+ },
129
+ },
130
+ // Destination domain name with multiple backends
131
+ {
132
+ dest : `
133
+ # Port 8080 forwards to port 100 on example.com
134
+ 8080 example.com 100
135
+ ` ,
136
+ frontends : []string {`
137
+ frontend fe1
138
+ bind :8080
139
+ default_backend be1` },
140
+ backends : []string {`
141
+ backend be1
142
+ server-template dest 3 example.com:100 check resolvers dns-resolver` },
143
+ dnsMap : map [string ]int {
144
+ "example.com" : 3 ,
145
+ },
146
+ },
147
+ // Destination IP and Destination domain name with single and multiple backends
148
+ {
149
+ dest : `
150
+ 80 11.12.13.14
151
+ 9000 foo.com 200
152
+ 8080 example.com 100
153
+ 8081 bar.com 100
154
+ ` ,
155
+ frontends : []string {`
156
+ frontend fe1
157
+ bind :80
158
+ default_backend be1` , `
159
+ frontend fe2
160
+ bind :9000
161
+ default_backend be2` , `
162
+ frontend fe3
163
+ bind :8080
164
+ default_backend be3` , `
165
+ frontend fe4
166
+ bind :8081
167
+ default_backend be4` },
168
+ backends : []string {`
169
+ backend be1
170
+ server dest1 11.12.13.14:80 check` , `
171
+ backend be2
172
+ server-template dest 2 foo.com:200 check resolvers dns-resolver` , `
173
+ backend be3
174
+ server dest1 example.com:100 check resolvers dns-resolver` , `
175
+ backend be4
176
+ server dest1 bar.com:100 check resolvers dns-resolver` },
177
+ dnsMap : map [string ]int {
178
+ "foo.com" : 2 ,
179
+ "example.com" : 1 ,
180
+ "bar.com" : 1 ,
181
+ },
115
182
},
116
183
}
117
184
118
185
frontendRegex := regexp .MustCompile ("\n frontend " )
119
186
backendRegex := regexp .MustCompile ("\n backend " )
120
187
121
188
for n , test := range tests {
189
+ servers := ""
190
+ for domain , numServers := range test .dnsMap {
191
+ servers += fmt .Sprintf ("%s:%d;" , domain , numServers )
192
+ }
193
+
122
194
cmd := exec .Command ("./egress-dns-proxy.sh" )
123
195
cmd .Env = []string {
124
196
fmt .Sprintf ("EGRESS_DNS_PROXY_DESTINATION=%s" , test .dest ),
125
197
fmt .Sprintf ("EGRESS_DNS_PROXY_MODE=unit-test" ),
198
+ fmt .Sprintf ("EGRESS_DNS_SERVERS=%s" , servers ),
126
199
}
127
200
outBytes , err := cmd .CombinedOutput ()
128
201
if err != nil {
0 commit comments