command_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package command
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestCommandConfig(t *testing.T) {
  9. require.Equal(t, defaultTimeout, config.Timeout)
  10. cfg := Config{
  11. Timeout: 10,
  12. Env: []string{"a=b"},
  13. }
  14. err := cfg.Initialize()
  15. require.NoError(t, err)
  16. assert.Equal(t, cfg.Timeout, config.Timeout)
  17. assert.Equal(t, cfg.Env, config.Env)
  18. assert.Len(t, cfg.Commands, 0)
  19. timeout, env := GetConfig("cmd")
  20. assert.Equal(t, time.Duration(config.Timeout)*time.Second, timeout)
  21. assert.Contains(t, env, "a=b")
  22. cfg.Commands = []Command{
  23. {
  24. Path: "cmd1",
  25. Timeout: 30,
  26. Env: []string{"c=d"},
  27. },
  28. {
  29. Path: "cmd2",
  30. Timeout: 0,
  31. Env: []string{"e=f"},
  32. },
  33. }
  34. err = cfg.Initialize()
  35. require.NoError(t, err)
  36. assert.Equal(t, cfg.Timeout, config.Timeout)
  37. assert.Equal(t, cfg.Env, config.Env)
  38. if assert.Len(t, config.Commands, 2) {
  39. assert.Equal(t, cfg.Commands[0].Path, config.Commands[0].Path)
  40. assert.Equal(t, cfg.Commands[0].Timeout, config.Commands[0].Timeout)
  41. assert.Equal(t, cfg.Commands[0].Env, config.Commands[0].Env)
  42. assert.Equal(t, cfg.Commands[1].Path, config.Commands[1].Path)
  43. assert.Equal(t, cfg.Timeout, config.Commands[1].Timeout)
  44. assert.Equal(t, cfg.Commands[1].Env, config.Commands[1].Env)
  45. }
  46. timeout, env = GetConfig("cmd1")
  47. assert.Equal(t, time.Duration(config.Commands[0].Timeout)*time.Second, timeout)
  48. assert.Contains(t, env, "a=b")
  49. assert.Contains(t, env, "c=d")
  50. assert.NotContains(t, env, "e=f")
  51. timeout, env = GetConfig("cmd2")
  52. assert.Equal(t, time.Duration(config.Timeout)*time.Second, timeout)
  53. assert.Contains(t, env, "a=b")
  54. assert.NotContains(t, env, "c=d")
  55. assert.Contains(t, env, "e=f")
  56. }
  57. func TestConfigErrors(t *testing.T) {
  58. c := Config{}
  59. err := c.Initialize()
  60. if assert.Error(t, err) {
  61. assert.Contains(t, err.Error(), "invalid timeout")
  62. }
  63. c.Timeout = 10
  64. c.Env = []string{"a"}
  65. err = c.Initialize()
  66. if assert.Error(t, err) {
  67. assert.Contains(t, err.Error(), "invalid env var")
  68. }
  69. c.Env = nil
  70. c.Commands = []Command{
  71. {
  72. Path: "",
  73. },
  74. }
  75. err = c.Initialize()
  76. if assert.Error(t, err) {
  77. assert.Contains(t, err.Error(), "invalid path")
  78. }
  79. c.Commands = []Command{
  80. {
  81. Path: "path",
  82. Timeout: 10000,
  83. },
  84. }
  85. err = c.Initialize()
  86. if assert.Error(t, err) {
  87. assert.Contains(t, err.Error(), "invalid timeout")
  88. }
  89. c.Commands = []Command{
  90. {
  91. Path: "path",
  92. Timeout: 30,
  93. Env: []string{"b"},
  94. },
  95. }
  96. err = c.Initialize()
  97. if assert.Error(t, err) {
  98. assert.Contains(t, err.Error(), "invalid env var")
  99. }
  100. }