psk_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package nebula
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. )
  6. func TestNewPsk(t *testing.T) {
  7. t.Run("mode none", func(t *testing.T) {
  8. p, err := NewPsk(PskNone, nil, 1)
  9. assert.NoError(t, err)
  10. assert.Equal(t, PskNone, p.mode)
  11. assert.Empty(t, p.key)
  12. assert.Len(t, p.Cache, 1)
  13. assert.Nil(t, p.Cache[0])
  14. b, err := p.MakeFor(0)
  15. assert.Equal(t, []byte{}, b)
  16. })
  17. t.Run("mode transitional", func(t *testing.T) {
  18. p, err := NewPsk(PskTransitional, nil, 1)
  19. assert.Error(t, ErrNotEnoughPskKeys, err)
  20. p, err = NewPsk(PskTransitional, []string{"1234567"}, 1)
  21. assert.Error(t, ErrKeyTooShort)
  22. p, err = NewPsk(PskTransitional, []string{"hi there friends"}, 1)
  23. assert.NoError(t, err)
  24. assert.Equal(t, PskTransitional, p.mode)
  25. assert.Empty(t, p.key)
  26. assert.Len(t, p.Cache, 2)
  27. assert.Nil(t, p.Cache[0])
  28. expectedCache := []byte{146, 120, 135, 31, 158, 102, 45, 189, 128, 190, 37, 101, 58, 254, 6, 166, 91, 209, 148, 131, 27, 193, 24, 25, 170, 65, 130, 189, 7, 179, 255, 17}
  29. assert.Equal(t, expectedCache, p.Cache[1])
  30. b, err := p.MakeFor(0)
  31. assert.Equal(t, []byte{}, b)
  32. })
  33. t.Run("mode enforced", func(t *testing.T) {
  34. p, err := NewPsk(PskEnforced, nil, 1)
  35. assert.Error(t, ErrNotEnoughPskKeys, err)
  36. p, err = NewPsk(PskEnforced, []string{"hi there friends"}, 1)
  37. assert.NoError(t, err)
  38. assert.Equal(t, PskEnforced, p.mode)
  39. expectedKey := []byte{156, 103, 171, 88, 121, 92, 138, 240, 170, 240, 76, 108, 154, 66, 107, 14, 226, 148, 177, 0, 40, 28, 220, 136, 68, 53, 63, 183, 213, 9, 192, 218}
  40. assert.Equal(t, expectedKey, p.key)
  41. assert.Len(t, p.Cache, 1)
  42. expectedCache := []byte{146, 120, 135, 31, 158, 102, 45, 189, 128, 190, 37, 101, 58, 254, 6, 166, 91, 209, 148, 131, 27, 193, 24, 25, 170, 65, 130, 189, 7, 179, 255, 17}
  43. assert.Equal(t, expectedCache, p.Cache[0])
  44. expectedPsk := []byte{0xd9, 0x16, 0xa3, 0x66, 0x6a, 0x20, 0x26, 0xcf, 0x5d, 0x93, 0xad, 0xa3, 0x88, 0x2d, 0x57, 0xac, 0x9b, 0xc3, 0x5a, 0xb7, 0x8f, 0x6, 0x71, 0xc4, 0x3e, 0x5, 0x9e, 0xbc, 0x4e, 0xc8, 0x24, 0x17}
  45. b, err := p.MakeFor(0)
  46. assert.Equal(t, expectedPsk, b)
  47. // Make sure different vpn ips generate different psks
  48. expectedPsk = []byte{0x92, 0x78, 0x87, 0x1f, 0x9e, 0x66, 0x2d, 0xbd, 0x80, 0xbe, 0x25, 0x65, 0x3a, 0xfe, 0x6, 0xa6, 0x5b, 0xd1, 0x94, 0x83, 0x1b, 0xc1, 0x18, 0x19, 0xaa, 0x41, 0x82, 0xbd, 0x7, 0xb3, 0xff, 0x11}
  49. b, err = p.MakeFor(1)
  50. assert.Equal(t, expectedPsk, b)
  51. })
  52. }
  53. func BenchmarkPsk_MakeFor(b *testing.B) {
  54. p, err := NewPsk(PskEnforced, []string{"hi there friends"}, 1)
  55. assert.NoError(b, err)
  56. for n := 0; n < b.N; n++ {
  57. p.MakeFor(99)
  58. }
  59. }