outside_test.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package nebula
  2. import (
  3. "github.com/stretchr/testify/assert"
  4. "golang.org/x/net/ipv4"
  5. "net"
  6. "testing"
  7. )
  8. func Test_newPacket(t *testing.T) {
  9. p := &FirewallPacket{}
  10. // length fail
  11. err := newPacket([]byte{0, 1}, true, p)
  12. assert.EqualError(t, err, "packet is less than 20 bytes")
  13. // length fail with ip options
  14. h := ipv4.Header{
  15. Version: 1,
  16. Len: 100,
  17. Src: net.IPv4(10, 0, 0, 1),
  18. Dst: net.IPv4(10, 0, 0, 2),
  19. Options: []byte{0, 1, 0, 2},
  20. }
  21. b, _ := h.Marshal()
  22. err = newPacket(b, true, p)
  23. assert.EqualError(t, err, "packet is less than 28 bytes, ip header len: 24")
  24. // not an ipv4 packet
  25. err = newPacket([]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, p)
  26. assert.EqualError(t, err, "packet is not ipv4, type: 0")
  27. // invalid ihl
  28. err = newPacket([]byte{4<<4 | (8 >> 2 & 0x0f), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, true, p)
  29. assert.EqualError(t, err, "packet had an invalid header length: 8")
  30. // account for variable ip header length - incoming
  31. h = ipv4.Header{
  32. Version: 1,
  33. Len: 100,
  34. Src: net.IPv4(10, 0, 0, 1),
  35. Dst: net.IPv4(10, 0, 0, 2),
  36. Options: []byte{0, 1, 0, 2},
  37. Protocol: fwProtoTCP,
  38. }
  39. b, _ = h.Marshal()
  40. b = append(b, []byte{0, 3, 0, 4}...)
  41. err = newPacket(b, true, p)
  42. assert.Nil(t, err)
  43. assert.Equal(t, p.Protocol, uint8(fwProtoTCP))
  44. assert.Equal(t, p.LocalIP, ip2int(net.IPv4(10, 0, 0, 2)))
  45. assert.Equal(t, p.RemoteIP, ip2int(net.IPv4(10, 0, 0, 1)))
  46. assert.Equal(t, p.RemotePort, uint16(3))
  47. assert.Equal(t, p.LocalPort, uint16(4))
  48. // account for variable ip header length - outgoing
  49. h = ipv4.Header{
  50. Version: 1,
  51. Protocol: 2,
  52. Len: 100,
  53. Src: net.IPv4(10, 0, 0, 1),
  54. Dst: net.IPv4(10, 0, 0, 2),
  55. Options: []byte{0, 1, 0, 2},
  56. }
  57. b, _ = h.Marshal()
  58. b = append(b, []byte{0, 5, 0, 6}...)
  59. err = newPacket(b, false, p)
  60. assert.Nil(t, err)
  61. assert.Equal(t, p.Protocol, uint8(2))
  62. assert.Equal(t, p.LocalIP, ip2int(net.IPv4(10, 0, 0, 1)))
  63. assert.Equal(t, p.RemoteIP, ip2int(net.IPv4(10, 0, 0, 2)))
  64. assert.Equal(t, p.RemotePort, uint16(6))
  65. assert.Equal(t, p.LocalPort, uint16(5))
  66. }