icecontrol_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
  2. // SPDX-License-Identifier: MIT
  3. package ice
  4. import (
  5. "errors"
  6. "testing"
  7. "github.com/pion/stun"
  8. )
  9. func TestControlled_GetFrom(t *testing.T) { //nolint:dupl
  10. m := new(stun.Message)
  11. var c AttrControlled
  12. if err := c.GetFrom(m); !errors.Is(err, stun.ErrAttributeNotFound) {
  13. t.Error("unexpected error")
  14. }
  15. if err := m.Build(stun.BindingRequest, &c); err != nil {
  16. t.Error(err)
  17. }
  18. m1 := new(stun.Message)
  19. if _, err := m1.Write(m.Raw); err != nil {
  20. t.Error(err)
  21. }
  22. var c1 AttrControlled
  23. if err := c1.GetFrom(m1); err != nil {
  24. t.Error(err)
  25. }
  26. if c1 != c {
  27. t.Error("not equal")
  28. }
  29. t.Run("IncorrectSize", func(t *testing.T) {
  30. m3 := new(stun.Message)
  31. m3.Add(stun.AttrICEControlled, make([]byte, 100))
  32. var c2 AttrControlled
  33. if err := c2.GetFrom(m3); !stun.IsAttrSizeInvalid(err) {
  34. t.Error("should error")
  35. }
  36. })
  37. }
  38. func TestControlling_GetFrom(t *testing.T) { //nolint:dupl
  39. m := new(stun.Message)
  40. var c AttrControlling
  41. if err := c.GetFrom(m); !errors.Is(err, stun.ErrAttributeNotFound) {
  42. t.Error("unexpected error")
  43. }
  44. if err := m.Build(stun.BindingRequest, &c); err != nil {
  45. t.Error(err)
  46. }
  47. m1 := new(stun.Message)
  48. if _, err := m1.Write(m.Raw); err != nil {
  49. t.Error(err)
  50. }
  51. var c1 AttrControlling
  52. if err := c1.GetFrom(m1); err != nil {
  53. t.Error(err)
  54. }
  55. if c1 != c {
  56. t.Error("not equal")
  57. }
  58. t.Run("IncorrectSize", func(t *testing.T) {
  59. m3 := new(stun.Message)
  60. m3.Add(stun.AttrICEControlling, make([]byte, 100))
  61. var c2 AttrControlling
  62. if err := c2.GetFrom(m3); !stun.IsAttrSizeInvalid(err) {
  63. t.Error("should error")
  64. }
  65. })
  66. }
  67. func TestControl_GetFrom(t *testing.T) {
  68. t.Run("Blank", func(t *testing.T) {
  69. m := new(stun.Message)
  70. var c AttrControl
  71. if err := c.GetFrom(m); !errors.Is(err, stun.ErrAttributeNotFound) {
  72. t.Error("unexpected error")
  73. }
  74. })
  75. t.Run("Controlling", func(t *testing.T) { //nolint:dupl
  76. m := new(stun.Message)
  77. var c AttrControl
  78. if err := c.GetFrom(m); !errors.Is(err, stun.ErrAttributeNotFound) {
  79. t.Error("unexpected error")
  80. }
  81. c.Role = Controlling
  82. c.Tiebreaker = 4321
  83. if err := m.Build(stun.BindingRequest, &c); err != nil {
  84. t.Error(err)
  85. }
  86. m1 := new(stun.Message)
  87. if _, err := m1.Write(m.Raw); err != nil {
  88. t.Error(err)
  89. }
  90. var c1 AttrControl
  91. if err := c1.GetFrom(m1); err != nil {
  92. t.Error(err)
  93. }
  94. if c1 != c {
  95. t.Error("not equal")
  96. }
  97. t.Run("IncorrectSize", func(t *testing.T) {
  98. m3 := new(stun.Message)
  99. m3.Add(stun.AttrICEControlling, make([]byte, 100))
  100. var c2 AttrControl
  101. if err := c2.GetFrom(m3); !stun.IsAttrSizeInvalid(err) {
  102. t.Error("should error")
  103. }
  104. })
  105. })
  106. t.Run("Controlled", func(t *testing.T) { //nolint:dupl
  107. m := new(stun.Message)
  108. var c AttrControl
  109. if err := c.GetFrom(m); !errors.Is(err, stun.ErrAttributeNotFound) {
  110. t.Error("unexpected error")
  111. }
  112. c.Role = Controlled
  113. c.Tiebreaker = 1234
  114. if err := m.Build(stun.BindingRequest, &c); err != nil {
  115. t.Error(err)
  116. }
  117. m1 := new(stun.Message)
  118. if _, err := m1.Write(m.Raw); err != nil {
  119. t.Error(err)
  120. }
  121. var c1 AttrControl
  122. if err := c1.GetFrom(m1); err != nil {
  123. t.Error(err)
  124. }
  125. if c1 != c {
  126. t.Error("not equal")
  127. }
  128. t.Run("IncorrectSize", func(t *testing.T) {
  129. m3 := new(stun.Message)
  130. m3.Add(stun.AttrICEControlling, make([]byte, 100))
  131. var c2 AttrControl
  132. if err := c2.GetFrom(m3); !stun.IsAttrSizeInvalid(err) {
  133. t.Error("should error")
  134. }
  135. })
  136. })
  137. }