package commands import ( "fmt" "testing" "github.com/stretchr/testify/assert" "gitlab.com/gitlab-org/gitlab-runner/common" ) type metricsServerTestExample struct { address string setAddress bool expectedAddress string errorIsExpected bool } type metricsServerConfigurationType string const ( configurationFromCli metricsServerConfigurationType = "from-cli" configurationFromConfig metricsServerConfigurationType = "from-config" ) func testListenAddressSetting(t *testing.T, exampleName string, example metricsServerTestExample, testType metricsServerConfigurationType) { t.Run(fmt.Sprintf("%s-%s", exampleName, testType), func(t *testing.T) { cfg := configOptionsWithListenAddress{} cfg.config = &common.Config{} if example.setAddress { if testType == configurationFromCli { cfg.ListenAddress = example.address } else { cfg.config.ListenAddress = example.address } } address, err := cfg.listenAddress() assert.Equal(t, example.expectedAddress, address) if example.errorIsExpected { assert.Error(t, err) } else { assert.NoError(t, err) } }) } func TestMetricsServer(t *testing.T) { examples := map[string]metricsServerTestExample{ "address-set-without-port": {"localhost", true, "localhost:9252", false}, "port-set-without-address": {":1234", true, ":1234", false}, "address-set-with-port": {"localhost:1234", true, "localhost:1234", false}, "address-is-empty": {"", true, "", false}, "address-is-invalid": {"localhost::1234", true, "", true}, "address-not-set": {"", false, "", false}, } for exampleName, example := range examples { testListenAddressSetting(t, exampleName, example, configurationFromCli) testListenAddressSetting(t, exampleName, example, configurationFromConfig) } }