config_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package presence
  2. import (
  3. "net"
  4. "path/filepath"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/assert"
  8. )
  9. func TestParseConfig(t *testing.T) {
  10. cases := []struct {
  11. name, file string
  12. config *Config
  13. err string
  14. }{
  15. {
  16. name: "success",
  17. file: "success.yml",
  18. config: &Config{
  19. Interval: 1 * time.Minute,
  20. MACAddresses: []MACAddress{
  21. {net.HardwareAddr{0, 0, 0, 0, 0, 0xa}},
  22. {net.HardwareAddr{0, 0, 0, 0, 0, 0xb}},
  23. },
  24. PingCount: 5,
  25. },
  26. },
  27. {
  28. name: "defaults",
  29. file: "defaults.yml",
  30. config: &Config{
  31. Interval: 30 * time.Second,
  32. MACAddresses: []MACAddress{
  33. {net.HardwareAddr{0, 0, 0, 0, 0, 1}},
  34. {net.HardwareAddr{0, 0, 0, 0, 0, 2}},
  35. },
  36. PingCount: 1,
  37. },
  38. },
  39. {
  40. name: "nonexistent file",
  41. file: "nonexistent.yml",
  42. err: "open tests/nonexistent.yml: no such file or directory",
  43. },
  44. {
  45. name: "wrong MAC encoding",
  46. file: "wrong_mac_encoding.yml",
  47. err: "yaml: unmarshal errors:\n line 2: cannot unmarshal !!seq into string",
  48. },
  49. {
  50. name: "bad MAC encoding",
  51. file: "bad_mac_encoding.yml",
  52. err: "address 00-00-00-00-00-0x: invalid MAC address",
  53. },
  54. {
  55. name: "negative interval",
  56. file: "negative_interval.yml",
  57. err: "negative interval (-1ns)",
  58. },
  59. }
  60. for _, tc := range cases {
  61. tc := tc
  62. t.Run(tc.name, func(t *testing.T) {
  63. t.Parallel()
  64. assert := assert.New(t)
  65. c, err := ParseConfig(filepath.Join("tests", tc.file))
  66. if tc.err != "" {
  67. assert.ErrorContains(err, tc.err)
  68. } else {
  69. assert.NoError(err)
  70. assert.Equal(tc.config, c)
  71. }
  72. })
  73. }
  74. }