github.com/manicqin/nomad@v0.9.5/nomad/structs/config/consul_test.go (about) 1 package config 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "os" 7 "os/exec" 8 "testing" 9 10 consulapi "github.com/hashicorp/consul/api" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestMain(m *testing.M) { 16 if os.Getenv("NOMAD_ENV_TEST") != "1" { 17 os.Exit(m.Run()) 18 } 19 20 // Encode the default config as json to stdout for testing env var 21 // handling. 22 if err := json.NewEncoder(os.Stdout).Encode(DefaultConsulConfig()); err != nil { 23 fmt.Fprintf(os.Stderr, "error encoding config: %v", err) 24 os.Exit(2) 25 } 26 27 os.Exit(0) 28 } 29 30 // TestConsulConfig_Defaults asserts Consul defaults are copied from their 31 // upstream API package defaults. 32 func TestConsulConfig_Defaults(t *testing.T) { 33 t.Parallel() 34 35 nomadDef := DefaultConsulConfig() 36 consulDef := consulapi.DefaultConfig() 37 38 require.Equal(t, consulDef.Address, nomadDef.Addr) 39 require.NotZero(t, nomadDef.Addr) 40 require.Equal(t, consulDef.Scheme == "https", *nomadDef.EnableSSL) 41 require.Equal(t, !consulDef.TLSConfig.InsecureSkipVerify, *nomadDef.VerifySSL) 42 require.Equal(t, consulDef.TLSConfig.CAFile, nomadDef.CAFile) 43 } 44 45 // TestConsulConfig_Exec asserts Consul defaults use env vars when they are 46 // set by forking a subprocess. 47 func TestConsulConfig_Exec(t *testing.T) { 48 t.Parallel() 49 50 self, err := os.Executable() 51 if err != nil { 52 t.Fatalf("error finding test binary: %v", err) 53 } 54 55 cmd := exec.Command(self) 56 cmd.Env = []string{ 57 "NOMAD_ENV_TEST=1", 58 "CONSUL_CACERT=cacert", 59 "CONSUL_HTTP_ADDR=addr", 60 "CONSUL_HTTP_SSL=1", 61 "CONSUL_HTTP_SSL_VERIFY=1", 62 } 63 64 out, err := cmd.Output() 65 if err != nil { 66 if eerr, ok := err.(*exec.ExitError); ok { 67 t.Fatalf("exit error code %d; output:\n%s", eerr.ExitCode(), string(eerr.Stderr)) 68 } 69 t.Fatalf("error running command %q: %v", self, err) 70 } 71 72 conf := ConsulConfig{} 73 require.NoError(t, json.Unmarshal(out, &conf)) 74 assert.Equal(t, "cacert", conf.CAFile) 75 assert.Equal(t, "addr", conf.Addr) 76 require.NotNil(t, conf.EnableSSL) 77 assert.True(t, *conf.EnableSSL) 78 require.NotNil(t, conf.VerifySSL) 79 assert.True(t, *conf.VerifySSL) 80 }