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  }