frame_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package ethernet
  2. import (
  3. "bytes"
  4. "net"
  5. "testing"
  6. )
  7. func panics(f func()) (didPanic bool) {
  8. defer func() {
  9. if r := recover(); r != nil {
  10. didPanic = true
  11. }
  12. }()
  13. f()
  14. return
  15. }
  16. func mustParseMAC(str string) (addr net.HardwareAddr) {
  17. var err error
  18. addr, err = net.ParseMAC(str)
  19. if err != nil {
  20. panic(err)
  21. }
  22. return
  23. }
  24. func TestPrepare(t *testing.T) {
  25. var frame Frame
  26. dst := mustParseMAC("ff:ff:ff:ff:ff:ff")
  27. src := mustParseMAC("12:34:56:78:9a:bc")
  28. (&frame).Prepare(dst, src, NotTagged, IPv6, 1024)
  29. if len(frame.Payload()) != 1024 {
  30. t.Fatalf("frame payload does not have correct length. expected %d; got %d\n", 1024, len(frame.Payload()))
  31. }
  32. expectedLength := 6 + 6 + int(NotTagged) + 2 + 1024
  33. if len(frame) != expectedLength {
  34. t.Fatalf("frame does not have correct length. expected %d; got %d\n", expectedLength, len(frame))
  35. }
  36. if !bytes.Equal([]byte(frame.Source()), []byte(src)) {
  37. t.Fatalf("frame source address is incorrect. expected %s; got %s\n", src.String(), frame.Source().String())
  38. }
  39. if !bytes.Equal([]byte(frame.Destination()), []byte(dst)) {
  40. t.Fatalf("frame destination address is incorrect. expected %s; got %s\n", dst.String(), frame.Destination().String())
  41. }
  42. if frame.Tagging() != NotTagged {
  43. t.Fatalf("frame tagging is incorrect. expected %d; got %d\n", NotTagged, frame.Tagging())
  44. }
  45. if frame.Ethertype() != IPv6 {
  46. t.Fatalf("frame ethertype is incorrect. expected %v; got %v\n", IPv6, frame.Ethertype())
  47. }
  48. }
  49. func TestResize(t *testing.T) {
  50. var frame Frame
  51. (&frame).Resize(8)
  52. expectedLength := 6 + 6 + int(NotTagged) + 2 + 8
  53. if len(frame) != expectedLength {
  54. t.Fatalf("frame does not have correct length. expected %d; got %d\n", expectedLength, len(frame))
  55. }
  56. frame.Payload()[0] = 42
  57. (&frame).Resize(1024)
  58. if frame.Payload()[0] != 42 {
  59. t.Fatalf("expanded frame does not have same content\n")
  60. }
  61. }