mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
691 lines
22 KiB
Go
691 lines
22 KiB
Go
package server
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// Ensures that a configuration can be deserialized from TOML.
|
|
func TestConfigTOML(t *testing.T) {
|
|
content := `
|
|
addr = "127.0.0.1:4002"
|
|
ca_file = "/tmp/file.ca"
|
|
cert_file = "/tmp/file.cert"
|
|
cors = ["*"]
|
|
cpu_profile_file = "XXX"
|
|
data_dir = "/tmp/data"
|
|
key_file = "/tmp/file.key"
|
|
bind_addr = "127.0.0.1:4003"
|
|
peers = ["coreos.com:4001", "coreos.com:4002"]
|
|
peers_file = "/tmp/peers"
|
|
max_cluster_size = 10
|
|
max_result_buffer = 512
|
|
max_retry_attempts = 5
|
|
name = "test-name"
|
|
snapshot = true
|
|
verbose = true
|
|
very_verbose = true
|
|
web_url = "/web"
|
|
|
|
[peer]
|
|
addr = "127.0.0.1:7002"
|
|
ca_file = "/tmp/peer/file.ca"
|
|
cert_file = "/tmp/peer/file.cert"
|
|
key_file = "/tmp/peer/file.key"
|
|
bind_addr = "127.0.0.1:7003"
|
|
`
|
|
c := NewConfig()
|
|
_, err := toml.Decode(content, &c)
|
|
assert.Nil(t, err, "")
|
|
assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
|
|
assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
|
|
assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
|
|
assert.Equal(t, c.CorsOrigins, []string{"*"}, "")
|
|
assert.Equal(t, c.DataDir, "/tmp/data", "")
|
|
assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
|
|
assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
|
|
assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
|
|
assert.Equal(t, c.PeersFile, "/tmp/peers", "")
|
|
assert.Equal(t, c.MaxClusterSize, 10, "")
|
|
assert.Equal(t, c.MaxResultBuffer, 512, "")
|
|
assert.Equal(t, c.MaxRetryAttempts, 5, "")
|
|
assert.Equal(t, c.Name, "test-name", "")
|
|
assert.Equal(t, c.Snapshot, true, "")
|
|
assert.Equal(t, c.Verbose, true, "")
|
|
assert.Equal(t, c.VeryVerbose, true, "")
|
|
assert.Equal(t, c.Peer.Addr, "127.0.0.1:7002", "")
|
|
assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
|
|
assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
|
|
assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
|
|
assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:7003", "")
|
|
}
|
|
|
|
// Ensures that a configuration can be retrieved from environment variables.
|
|
func TestConfigEnv(t *testing.T) {
|
|
os.Setenv("ETCD_CA_FILE", "/tmp/file.ca")
|
|
os.Setenv("ETCD_CERT_FILE", "/tmp/file.cert")
|
|
os.Setenv("ETCD_CPU_PROFILE_FILE", "XXX")
|
|
os.Setenv("ETCD_CORS", "localhost:4001,localhost:4002")
|
|
os.Setenv("ETCD_DATA_DIR", "/tmp/data")
|
|
os.Setenv("ETCD_KEY_FILE", "/tmp/file.key")
|
|
os.Setenv("ETCD_BIND_ADDR", "127.0.0.1:4003")
|
|
os.Setenv("ETCD_PEERS", "coreos.com:4001,coreos.com:4002")
|
|
os.Setenv("ETCD_PEERS_FILE", "/tmp/peers")
|
|
os.Setenv("ETCD_MAX_CLUSTER_SIZE", "10")
|
|
os.Setenv("ETCD_MAX_RESULT_BUFFER", "512")
|
|
os.Setenv("ETCD_MAX_RETRY_ATTEMPTS", "5")
|
|
os.Setenv("ETCD_NAME", "test-name")
|
|
os.Setenv("ETCD_SNAPSHOT", "true")
|
|
os.Setenv("ETCD_VERBOSE", "1")
|
|
os.Setenv("ETCD_VERY_VERBOSE", "yes")
|
|
os.Setenv("ETCD_WEB_URL", "/web")
|
|
os.Setenv("ETCD_PEER_ADDR", "127.0.0.1:7002")
|
|
os.Setenv("ETCD_PEER_CA_FILE", "/tmp/peer/file.ca")
|
|
os.Setenv("ETCD_PEER_CERT_FILE", "/tmp/peer/file.cert")
|
|
os.Setenv("ETCD_PEER_KEY_FILE", "/tmp/peer/file.key")
|
|
os.Setenv("ETCD_PEER_BIND_ADDR", "127.0.0.1:7003")
|
|
|
|
c := NewConfig()
|
|
c.LoadEnv()
|
|
assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
|
|
assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
|
|
assert.Equal(t, c.CorsOrigins, []string{"localhost:4001", "localhost:4002"}, "")
|
|
assert.Equal(t, c.DataDir, "/tmp/data", "")
|
|
assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
|
|
assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
|
|
assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
|
|
assert.Equal(t, c.PeersFile, "/tmp/peers", "")
|
|
assert.Equal(t, c.MaxClusterSize, 10, "")
|
|
assert.Equal(t, c.MaxResultBuffer, 512, "")
|
|
assert.Equal(t, c.MaxRetryAttempts, 5, "")
|
|
assert.Equal(t, c.Name, "test-name", "")
|
|
assert.Equal(t, c.Snapshot, true, "")
|
|
assert.Equal(t, c.Verbose, true, "")
|
|
assert.Equal(t, c.VeryVerbose, true, "")
|
|
assert.Equal(t, c.Peer.Addr, "127.0.0.1:7002", "")
|
|
assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
|
|
assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
|
|
assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
|
|
assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:7003", "")
|
|
}
|
|
|
|
// Ensures that the "help" flag can be parsed.
|
|
func TestConfigHelpFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-help"}), "")
|
|
assert.True(t, c.ShowHelp)
|
|
}
|
|
|
|
// Ensures that the abbreviated "help" flag can be parsed.
|
|
func TestConfigAbbreviatedHelpFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-h"}), "")
|
|
assert.True(t, c.ShowHelp)
|
|
}
|
|
|
|
// Ensures that the "version" flag can be parsed.
|
|
func TestConfigVersionFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-version"}), "")
|
|
assert.True(t, c.ShowVersion)
|
|
}
|
|
|
|
// Ensures that the "force config" flag can be parsed.
|
|
func TestConfigForceFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-force"}), "")
|
|
assert.True(t, c.Force)
|
|
}
|
|
|
|
// Ensures that the abbreviated "force config" flag can be parsed.
|
|
func TestConfigAbbreviatedForceFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-f"}), "")
|
|
assert.True(t, c.Force)
|
|
}
|
|
|
|
// Ensures that a the advertised url can be parsed from the environment.
|
|
func TestConfigAddrEnv(t *testing.T) {
|
|
withEnv("ETCD_ADDR", "127.0.0.1:4002", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the advertised flag can be parsed.
|
|
func TestConfigAddrFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-addr", "127.0.0.1:4002"}), "")
|
|
assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
|
|
}
|
|
|
|
// Ensures that a the CA file can be parsed from the environment.
|
|
func TestConfigCAFileEnv(t *testing.T) {
|
|
withEnv("ETCD_CA_FILE", "/tmp/file.ca", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the CA file flag can be parsed.
|
|
func TestConfigCAFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-ca-file", "/tmp/file.ca"}), "")
|
|
assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
|
|
}
|
|
|
|
// Ensures that a the CA file can be parsed from the environment.
|
|
func TestConfigCertFileEnv(t *testing.T) {
|
|
withEnv("ETCD_CERT_FILE", "/tmp/file.cert", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Cert file flag can be parsed.
|
|
func TestConfigCertFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-cert-file", "/tmp/file.cert"}), "")
|
|
assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
|
|
}
|
|
|
|
// Ensures that a the Key file can be parsed from the environment.
|
|
func TestConfigKeyFileEnv(t *testing.T) {
|
|
withEnv("ETCD_KEY_FILE", "/tmp/file.key", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Key file flag can be parsed.
|
|
func TestConfigKeyFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-key-file", "/tmp/file.key"}), "")
|
|
assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
|
|
}
|
|
|
|
// Ensures that a the Listen Host can be parsed from the environment.
|
|
func TestConfigBindAddrEnv(t *testing.T) {
|
|
withEnv("ETCD_BIND_ADDR", "127.0.0.1:4003", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Listen Host file flag can be parsed.
|
|
func TestConfigBindAddrFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-bind-addr", "127.0.0.1:4003"}), "")
|
|
assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
|
|
}
|
|
|
|
// Ensures that the peers can be parsed from the environment.
|
|
func TestConfigPeersEnv(t *testing.T) {
|
|
withEnv("ETCD_PEERS", "coreos.com:4001,coreos.com:4002", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Peers flag can be parsed.
|
|
func TestConfigPeersFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peers", "coreos.com:4001,coreos.com:4002"}), "")
|
|
assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
|
|
}
|
|
|
|
// Ensures that the Peers File can be parsed from the environment.
|
|
func TestConfigPeersFileEnv(t *testing.T) {
|
|
withEnv("ETCD_PEERS_FILE", "/tmp/peers", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.PeersFile, "/tmp/peers", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Peers File flag can be parsed.
|
|
func TestConfigPeersFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peers-file", "/tmp/peers"}), "")
|
|
assert.Equal(t, c.PeersFile, "/tmp/peers", "")
|
|
}
|
|
|
|
// Ensures that the Max Cluster Size can be parsed from the environment.
|
|
func TestConfigMaxClusterSizeEnv(t *testing.T) {
|
|
withEnv("ETCD_MAX_CLUSTER_SIZE", "5", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.MaxClusterSize, 5, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Max Cluster Size flag can be parsed.
|
|
func TestConfigMaxClusterSizeFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-max-cluster-size", "5"}), "")
|
|
assert.Equal(t, c.MaxClusterSize, 5, "")
|
|
}
|
|
|
|
// Ensures that the Max Result Buffer can be parsed from the environment.
|
|
func TestConfigMaxResultBufferEnv(t *testing.T) {
|
|
withEnv("ETCD_MAX_RESULT_BUFFER", "512", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.MaxResultBuffer, 512, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Max Result Buffer flag can be parsed.
|
|
func TestConfigMaxResultBufferFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-max-result-buffer", "512"}), "")
|
|
assert.Equal(t, c.MaxResultBuffer, 512, "")
|
|
}
|
|
|
|
// Ensures that the Max Retry Attempts can be parsed from the environment.
|
|
func TestConfigMaxRetryAttemptsEnv(t *testing.T) {
|
|
withEnv("ETCD_MAX_RETRY_ATTEMPTS", "10", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.MaxRetryAttempts, 10, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Max Retry Attempts flag can be parsed.
|
|
func TestConfigMaxRetryAttemptsFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-max-retry-attempts", "10"}), "")
|
|
assert.Equal(t, c.MaxRetryAttempts, 10, "")
|
|
}
|
|
|
|
// Ensures that the Name can be parsed from the environment.
|
|
func TestConfigNameEnv(t *testing.T) {
|
|
withEnv("ETCD_NAME", "test-name", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Name, "test-name", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Name flag can be parsed.
|
|
func TestConfigNameFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-name", "test-name"}), "")
|
|
assert.Equal(t, c.Name, "test-name", "")
|
|
}
|
|
|
|
// Ensures that Snapshot can be parsed from the environment.
|
|
func TestConfigSnapshotEnv(t *testing.T) {
|
|
withEnv("ETCD_SNAPSHOT", "1", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Snapshot, true, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Snapshot flag can be parsed.
|
|
func TestConfigSnapshotFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-snapshot"}), "")
|
|
assert.Equal(t, c.Snapshot, true, "")
|
|
}
|
|
|
|
// Ensures that Verbose can be parsed from the environment.
|
|
func TestConfigVerboseEnv(t *testing.T) {
|
|
withEnv("ETCD_VERBOSE", "true", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Verbose, true, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Verbose flag can be parsed.
|
|
func TestConfigVerboseFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-v"}), "")
|
|
assert.Equal(t, c.Verbose, true, "")
|
|
}
|
|
|
|
// Ensures that Very Verbose can be parsed from the environment.
|
|
func TestConfigVeryVerboseEnv(t *testing.T) {
|
|
withEnv("ETCD_VERY_VERBOSE", "true", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.VeryVerbose, true, "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Very Verbose flag can be parsed.
|
|
func TestConfigVeryVerboseFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-vv"}), "")
|
|
assert.Equal(t, c.VeryVerbose, true, "")
|
|
}
|
|
|
|
// Ensures that the Peer Advertised URL can be parsed from the environment.
|
|
func TestConfigPeerAddrEnv(t *testing.T) {
|
|
withEnv("ETCD_PEER_ADDR", "localhost:7002", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Peer.Addr, "localhost:7002", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Peer Advertised URL flag can be parsed.
|
|
func TestConfigPeerAddrFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peer-addr", "localhost:7002"}), "")
|
|
assert.Equal(t, c.Peer.Addr, "localhost:7002", "")
|
|
}
|
|
|
|
// Ensures that the Peer CA File can be parsed from the environment.
|
|
func TestConfigPeerCAFileEnv(t *testing.T) {
|
|
withEnv("ETCD_PEER_CA_FILE", "/tmp/peer/file.ca", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Peer CA file flag can be parsed.
|
|
func TestConfigPeerCAFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peer-ca-file", "/tmp/peer/file.ca"}), "")
|
|
assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
|
|
}
|
|
|
|
// Ensures that the Peer Cert File can be parsed from the environment.
|
|
func TestConfigPeerCertFileEnv(t *testing.T) {
|
|
withEnv("ETCD_PEER_CERT_FILE", "/tmp/peer/file.cert", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Cert file flag can be parsed.
|
|
func TestConfigPeerCertFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peer-cert-file", "/tmp/peer/file.cert"}), "")
|
|
assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
|
|
}
|
|
|
|
// Ensures that the Peer Key File can be parsed from the environment.
|
|
func TestConfigPeerKeyFileEnv(t *testing.T) {
|
|
withEnv("ETCD_PEER_KEY_FILE", "/tmp/peer/file.key", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a the Peer Key file flag can be parsed.
|
|
func TestConfigPeerKeyFileFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peer-key-file", "/tmp/peer/file.key"}), "")
|
|
assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
|
|
}
|
|
|
|
// Ensures that the Peer Listen Host can be parsed from the environment.
|
|
func TestConfigPeerBindAddrEnv(t *testing.T) {
|
|
withEnv("ETCD_PEER_BIND_ADDR", "localhost:7004", func(c *Config) {
|
|
assert.Nil(t, c.LoadEnv(), "")
|
|
assert.Equal(t, c.Peer.BindAddr, "localhost:7004", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that a bad flag returns an error.
|
|
func TestConfigBadFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-no-such-flag"})
|
|
assert.Error(t, err)
|
|
assert.Equal(t, err.Error(), `flag provided but not defined: -no-such-flag`)
|
|
}
|
|
|
|
// Ensures that a the Peer Listen Host file flag can be parsed.
|
|
func TestConfigPeerBindAddrFlag(t *testing.T) {
|
|
c := NewConfig()
|
|
assert.Nil(t, c.LoadFlags([]string{"-peer-bind-addr", "127.0.0.1:4003"}), "")
|
|
assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:4003", "")
|
|
}
|
|
|
|
// Ensures that a system config field is overridden by a custom config field.
|
|
func TestConfigCustomConfigOverrideSystemConfig(t *testing.T) {
|
|
system := `addr = "127.0.0.1:5000"`
|
|
custom := `addr = "127.0.0.1:6000"`
|
|
withTempFile(system, func(p1 string) {
|
|
withTempFile(custom, func(p2 string) {
|
|
c := NewConfig()
|
|
c.SystemPath = p1
|
|
assert.Nil(t, c.Load([]string{"-config", p2}), "")
|
|
assert.Equal(t, c.Addr, "http://127.0.0.1:6000", "")
|
|
})
|
|
})
|
|
}
|
|
|
|
// Ensures that a custom config field is overridden by an environment variable.
|
|
func TestConfigEnvVarOverrideCustomConfig(t *testing.T) {
|
|
os.Setenv("ETCD_PEER_ADDR", "127.0.0.1:8000")
|
|
defer os.Setenv("ETCD_PEER_ADDR", "")
|
|
|
|
custom := `[peer]` + "\n" + `advertised_url = "127.0.0.1:9000"`
|
|
withTempFile(custom, func(path string) {
|
|
c := NewConfig()
|
|
c.SystemPath = ""
|
|
assert.Nil(t, c.Load([]string{"-config", path}), "")
|
|
assert.Equal(t, c.Peer.Addr, "http://127.0.0.1:8000", "")
|
|
})
|
|
}
|
|
|
|
// Ensures that an environment variable field is overridden by a command line argument.
|
|
func TestConfigCLIArgsOverrideEnvVar(t *testing.T) {
|
|
os.Setenv("ETCD_ADDR", "127.0.0.1:1000")
|
|
defer os.Setenv("ETCD_ADDR", "")
|
|
|
|
c := NewConfig()
|
|
c.SystemPath = ""
|
|
assert.Nil(t, c.Load([]string{"-addr", "127.0.0.1:2000"}), "")
|
|
assert.Equal(t, c.Addr, "http://127.0.0.1:2000", "")
|
|
}
|
|
|
|
//--------------------------------------
|
|
// DEPRECATED (v1)
|
|
//--------------------------------------
|
|
|
|
func TestConfigDeprecatedAddrFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-c", "127.0.0.1:4002"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Addr, "127.0.0.1:4002")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -addr, not -c")
|
|
}
|
|
|
|
func TestConfigDeprecatedBindAddrFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-cl", "127.0.0.1:4003"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -bind-addr, not -cl", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedCAFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-clientCAFile", "/tmp/file.ca"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -ca-file, not -clientCAFile", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedCertFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-clientCert", "/tmp/file.cert"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -cert-file, not -clientCert", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedKeyFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-clientKey", "/tmp/file.key"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -key-file, not -clientKey", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeersFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-C", "coreos.com:4001,coreos.com:4002"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peers, not -C", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeersFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-CF", "/tmp/machines"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.PeersFile, "/tmp/machines", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peers-file, not -CF", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedMaxClusterSizeFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-maxsize", "5"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.MaxClusterSize, 5, "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -max-cluster-size, not -maxsize", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedMaxResultBufferFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-m", "512"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.MaxResultBuffer, 512, "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -max-result-buffer, not -m", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedMaxRetryAttemptsFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-r", "10"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.MaxRetryAttempts, 10, "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -max-retry-attempts, not -r", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedNameFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-n", "test-name"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Name, "test-name", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -name, not -n", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeerAddrFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-s", "localhost:7002"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Peer.Addr, "localhost:7002", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peer-addr, not -s", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeerBindAddrFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-sl", "127.0.0.1:4003"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:4003", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peer-bind-addr, not -sl", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeerCAFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-serverCAFile", "/tmp/peer/file.ca"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peer-ca-file, not -serverCAFile", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeerCertFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-serverCert", "/tmp/peer/file.cert"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peer-cert-file, not -serverCert", "")
|
|
}
|
|
|
|
func TestConfigDeprecatedPeerKeyFileFlag(t *testing.T) {
|
|
_, stderr := capture(func() {
|
|
c := NewConfig()
|
|
err := c.LoadFlags([]string{"-serverKey", "/tmp/peer/file.key"})
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
|
|
})
|
|
assert.Equal(t, stderr, "[deprecated] use -peer-key-file, not -serverKey", "")
|
|
}
|
|
|
|
//--------------------------------------
|
|
// Helpers
|
|
//--------------------------------------
|
|
|
|
// Sets up the environment with a given environment variable set.
|
|
func withEnv(key, value string, f func(c *Config)) {
|
|
os.Setenv(key, value)
|
|
defer os.Setenv(key, "")
|
|
c := NewConfig()
|
|
f(c)
|
|
}
|
|
|
|
// Creates a temp file and calls a function with the context.
|
|
func withTempFile(content string, fn func(string)) {
|
|
f, _ := ioutil.TempFile("", "")
|
|
f.WriteString(content)
|
|
f.Close()
|
|
defer os.Remove(f.Name())
|
|
fn(f.Name())
|
|
}
|
|
|
|
// Captures STDOUT & STDERR and returns the output as strings.
|
|
func capture(fn func()) (string, string) {
|
|
// Create temp files.
|
|
tmpout, _ := ioutil.TempFile("", "")
|
|
defer os.Remove(tmpout.Name())
|
|
tmperr, _ := ioutil.TempFile("", "")
|
|
defer os.Remove(tmperr.Name())
|
|
|
|
stdout, stderr := os.Stdout, os.Stderr
|
|
os.Stdout, os.Stderr = tmpout, tmperr
|
|
|
|
// Execute function argument and then reassign stdout/stderr.
|
|
fn()
|
|
os.Stdout, os.Stderr = stdout, stderr
|
|
|
|
// Close temp files and read them.
|
|
tmpout.Close()
|
|
bout, _ := ioutil.ReadFile(tmpout.Name())
|
|
tmperr.Close()
|
|
berr, _ := ioutil.ReadFile(tmperr.Name())
|
|
|
|
return string(bout), string(berr)
|
|
}
|