config_test.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. package server
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. "github.com/BurntSushi/toml"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. // Ensures that a configuration can be deserialized from TOML.
  10. func TestConfigTOML(t *testing.T) {
  11. content := `
  12. addr = "127.0.0.1:4002"
  13. ca_file = "/tmp/file.ca"
  14. cert_file = "/tmp/file.cert"
  15. cors = ["*"]
  16. cpu_profile_file = "XXX"
  17. data_dir = "/tmp/data"
  18. key_file = "/tmp/file.key"
  19. bind_addr = "127.0.0.1:4003"
  20. peers = ["coreos.com:4001", "coreos.com:4002"]
  21. peers_file = "/tmp/peers"
  22. max_cluster_size = 10
  23. max_result_buffer = 512
  24. max_retry_attempts = 5
  25. name = "test-name"
  26. snapshot = true
  27. verbose = true
  28. very_verbose = true
  29. web_url = "/web"
  30. [peer]
  31. addr = "127.0.0.1:7002"
  32. ca_file = "/tmp/peer/file.ca"
  33. cert_file = "/tmp/peer/file.cert"
  34. key_file = "/tmp/peer/file.key"
  35. bind_addr = "127.0.0.1:7003"
  36. `
  37. c := NewConfig()
  38. _, err := toml.Decode(content, &c)
  39. assert.Nil(t, err, "")
  40. assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
  41. assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
  42. assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
  43. assert.Equal(t, c.CorsOrigins, []string{"*"}, "")
  44. assert.Equal(t, c.DataDir, "/tmp/data", "")
  45. assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
  46. assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
  47. assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
  48. assert.Equal(t, c.PeersFile, "/tmp/peers", "")
  49. assert.Equal(t, c.MaxClusterSize, 10, "")
  50. assert.Equal(t, c.MaxResultBuffer, 512, "")
  51. assert.Equal(t, c.MaxRetryAttempts, 5, "")
  52. assert.Equal(t, c.Name, "test-name", "")
  53. assert.Equal(t, c.Snapshot, true, "")
  54. assert.Equal(t, c.Verbose, true, "")
  55. assert.Equal(t, c.VeryVerbose, true, "")
  56. assert.Equal(t, c.Peer.Addr, "127.0.0.1:7002", "")
  57. assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
  58. assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
  59. assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
  60. assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:7003", "")
  61. }
  62. // Ensures that a configuration can be retrieved from environment variables.
  63. func TestConfigEnv(t *testing.T) {
  64. os.Setenv("ETCD_CA_FILE", "/tmp/file.ca")
  65. os.Setenv("ETCD_CERT_FILE", "/tmp/file.cert")
  66. os.Setenv("ETCD_CPU_PROFILE_FILE", "XXX")
  67. os.Setenv("ETCD_CORS", "localhost:4001,localhost:4002")
  68. os.Setenv("ETCD_DATA_DIR", "/tmp/data")
  69. os.Setenv("ETCD_KEY_FILE", "/tmp/file.key")
  70. os.Setenv("ETCD_BIND_ADDR", "127.0.0.1:4003")
  71. os.Setenv("ETCD_PEERS", "coreos.com:4001,coreos.com:4002")
  72. os.Setenv("ETCD_PEERS_FILE", "/tmp/peers")
  73. os.Setenv("ETCD_MAX_CLUSTER_SIZE", "10")
  74. os.Setenv("ETCD_MAX_RESULT_BUFFER", "512")
  75. os.Setenv("ETCD_MAX_RETRY_ATTEMPTS", "5")
  76. os.Setenv("ETCD_NAME", "test-name")
  77. os.Setenv("ETCD_SNAPSHOT", "true")
  78. os.Setenv("ETCD_VERBOSE", "1")
  79. os.Setenv("ETCD_VERY_VERBOSE", "yes")
  80. os.Setenv("ETCD_WEB_URL", "/web")
  81. os.Setenv("ETCD_PEER_ADDR", "127.0.0.1:7002")
  82. os.Setenv("ETCD_PEER_CA_FILE", "/tmp/peer/file.ca")
  83. os.Setenv("ETCD_PEER_CERT_FILE", "/tmp/peer/file.cert")
  84. os.Setenv("ETCD_PEER_KEY_FILE", "/tmp/peer/file.key")
  85. os.Setenv("ETCD_PEER_BIND_ADDR", "127.0.0.1:7003")
  86. c := NewConfig()
  87. c.LoadEnv()
  88. assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
  89. assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
  90. assert.Equal(t, c.CorsOrigins, []string{"localhost:4001", "localhost:4002"}, "")
  91. assert.Equal(t, c.DataDir, "/tmp/data", "")
  92. assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
  93. assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
  94. assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
  95. assert.Equal(t, c.PeersFile, "/tmp/peers", "")
  96. assert.Equal(t, c.MaxClusterSize, 10, "")
  97. assert.Equal(t, c.MaxResultBuffer, 512, "")
  98. assert.Equal(t, c.MaxRetryAttempts, 5, "")
  99. assert.Equal(t, c.Name, "test-name", "")
  100. assert.Equal(t, c.Snapshot, true, "")
  101. assert.Equal(t, c.Verbose, true, "")
  102. assert.Equal(t, c.VeryVerbose, true, "")
  103. assert.Equal(t, c.Peer.Addr, "127.0.0.1:7002", "")
  104. assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
  105. assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
  106. assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
  107. assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:7003", "")
  108. }
  109. // Ensures that the "force config" flag can be parsed.
  110. func TestConfigForceFlag(t *testing.T) {
  111. c := NewConfig()
  112. assert.Nil(t, c.LoadFlags([]string{"-force"}), "")
  113. assert.True(t, c.Force)
  114. }
  115. // Ensures that the abbreviated "force config" flag can be parsed.
  116. func TestConfigAbbreviatedForceFlag(t *testing.T) {
  117. c := NewConfig()
  118. assert.Nil(t, c.LoadFlags([]string{"-f"}), "")
  119. assert.True(t, c.Force)
  120. }
  121. // Ensures that a the advertised url can be parsed from the environment.
  122. func TestConfigAddrEnv(t *testing.T) {
  123. withEnv("ETCD_ADDR", "127.0.0.1:4002", func(c *Config) {
  124. assert.Nil(t, c.LoadEnv(), "")
  125. assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
  126. })
  127. }
  128. // Ensures that a the advertised flag can be parsed.
  129. func TestConfigAddrFlag(t *testing.T) {
  130. c := NewConfig()
  131. assert.Nil(t, c.LoadFlags([]string{"-addr", "127.0.0.1:4002"}), "")
  132. assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
  133. }
  134. // Ensures that a the CA file can be parsed from the environment.
  135. func TestConfigCAFileEnv(t *testing.T) {
  136. withEnv("ETCD_CA_FILE", "/tmp/file.ca", func(c *Config) {
  137. assert.Nil(t, c.LoadEnv(), "")
  138. assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
  139. })
  140. }
  141. // Ensures that a the CA file flag can be parsed.
  142. func TestConfigCAFileFlag(t *testing.T) {
  143. c := NewConfig()
  144. assert.Nil(t, c.LoadFlags([]string{"-ca-file", "/tmp/file.ca"}), "")
  145. assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
  146. }
  147. // Ensures that a the CA file can be parsed from the environment.
  148. func TestConfigCertFileEnv(t *testing.T) {
  149. withEnv("ETCD_CERT_FILE", "/tmp/file.cert", func(c *Config) {
  150. assert.Nil(t, c.LoadEnv(), "")
  151. assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
  152. })
  153. }
  154. // Ensures that a the Cert file flag can be parsed.
  155. func TestConfigCertFileFlag(t *testing.T) {
  156. c := NewConfig()
  157. assert.Nil(t, c.LoadFlags([]string{"-cert-file", "/tmp/file.cert"}), "")
  158. assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
  159. }
  160. // Ensures that a the Key file can be parsed from the environment.
  161. func TestConfigKeyFileEnv(t *testing.T) {
  162. withEnv("ETCD_KEY_FILE", "/tmp/file.key", func(c *Config) {
  163. assert.Nil(t, c.LoadEnv(), "")
  164. assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
  165. })
  166. }
  167. // Ensures that a the Key file flag can be parsed.
  168. func TestConfigKeyFileFlag(t *testing.T) {
  169. c := NewConfig()
  170. assert.Nil(t, c.LoadFlags([]string{"-key-file", "/tmp/file.key"}), "")
  171. assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
  172. }
  173. // Ensures that a the Listen Host can be parsed from the environment.
  174. func TestConfigBindAddrEnv(t *testing.T) {
  175. withEnv("ETCD_BIND_ADDR", "127.0.0.1:4003", func(c *Config) {
  176. assert.Nil(t, c.LoadEnv(), "")
  177. assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
  178. })
  179. }
  180. // Ensures that a the Listen Host file flag can be parsed.
  181. func TestConfigBindAddrFlag(t *testing.T) {
  182. c := NewConfig()
  183. assert.Nil(t, c.LoadFlags([]string{"-bind-addr", "127.0.0.1:4003"}), "")
  184. assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
  185. }
  186. // Ensures that the peers can be parsed from the environment.
  187. func TestConfigPeersEnv(t *testing.T) {
  188. withEnv("ETCD_PEERS", "coreos.com:4001,coreos.com:4002", func(c *Config) {
  189. assert.Nil(t, c.LoadEnv(), "")
  190. assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
  191. })
  192. }
  193. // Ensures that a the Peers flag can be parsed.
  194. func TestConfigPeersFlag(t *testing.T) {
  195. c := NewConfig()
  196. assert.Nil(t, c.LoadFlags([]string{"-peers", "coreos.com:4001,coreos.com:4002"}), "")
  197. assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
  198. }
  199. // Ensures that the Peers File can be parsed from the environment.
  200. func TestConfigPeersFileEnv(t *testing.T) {
  201. withEnv("ETCD_PEERS_FILE", "/tmp/peers", func(c *Config) {
  202. assert.Nil(t, c.LoadEnv(), "")
  203. assert.Equal(t, c.PeersFile, "/tmp/peers", "")
  204. })
  205. }
  206. // Ensures that a the Peers File flag can be parsed.
  207. func TestConfigPeersFileFlag(t *testing.T) {
  208. c := NewConfig()
  209. assert.Nil(t, c.LoadFlags([]string{"-peers-file", "/tmp/peers"}), "")
  210. assert.Equal(t, c.PeersFile, "/tmp/peers", "")
  211. }
  212. // Ensures that the Max Cluster Size can be parsed from the environment.
  213. func TestConfigMaxClusterSizeEnv(t *testing.T) {
  214. withEnv("ETCD_MAX_CLUSTER_SIZE", "5", func(c *Config) {
  215. assert.Nil(t, c.LoadEnv(), "")
  216. assert.Equal(t, c.MaxClusterSize, 5, "")
  217. })
  218. }
  219. // Ensures that a the Max Cluster Size flag can be parsed.
  220. func TestConfigMaxClusterSizeFlag(t *testing.T) {
  221. c := NewConfig()
  222. assert.Nil(t, c.LoadFlags([]string{"-max-cluster-size", "5"}), "")
  223. assert.Equal(t, c.MaxClusterSize, 5, "")
  224. }
  225. // Ensures that the Max Result Buffer can be parsed from the environment.
  226. func TestConfigMaxResultBufferEnv(t *testing.T) {
  227. withEnv("ETCD_MAX_RESULT_BUFFER", "512", func(c *Config) {
  228. assert.Nil(t, c.LoadEnv(), "")
  229. assert.Equal(t, c.MaxResultBuffer, 512, "")
  230. })
  231. }
  232. // Ensures that a the Max Result Buffer flag can be parsed.
  233. func TestConfigMaxResultBufferFlag(t *testing.T) {
  234. c := NewConfig()
  235. assert.Nil(t, c.LoadFlags([]string{"-max-result-buffer", "512"}), "")
  236. assert.Equal(t, c.MaxResultBuffer, 512, "")
  237. }
  238. // Ensures that the Max Retry Attempts can be parsed from the environment.
  239. func TestConfigMaxRetryAttemptsEnv(t *testing.T) {
  240. withEnv("ETCD_MAX_RETRY_ATTEMPTS", "10", func(c *Config) {
  241. assert.Nil(t, c.LoadEnv(), "")
  242. assert.Equal(t, c.MaxRetryAttempts, 10, "")
  243. })
  244. }
  245. // Ensures that a the Max Retry Attempts flag can be parsed.
  246. func TestConfigMaxRetryAttemptsFlag(t *testing.T) {
  247. c := NewConfig()
  248. assert.Nil(t, c.LoadFlags([]string{"-max-retry-attempts", "10"}), "")
  249. assert.Equal(t, c.MaxRetryAttempts, 10, "")
  250. }
  251. // Ensures that the Name can be parsed from the environment.
  252. func TestConfigNameEnv(t *testing.T) {
  253. withEnv("ETCD_NAME", "test-name", func(c *Config) {
  254. assert.Nil(t, c.LoadEnv(), "")
  255. assert.Equal(t, c.Name, "test-name", "")
  256. })
  257. }
  258. // Ensures that a the Name flag can be parsed.
  259. func TestConfigNameFlag(t *testing.T) {
  260. c := NewConfig()
  261. assert.Nil(t, c.LoadFlags([]string{"-name", "test-name"}), "")
  262. assert.Equal(t, c.Name, "test-name", "")
  263. }
  264. // Ensures that Snapshot can be parsed from the environment.
  265. func TestConfigSnapshotEnv(t *testing.T) {
  266. withEnv("ETCD_SNAPSHOT", "1", func(c *Config) {
  267. assert.Nil(t, c.LoadEnv(), "")
  268. assert.Equal(t, c.Snapshot, true, "")
  269. })
  270. }
  271. // Ensures that a the Snapshot flag can be parsed.
  272. func TestConfigSnapshotFlag(t *testing.T) {
  273. c := NewConfig()
  274. assert.Nil(t, c.LoadFlags([]string{"-snapshot"}), "")
  275. assert.Equal(t, c.Snapshot, true, "")
  276. }
  277. // Ensures that Verbose can be parsed from the environment.
  278. func TestConfigVerboseEnv(t *testing.T) {
  279. withEnv("ETCD_VERBOSE", "true", func(c *Config) {
  280. assert.Nil(t, c.LoadEnv(), "")
  281. assert.Equal(t, c.Verbose, true, "")
  282. })
  283. }
  284. // Ensures that a the Verbose flag can be parsed.
  285. func TestConfigVerboseFlag(t *testing.T) {
  286. c := NewConfig()
  287. assert.Nil(t, c.LoadFlags([]string{"-v"}), "")
  288. assert.Equal(t, c.Verbose, true, "")
  289. }
  290. // Ensures that Very Verbose can be parsed from the environment.
  291. func TestConfigVeryVerboseEnv(t *testing.T) {
  292. withEnv("ETCD_VERY_VERBOSE", "true", func(c *Config) {
  293. assert.Nil(t, c.LoadEnv(), "")
  294. assert.Equal(t, c.VeryVerbose, true, "")
  295. })
  296. }
  297. // Ensures that a the Very Verbose flag can be parsed.
  298. func TestConfigVeryVerboseFlag(t *testing.T) {
  299. c := NewConfig()
  300. assert.Nil(t, c.LoadFlags([]string{"-vv"}), "")
  301. assert.Equal(t, c.VeryVerbose, true, "")
  302. }
  303. // Ensures that the Peer Advertised URL can be parsed from the environment.
  304. func TestConfigPeerAddrEnv(t *testing.T) {
  305. withEnv("ETCD_PEER_ADDR", "localhost:7002", func(c *Config) {
  306. assert.Nil(t, c.LoadEnv(), "")
  307. assert.Equal(t, c.Peer.Addr, "localhost:7002", "")
  308. })
  309. }
  310. // Ensures that a the Peer Advertised URL flag can be parsed.
  311. func TestConfigPeerAddrFlag(t *testing.T) {
  312. c := NewConfig()
  313. assert.Nil(t, c.LoadFlags([]string{"-peer-addr", "localhost:7002"}), "")
  314. assert.Equal(t, c.Peer.Addr, "localhost:7002", "")
  315. }
  316. // Ensures that the Peer CA File can be parsed from the environment.
  317. func TestConfigPeerCAFileEnv(t *testing.T) {
  318. withEnv("ETCD_PEER_CA_FILE", "/tmp/peer/file.ca", func(c *Config) {
  319. assert.Nil(t, c.LoadEnv(), "")
  320. assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
  321. })
  322. }
  323. // Ensures that a the Peer CA file flag can be parsed.
  324. func TestConfigPeerCAFileFlag(t *testing.T) {
  325. c := NewConfig()
  326. assert.Nil(t, c.LoadFlags([]string{"-peer-ca-file", "/tmp/peer/file.ca"}), "")
  327. assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
  328. }
  329. // Ensures that the Peer Cert File can be parsed from the environment.
  330. func TestConfigPeerCertFileEnv(t *testing.T) {
  331. withEnv("ETCD_PEER_CERT_FILE", "/tmp/peer/file.cert", func(c *Config) {
  332. assert.Nil(t, c.LoadEnv(), "")
  333. assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
  334. })
  335. }
  336. // Ensures that a the Cert file flag can be parsed.
  337. func TestConfigPeerCertFileFlag(t *testing.T) {
  338. c := NewConfig()
  339. assert.Nil(t, c.LoadFlags([]string{"-peer-cert-file", "/tmp/peer/file.cert"}), "")
  340. assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
  341. }
  342. // Ensures that the Peer Key File can be parsed from the environment.
  343. func TestConfigPeerKeyFileEnv(t *testing.T) {
  344. withEnv("ETCD_PEER_KEY_FILE", "/tmp/peer/file.key", func(c *Config) {
  345. assert.Nil(t, c.LoadEnv(), "")
  346. assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
  347. })
  348. }
  349. // Ensures that a the Peer Key file flag can be parsed.
  350. func TestConfigPeerKeyFileFlag(t *testing.T) {
  351. c := NewConfig()
  352. assert.Nil(t, c.LoadFlags([]string{"-peer-key-file", "/tmp/peer/file.key"}), "")
  353. assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
  354. }
  355. // Ensures that the Peer Listen Host can be parsed from the environment.
  356. func TestConfigPeerBindAddrEnv(t *testing.T) {
  357. withEnv("ETCD_PEER_BIND_ADDR", "localhost:7004", func(c *Config) {
  358. assert.Nil(t, c.LoadEnv(), "")
  359. assert.Equal(t, c.Peer.BindAddr, "localhost:7004", "")
  360. })
  361. }
  362. // Ensures that a the Peer Listen Host file flag can be parsed.
  363. func TestConfigPeerBindAddrFlag(t *testing.T) {
  364. c := NewConfig()
  365. assert.Nil(t, c.LoadFlags([]string{"-peer-bind-addr", "127.0.0.1:4003"}), "")
  366. assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:4003", "")
  367. }
  368. // Ensures that a system config field is overridden by a custom config field.
  369. func TestConfigCustomConfigOverrideSystemConfig(t *testing.T) {
  370. system := `addr = "127.0.0.1:5000"`
  371. custom := `addr = "127.0.0.1:6000"`
  372. withTempFile(system, func(p1 string) {
  373. withTempFile(custom, func(p2 string) {
  374. c := NewConfig()
  375. c.SystemPath = p1
  376. assert.Nil(t, c.Load([]string{"-config", p2}), "")
  377. assert.Equal(t, c.Addr, "http://127.0.0.1:6000", "")
  378. })
  379. })
  380. }
  381. // Ensures that a custom config field is overridden by an environment variable.
  382. func TestConfigEnvVarOverrideCustomConfig(t *testing.T) {
  383. os.Setenv("ETCD_PEER_ADDR", "127.0.0.1:8000")
  384. defer os.Setenv("ETCD_PEER_ADDR", "")
  385. custom := `[peer]` + "\n" + `advertised_url = "127.0.0.1:9000"`
  386. withTempFile(custom, func(path string) {
  387. c := NewConfig()
  388. c.SystemPath = ""
  389. assert.Nil(t, c.Load([]string{"-config", path}), "")
  390. assert.Equal(t, c.Peer.Addr, "http://127.0.0.1:8000", "")
  391. })
  392. }
  393. // Ensures that an environment variable field is overridden by a command line argument.
  394. func TestConfigCLIArgsOverrideEnvVar(t *testing.T) {
  395. os.Setenv("ETCD_ADDR", "127.0.0.1:1000")
  396. defer os.Setenv("ETCD_ADDR", "")
  397. c := NewConfig()
  398. c.SystemPath = ""
  399. assert.Nil(t, c.Load([]string{"-addr", "127.0.0.1:2000"}), "")
  400. assert.Equal(t, c.Addr, "http://127.0.0.1:2000", "")
  401. }
  402. //--------------------------------------
  403. // DEPRECATED (v1)
  404. //--------------------------------------
  405. func TestConfigDeprecatedAddrFlag(t *testing.T) {
  406. c := NewConfig()
  407. err := c.LoadDeprecatedFlags([]string{"-c", "127.0.0.1:4002"})
  408. assert.Equal(t, err.Error(), "[deprecated] use -addr, not -c", "")
  409. assert.Equal(t, c.Addr, "127.0.0.1:4002", "")
  410. }
  411. func TestConfigDeprecatedBindAddrFlag(t *testing.T) {
  412. c := NewConfig()
  413. err := c.LoadDeprecatedFlags([]string{"-cl", "127.0.0.1:4003"})
  414. assert.Equal(t, err.Error(), "[deprecated] use -bind-addr, not -cl", "")
  415. assert.Equal(t, c.BindAddr, "127.0.0.1:4003", "")
  416. }
  417. func TestConfigDeprecatedCAFileFlag(t *testing.T) {
  418. c := NewConfig()
  419. err := c.LoadDeprecatedFlags([]string{"-clientCAFile", "/tmp/file.ca"})
  420. assert.Equal(t, err.Error(), "[deprecated] use -ca-file, not -clientCAFile", "")
  421. assert.Equal(t, c.CAFile, "/tmp/file.ca", "")
  422. }
  423. func TestConfigDeprecatedCertFileFlag(t *testing.T) {
  424. c := NewConfig()
  425. err := c.LoadDeprecatedFlags([]string{"-clientCert", "/tmp/file.cert"})
  426. assert.Equal(t, err.Error(), "[deprecated] use -cert-file, not -clientCert", "")
  427. assert.Equal(t, c.CertFile, "/tmp/file.cert", "")
  428. }
  429. func TestConfigDeprecatedKeyFileFlag(t *testing.T) {
  430. c := NewConfig()
  431. err := c.LoadDeprecatedFlags([]string{"-clientKey", "/tmp/file.key"})
  432. assert.Equal(t, err.Error(), "[deprecated] use -key-file, not -clientKey", "")
  433. assert.Equal(t, c.KeyFile, "/tmp/file.key", "")
  434. }
  435. func TestConfigDeprecatedPeersFlag(t *testing.T) {
  436. c := NewConfig()
  437. err := c.LoadDeprecatedFlags([]string{"-C", "coreos.com:4001,coreos.com:4002"})
  438. assert.Equal(t, err.Error(), "[deprecated] use -peers, not -C", "")
  439. assert.Equal(t, c.Peers, []string{"coreos.com:4001", "coreos.com:4002"}, "")
  440. }
  441. func TestConfigDeprecatedPeersFileFlag(t *testing.T) {
  442. c := NewConfig()
  443. err := c.LoadDeprecatedFlags([]string{"-CF", "/tmp/machines"})
  444. assert.Equal(t, err.Error(), "[deprecated] use -peers-file, not -CF", "")
  445. assert.Equal(t, c.PeersFile, "/tmp/machines", "")
  446. }
  447. func TestConfigDeprecatedMaxClusterSizeFlag(t *testing.T) {
  448. c := NewConfig()
  449. err := c.LoadDeprecatedFlags([]string{"-maxsize", "5"})
  450. assert.Equal(t, err.Error(), "[deprecated] use -max-cluster-size, not -maxsize", "")
  451. assert.Equal(t, c.MaxClusterSize, 5, "")
  452. }
  453. func TestConfigDeprecatedMaxResultBufferFlag(t *testing.T) {
  454. c := NewConfig()
  455. err := c.LoadDeprecatedFlags([]string{"-m", "512"})
  456. assert.Equal(t, err.Error(), "[deprecated] use -max-result-buffer, not -m", "")
  457. assert.Equal(t, c.MaxResultBuffer, 512, "")
  458. }
  459. func TestConfigDeprecatedMaxRetryAttemptsFlag(t *testing.T) {
  460. c := NewConfig()
  461. err := c.LoadDeprecatedFlags([]string{"-r", "10"})
  462. assert.Equal(t, err.Error(), "[deprecated] use -max-retry-attempts, not -r", "")
  463. assert.Equal(t, c.MaxRetryAttempts, 10, "")
  464. }
  465. func TestConfigDeprecatedNameFlag(t *testing.T) {
  466. c := NewConfig()
  467. err := c.LoadDeprecatedFlags([]string{"-n", "test-name"})
  468. assert.Equal(t, err.Error(), "[deprecated] use -name, not -n", "")
  469. assert.Equal(t, c.Name, "test-name", "")
  470. }
  471. func TestConfigDeprecatedPeerAddrFlag(t *testing.T) {
  472. c := NewConfig()
  473. err := c.LoadDeprecatedFlags([]string{"-s", "localhost:7002"})
  474. assert.Equal(t, err.Error(), "[deprecated] use -peer-addr, not -s", "")
  475. assert.Equal(t, c.Peer.Addr, "localhost:7002", "")
  476. }
  477. func TestConfigDeprecatedPeerBindAddrFlag(t *testing.T) {
  478. c := NewConfig()
  479. err := c.LoadDeprecatedFlags([]string{"-sl", "127.0.0.1:4003"})
  480. assert.Equal(t, err.Error(), "[deprecated] use -peer-bind-addr, not -sl", "")
  481. assert.Equal(t, c.Peer.BindAddr, "127.0.0.1:4003", "")
  482. }
  483. func TestConfigDeprecatedPeerCAFileFlag(t *testing.T) {
  484. c := NewConfig()
  485. err := c.LoadDeprecatedFlags([]string{"-serverCAFile", "/tmp/peer/file.ca"})
  486. assert.Equal(t, err.Error(), "[deprecated] use -peer-ca-file, not -serverCAFile", "")
  487. assert.Equal(t, c.Peer.CAFile, "/tmp/peer/file.ca", "")
  488. }
  489. func TestConfigDeprecatedPeerCertFileFlag(t *testing.T) {
  490. c := NewConfig()
  491. err := c.LoadDeprecatedFlags([]string{"-serverCert", "/tmp/peer/file.cert"})
  492. assert.Equal(t, err.Error(), "[deprecated] use -peer-cert-file, not -serverCert", "")
  493. assert.Equal(t, c.Peer.CertFile, "/tmp/peer/file.cert", "")
  494. }
  495. func TestConfigDeprecatedPeerKeyFileFlag(t *testing.T) {
  496. c := NewConfig()
  497. err := c.LoadDeprecatedFlags([]string{"-serverKey", "/tmp/peer/file.key"})
  498. assert.Equal(t, err.Error(), "[deprecated] use -peer-key-file, not -serverKey", "")
  499. assert.Equal(t, c.Peer.KeyFile, "/tmp/peer/file.key", "")
  500. }
  501. //--------------------------------------
  502. // Helpers
  503. //--------------------------------------
  504. // Sets up the environment with a given environment variable set.
  505. func withEnv(key, value string, f func(c *Config)) {
  506. os.Setenv(key, value)
  507. defer os.Setenv(key, "")
  508. c := NewConfig()
  509. f(c)
  510. }
  511. // Creates a temp file and calls a function with the context.
  512. func withTempFile(content string, fn func(string)) {
  513. f, _ := ioutil.TempFile("", "")
  514. f.WriteString(content)
  515. f.Close()
  516. defer os.Remove(f.Name())
  517. fn(f.Name())
  518. }