|
1 | 1 | package ingress |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "flag" |
4 | 5 | "fmt" |
5 | 6 | "net/url" |
6 | 7 | "regexp" |
7 | 8 | "testing" |
| 9 | + "time" |
8 | 10 |
|
9 | 11 | "github.com/stretchr/testify/assert" |
10 | 12 | "github.com/stretchr/testify/require" |
| 13 | + "github.com/urfave/cli/v2" |
11 | 14 | "gopkg.in/yaml.v2" |
12 | 15 |
|
13 | 16 | "github.com/cloudflare/cloudflared/cmd/cloudflared/config" |
| 17 | + "github.com/cloudflare/cloudflared/logger" |
| 18 | + "github.com/cloudflare/cloudflared/tlsconfig" |
14 | 19 | ) |
15 | 20 |
|
16 | 21 | func TestParseUnixSocket(t *testing.T) { |
@@ -228,6 +233,82 @@ ingress: |
228 | 233 | } |
229 | 234 | } |
230 | 235 |
|
| 236 | +func TestSingleOriginSetsConfig(t *testing.T) { |
| 237 | + flagSet := flag.NewFlagSet(t.Name(), flag.PanicOnError) |
| 238 | + flagSet.Bool("hello-world", true, "") |
| 239 | + flagSet.Duration(ProxyConnectTimeoutFlag, time.Second, "") |
| 240 | + flagSet.Duration(ProxyTLSTimeoutFlag, time.Second, "") |
| 241 | + flagSet.Duration(ProxyTCPKeepAlive, time.Second, "") |
| 242 | + flagSet.Bool(ProxyNoHappyEyeballsFlag, true, "") |
| 243 | + flagSet.Int(ProxyKeepAliveConnectionsFlag, 10, "") |
| 244 | + flagSet.Duration(ProxyKeepAliveTimeoutFlag, time.Second, "") |
| 245 | + flagSet.String(HTTPHostHeaderFlag, "example.com:8080", "") |
| 246 | + flagSet.String(OriginServerNameFlag, "example.com", "") |
| 247 | + flagSet.String(tlsconfig.OriginCAPoolFlag, "/etc/certs/ca.pem", "") |
| 248 | + flagSet.Bool(NoTLSVerifyFlag, true, "") |
| 249 | + flagSet.Bool(NoChunkedEncodingFlag, true, "") |
| 250 | + flagSet.Bool(config.BastionFlag, true, "") |
| 251 | + flagSet.String(ProxyAddressFlag, "localhost:8080", "") |
| 252 | + flagSet.Uint(ProxyPortFlag, 8080, "") |
| 253 | + flagSet.Bool(Socks5Flag, true, "") |
| 254 | + |
| 255 | + cliCtx := cli.NewContext(cli.NewApp(), flagSet, nil) |
| 256 | + err := cliCtx.Set("hello-world", "true") |
| 257 | + require.NoError(t, err) |
| 258 | + err = cliCtx.Set(ProxyConnectTimeoutFlag, "1s") |
| 259 | + require.NoError(t, err) |
| 260 | + err = cliCtx.Set(ProxyTLSTimeoutFlag, "1s") |
| 261 | + require.NoError(t, err) |
| 262 | + err = cliCtx.Set(ProxyTCPKeepAlive, "1s") |
| 263 | + require.NoError(t, err) |
| 264 | + err = cliCtx.Set(ProxyNoHappyEyeballsFlag, "true") |
| 265 | + require.NoError(t, err) |
| 266 | + err = cliCtx.Set(ProxyKeepAliveConnectionsFlag, "10") |
| 267 | + require.NoError(t, err) |
| 268 | + err = cliCtx.Set(ProxyKeepAliveTimeoutFlag, "1s") |
| 269 | + require.NoError(t, err) |
| 270 | + err = cliCtx.Set(HTTPHostHeaderFlag, "example.com:8080") |
| 271 | + require.NoError(t, err) |
| 272 | + err = cliCtx.Set(OriginServerNameFlag, "example.com") |
| 273 | + require.NoError(t, err) |
| 274 | + err = cliCtx.Set(tlsconfig.OriginCAPoolFlag, "/etc/certs/ca.pem") |
| 275 | + require.NoError(t, err) |
| 276 | + err = cliCtx.Set(NoTLSVerifyFlag, "true") |
| 277 | + require.NoError(t, err) |
| 278 | + err = cliCtx.Set(NoChunkedEncodingFlag, "true") |
| 279 | + require.NoError(t, err) |
| 280 | + err = cliCtx.Set(config.BastionFlag, "true") |
| 281 | + require.NoError(t, err) |
| 282 | + err = cliCtx.Set(ProxyAddressFlag, "localhost:8080") |
| 283 | + require.NoError(t, err) |
| 284 | + err = cliCtx.Set(ProxyPortFlag, "8080") |
| 285 | + require.NoError(t, err) |
| 286 | + err = cliCtx.Set(Socks5Flag, "true") |
| 287 | + require.NoError(t, err) |
| 288 | + |
| 289 | + allowURLFromArgs := false |
| 290 | + logger, err := logger.New() |
| 291 | + require.NoError(t, err) |
| 292 | + ingress, err := NewSingleOrigin(cliCtx, allowURLFromArgs, logger) |
| 293 | + require.NoError(t, err) |
| 294 | + |
| 295 | + assert.Equal(t, time.Second, ingress.Rules[0].Config.ConnectTimeout) |
| 296 | + assert.Equal(t, time.Second, ingress.Rules[0].Config.TLSTimeout) |
| 297 | + assert.Equal(t, time.Second, ingress.Rules[0].Config.TCPKeepAlive) |
| 298 | + assert.True(t, ingress.Rules[0].Config.NoHappyEyeballs) |
| 299 | + assert.Equal(t, 10, ingress.Rules[0].Config.KeepAliveConnections) |
| 300 | + assert.Equal(t, time.Second, ingress.Rules[0].Config.KeepAliveTimeout) |
| 301 | + assert.Equal(t, "example.com:8080", ingress.Rules[0].Config.HTTPHostHeader) |
| 302 | + assert.Equal(t, "example.com", ingress.Rules[0].Config.OriginServerName) |
| 303 | + assert.Equal(t, "/etc/certs/ca.pem", ingress.Rules[0].Config.CAPool) |
| 304 | + assert.True(t, ingress.Rules[0].Config.NoTLSVerify) |
| 305 | + assert.True(t, ingress.Rules[0].Config.DisableChunkedEncoding) |
| 306 | + assert.True(t, ingress.Rules[0].Config.BastionMode) |
| 307 | + assert.Equal(t, "localhost:8080", ingress.Rules[0].Config.ProxyAddress) |
| 308 | + assert.Equal(t, uint(8080), ingress.Rules[0].Config.ProxyPort) |
| 309 | + assert.Equal(t, socksProxy, ingress.Rules[0].Config.ProxyType) |
| 310 | +} |
| 311 | + |
231 | 312 | func TestFindMatchingRule(t *testing.T) { |
232 | 313 | ingress := Ingress{ |
233 | 314 | Rules: []Rule{ |
|
0 commit comments