utils_test.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package overlayutils
  2. import (
  3. "testing"
  4. "gotest.tools/v3/assert"
  5. is "gotest.tools/v3/assert/cmp"
  6. )
  7. func TestAppendVNIList(t *testing.T) {
  8. cases := []struct {
  9. name string
  10. slice []uint32
  11. csv string
  12. want []uint32
  13. wantErr string
  14. }{
  15. {
  16. name: "NilSlice",
  17. csv: "1,2,3",
  18. want: []uint32{1, 2, 3},
  19. },
  20. {
  21. name: "TrailingComma",
  22. csv: "1,2,3,",
  23. want: []uint32{1, 2, 3},
  24. wantErr: `invalid vxlan id value "" passed`,
  25. },
  26. {
  27. name: "EmptySlice",
  28. slice: make([]uint32, 0, 10),
  29. csv: "1,2,3",
  30. want: []uint32{1, 2, 3},
  31. },
  32. {
  33. name: "ExistingSlice",
  34. slice: []uint32{4, 5, 6},
  35. csv: "1,2,3",
  36. want: []uint32{4, 5, 6, 1, 2, 3},
  37. },
  38. {
  39. name: "InvalidVNI",
  40. slice: []uint32{4, 5, 6},
  41. csv: "1,2,3,abc",
  42. want: []uint32{4, 5, 6, 1, 2, 3},
  43. wantErr: "invalid vxlan id value \"abc\" passed",
  44. },
  45. {
  46. name: "InvalidVNI2",
  47. slice: []uint32{4, 5, 6},
  48. csv: "abc,1,2,3",
  49. want: []uint32{4, 5, 6},
  50. wantErr: "invalid vxlan id value \"abc\" passed",
  51. },
  52. }
  53. for _, tt := range cases {
  54. t.Run(tt.name, func(t *testing.T) {
  55. got, err := AppendVNIList(tt.slice, tt.csv)
  56. assert.Check(t, is.DeepEqual(tt.want, got))
  57. if tt.wantErr == "" {
  58. assert.Check(t, err)
  59. } else {
  60. assert.Check(t, is.ErrorContains(err, tt.wantErr))
  61. }
  62. })
  63. }
  64. t.Run("DoesNotAllocate", func(t *testing.T) {
  65. slice := make([]uint32, 0, 10)
  66. csv := "1,2,3,4,5,6,7,8,9,10"
  67. want := []uint32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  68. allocs := testing.AllocsPerRun(10, func() {
  69. var err error
  70. slice, err = AppendVNIList(slice[:0], csv)
  71. if err != nil {
  72. t.Fatal(err)
  73. }
  74. })
  75. assert.Check(t, is.DeepEqual(slice, want))
  76. assert.Check(t, is.Equal(int(allocs), 0))
  77. })
  78. }