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  }