plugin_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package serverid
  2. import (
  3. "testing"
  4. "github.com/insomniacslk/dhcp/dhcpv6"
  5. )
  6. func makeTestDUID(uuid string) *dhcpv6.Duid {
  7. return &dhcpv6.Duid{
  8. Type: dhcpv6.DUID_UUID,
  9. Uuid: []byte(uuid),
  10. }
  11. }
  12. func TestRejectBadServerIDV6(t *testing.T) {
  13. req, err := dhcpv6.NewMessage()
  14. if err != nil {
  15. t.Fatal(err)
  16. }
  17. v6ServerID = makeTestDUID("0000000000000000")
  18. req.MessageType = dhcpv6.MessageTypeRenew
  19. dhcpv6.WithClientID(*makeTestDUID("1000000000000000"))(req)
  20. dhcpv6.WithServerID(*makeTestDUID("0000000000000001"))(req)
  21. stub, err := dhcpv6.NewReplyFromMessage(req)
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. resp, stop := Handler6(req, stub)
  26. if resp != nil {
  27. t.Error("server_id is sending a response message to a request with mismatched ServerID")
  28. }
  29. if !stop {
  30. t.Error("server_id did not interrupt processing on a request with mismatched ServerID")
  31. }
  32. }
  33. func TestRejectUnexpectedServerIDV6(t *testing.T) {
  34. req, err := dhcpv6.NewMessage()
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. v6ServerID = makeTestDUID("0000000000000000")
  39. req.MessageType = dhcpv6.MessageTypeSolicit
  40. dhcpv6.WithClientID(*makeTestDUID("1000000000000000"))(req)
  41. dhcpv6.WithServerID(*makeTestDUID("0000000000000000"))(req)
  42. stub, err := dhcpv6.NewAdvertiseFromSolicit(req)
  43. if err != nil {
  44. t.Fatal(err)
  45. }
  46. resp, stop := Handler6(req, stub)
  47. if resp != nil {
  48. t.Error("server_id is sending a response message to a solicit with a ServerID")
  49. }
  50. if !stop {
  51. t.Error("server_id did not interrupt processing on a solicit with a ServerID")
  52. }
  53. }
  54. func TestAddServerIDV6(t *testing.T) {
  55. req, err := dhcpv6.NewMessage()
  56. if err != nil {
  57. t.Fatal(err)
  58. }
  59. v6ServerID = makeTestDUID("0000000000000000")
  60. req.MessageType = dhcpv6.MessageTypeRebind
  61. dhcpv6.WithClientID(*makeTestDUID("1000000000000000"))(req)
  62. stub, err := dhcpv6.NewReplyFromMessage(req)
  63. if err != nil {
  64. t.Fatal(err)
  65. }
  66. resp, _ := Handler6(req, stub)
  67. if resp == nil {
  68. t.Fatal("plugin did not return an answer")
  69. }
  70. if opt := resp.GetOneOption(dhcpv6.OptionServerID); opt == nil {
  71. t.Fatal("plugin did not add a ServerID option")
  72. } else {
  73. sid := opt.(*dhcpv6.OptServerId)
  74. if !sid.Sid.Equal(*v6ServerID) {
  75. t.Fatalf("Got unexpected DUID: expected %v, got %v", v6ServerID, sid.Sid)
  76. }
  77. }
  78. }