github.com/wynshop-open-source/gomplate@v3.5.0+incompatible/libkv/consul_test.go (about) 1 package libkv 2 3 import ( 4 "crypto/tls" 5 "net/url" 6 "os" 7 "testing" 8 "time" 9 10 "github.com/docker/libkv/store" 11 consulapi "github.com/hashicorp/consul/api" 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func TestConsulURL(t *testing.T) { 16 defer os.Unsetenv("CONSUL_HTTP_SSL") 17 os.Setenv("CONSUL_HTTP_SSL", "true") 18 19 u, _ := url.Parse("consul://") 20 expected := &url.URL{Host: "localhost:8500", Scheme: "https"} 21 actual, err := consulURL(u) 22 assert.NoError(t, err) 23 assert.Equal(t, expected, actual) 24 25 u, _ = url.Parse("consul+http://myconsul.server") 26 expected = &url.URL{Host: "myconsul.server", Scheme: "http"} 27 actual, err = consulURL(u) 28 assert.NoError(t, err) 29 assert.Equal(t, expected, actual) 30 31 os.Setenv("CONSUL_HTTP_SSL", "false") 32 u, _ = url.Parse("consul+https://myconsul.server:1234") 33 expected = &url.URL{Host: "myconsul.server:1234", Scheme: "https"} 34 actual, err = consulURL(u) 35 assert.NoError(t, err) 36 assert.Equal(t, expected, actual) 37 38 os.Unsetenv("CONSUL_HTTP_SSL") 39 u, _ = url.Parse("consul://myconsul.server:2345") 40 expected = &url.URL{Host: "myconsul.server:2345", Scheme: "http"} 41 actual, err = consulURL(u) 42 assert.NoError(t, err) 43 assert.Equal(t, expected, actual) 44 45 u, _ = url.Parse("consul://myconsul.server:3456/foo/bar/baz") 46 expected = &url.URL{Host: "myconsul.server:3456", Scheme: "http"} 47 actual, err = consulURL(u) 48 assert.NoError(t, err) 49 assert.Equal(t, expected, actual) 50 51 defer os.Unsetenv("CONSUL_HTTP_ADDR") 52 os.Setenv("CONSUL_HTTP_ADDR", "https://foo:8500") 53 expected = &url.URL{Host: "foo:8500", Scheme: "https"} 54 actual, err = consulURL(u) 55 assert.NoError(t, err) 56 assert.Equal(t, expected, actual) 57 } 58 59 func TestSetupTLS(t *testing.T) { 60 expected := &consulapi.TLSConfig{ 61 Address: "address", 62 CAFile: "cafile", 63 CAPath: "ca/path", 64 CertFile: "certfile", 65 KeyFile: "keyfile", 66 } 67 68 defer os.Unsetenv("CONSUL_TLS_SERVER_NAME") 69 defer os.Unsetenv("CONSUL_CACERT") 70 defer os.Unsetenv("CONSUL_CAPATH") 71 defer os.Unsetenv("CONSUL_CLIENT_CERT") 72 defer os.Unsetenv("CONSUL_CLIENT_KEY") 73 os.Setenv("CONSUL_TLS_SERVER_NAME", expected.Address) 74 os.Setenv("CONSUL_CACERT", expected.CAFile) 75 os.Setenv("CONSUL_CAPATH", expected.CAPath) 76 os.Setenv("CONSUL_CLIENT_CERT", expected.CertFile) 77 os.Setenv("CONSUL_CLIENT_KEY", expected.KeyFile) 78 79 assert.Equal(t, expected, setupTLS("CONSUL")) 80 81 expected.InsecureSkipVerify = false 82 defer os.Unsetenv("CONSUL_HTTP_SSL_VERIFY") 83 os.Setenv("CONSUL_HTTP_SSL_VERIFY", "true") 84 assert.Equal(t, expected, setupTLS("CONSUL")) 85 86 expected.InsecureSkipVerify = true 87 os.Setenv("CONSUL_HTTP_SSL_VERIFY", "false") 88 assert.Equal(t, expected, setupTLS("CONSUL")) 89 } 90 91 func TestConsulConfig(t *testing.T) { 92 expectedConfig := &store.Config{} 93 94 actualConfig, err := consulConfig(false) 95 assert.NoError(t, err) 96 97 assert.Equal(t, expectedConfig, actualConfig) 98 99 defer os.Unsetenv("CONSUL_TIMEOUT") 100 os.Setenv("CONSUL_TIMEOUT", "10") 101 expectedConfig = &store.Config{ 102 ConnectionTimeout: 10 * time.Second, 103 } 104 105 actualConfig, err = consulConfig(false) 106 assert.NoError(t, err) 107 assert.Equal(t, expectedConfig, actualConfig) 108 109 os.Unsetenv("CONSUL_TIMEOUT") 110 expectedConfig = &store.Config{ 111 TLS: &tls.Config{}, 112 } 113 114 actualConfig, err = consulConfig(true) 115 assert.NoError(t, err) 116 assert.NotNil(t, actualConfig.TLS) 117 actualConfig.TLS = &tls.Config{} 118 assert.Equal(t, expectedConfig, actualConfig) 119 }