socketmask_test.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /*
  2. Copyright 2019 The Kubernetes Authors.
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package socketmask
  14. import (
  15. "reflect"
  16. "testing"
  17. )
  18. func TestNewSocketMask(t *testing.T) {
  19. tcases := []struct {
  20. name string
  21. socket int
  22. expectedMask string
  23. }{
  24. {
  25. name: "New SocketMask with socket 0 set",
  26. socket: int(0),
  27. expectedMask: "1000000000000000000000000000000000000000000000000000000000000000",
  28. },
  29. }
  30. for _, tc := range tcases {
  31. sm, _ := NewSocketMask(0)
  32. if sm.String() != tc.expectedMask {
  33. t.Errorf("Expected mask to be %v, got %v", tc.expectedMask, sm)
  34. }
  35. }
  36. }
  37. func TestAdd(t *testing.T) {
  38. tcases := []struct {
  39. name string
  40. firstSocket int
  41. secondSocket int
  42. expectedMask string
  43. }{
  44. {
  45. name: "New SocketMask with sockets 0 and 1 set",
  46. firstSocket: 0,
  47. secondSocket: 1,
  48. expectedMask: "1100000000000000000000000000000000000000000000000000000000000000",
  49. },
  50. }
  51. for _, tc := range tcases {
  52. mask, _ := NewSocketMask()
  53. mask.Add(tc.firstSocket, tc.secondSocket)
  54. if mask.String() != tc.expectedMask {
  55. t.Errorf("Expected mask to be %v, got %v", tc.expectedMask, mask)
  56. }
  57. }
  58. }
  59. func TestRemove(t *testing.T) {
  60. tcases := []struct {
  61. name string
  62. firstSocketSet int
  63. secondSocketSet int
  64. firstSocketRemove int
  65. expectedMask string
  66. }{
  67. {
  68. name: "Reset bit 1 SocketMask to 0",
  69. firstSocketSet: 0,
  70. secondSocketSet: 1,
  71. firstSocketRemove: 0,
  72. expectedMask: "0100000000000000000000000000000000000000000000000000000000000000",
  73. },
  74. }
  75. for _, tc := range tcases {
  76. mask, _ := NewSocketMask(tc.firstSocketSet, tc.secondSocketSet)
  77. mask.Remove(tc.firstSocketRemove)
  78. if mask.String() != tc.expectedMask {
  79. t.Errorf("Expected mask to be %v, got %v", tc.expectedMask, mask)
  80. }
  81. }
  82. }
  83. func TestAnd(t *testing.T) {
  84. tcases := []struct {
  85. name string
  86. firstMaskBit int
  87. secondMaskBit int
  88. andMask string
  89. }{
  90. {
  91. name: "And socket masks",
  92. firstMaskBit: 0,
  93. secondMaskBit: 0,
  94. andMask: "1000000000000000000000000000000000000000000000000000000000000000",
  95. },
  96. }
  97. for _, tc := range tcases {
  98. firstMask, _ := NewSocketMask(tc.firstMaskBit)
  99. secondMask, _ := NewSocketMask(tc.secondMaskBit)
  100. firstMask.And(secondMask)
  101. if firstMask.String() != string(tc.andMask) {
  102. t.Errorf("Expected mask to be %v, got %v", tc.andMask, firstMask)
  103. }
  104. }
  105. }
  106. func TestOr(t *testing.T) {
  107. tcases := []struct {
  108. name string
  109. firstMaskBit int
  110. secondMaskBit int
  111. orMask string
  112. }{
  113. {
  114. name: "Or socket masks",
  115. firstMaskBit: int(0),
  116. secondMaskBit: int(1),
  117. orMask: "1100000000000000000000000000000000000000000000000000000000000000",
  118. },
  119. }
  120. for _, tc := range tcases {
  121. firstMask, _ := NewSocketMask(tc.firstMaskBit)
  122. secondMask, _ := NewSocketMask(tc.secondMaskBit)
  123. firstMask.Or(secondMask)
  124. if firstMask.String() != string(tc.orMask) {
  125. t.Errorf("Expected mask to be %v, got %v", tc.orMask, firstMask)
  126. }
  127. }
  128. }
  129. func TestClear(t *testing.T) {
  130. tcases := []struct {
  131. name string
  132. firstBit int
  133. secondBit int
  134. clearedMask string
  135. }{
  136. {
  137. name: "Clear socket masks",
  138. firstBit: int(0),
  139. secondBit: int(1),
  140. clearedMask: "0000000000000000000000000000000000000000000000000000000000000000",
  141. },
  142. }
  143. for _, tc := range tcases {
  144. mask, _ := NewSocketMask(tc.firstBit, tc.secondBit)
  145. mask.Clear()
  146. if mask.String() != string(tc.clearedMask) {
  147. t.Errorf("Expected mask to be %v, got %v", tc.clearedMask, mask)
  148. }
  149. }
  150. }
  151. func TestFill(t *testing.T) {
  152. tcases := []struct {
  153. name string
  154. filledMask string
  155. }{
  156. {
  157. name: "Fill socket masks",
  158. filledMask: "1111111111111111111111111111111111111111111111111111111111111111",
  159. },
  160. }
  161. for _, tc := range tcases {
  162. mask, _ := NewSocketMask()
  163. mask.Fill()
  164. if mask.String() != string(tc.filledMask) {
  165. t.Errorf("Expected mask to be %v, got %v", tc.filledMask, mask)
  166. }
  167. }
  168. }
  169. func TestIsEmpty(t *testing.T) {
  170. tcases := []struct {
  171. name string
  172. maskBit int
  173. expectedEmpty bool
  174. }{
  175. {
  176. name: "Check if mask is empty",
  177. maskBit: int(0),
  178. expectedEmpty: false,
  179. },
  180. }
  181. for _, tc := range tcases {
  182. mask, _ := NewSocketMask(tc.maskBit)
  183. empty := mask.IsEmpty()
  184. if empty {
  185. t.Errorf("Expected value to be %v, got %v", tc.expectedEmpty, empty)
  186. }
  187. }
  188. }
  189. func TestIsSet(t *testing.T) {
  190. tcases := []struct {
  191. name string
  192. maskBit int
  193. expectedSet bool
  194. }{
  195. {
  196. name: "Check if mask bit is set",
  197. maskBit: int(0),
  198. expectedSet: true,
  199. },
  200. }
  201. for _, tc := range tcases {
  202. mask, _ := NewSocketMask(tc.maskBit)
  203. set := mask.IsSet(tc.maskBit)
  204. if !set {
  205. t.Errorf("Expected value to be %v, got %v", tc.expectedSet, set)
  206. }
  207. }
  208. }
  209. func TestIsEqual(t *testing.T) {
  210. tcases := []struct {
  211. name string
  212. firstMaskBit int
  213. secondMaskBit int
  214. isEqual bool
  215. }{
  216. {
  217. name: "Check if two socket masks are equal",
  218. firstMaskBit: int(0),
  219. secondMaskBit: int(0),
  220. isEqual: true,
  221. },
  222. }
  223. for _, tc := range tcases {
  224. firstMask, _ := NewSocketMask(tc.firstMaskBit)
  225. secondMask, _ := NewSocketMask(tc.secondMaskBit)
  226. isEqual := firstMask.IsEqual(secondMask)
  227. if !isEqual {
  228. t.Errorf("Expected mask to be %v, got %v", tc.isEqual, isEqual)
  229. }
  230. }
  231. }
  232. func TestCount(t *testing.T) {
  233. tcases := []struct {
  234. name string
  235. maskBit int
  236. expectedCount int
  237. }{
  238. {
  239. name: "Count number of bits set in full mask",
  240. maskBit: 0,
  241. expectedCount: 1,
  242. },
  243. }
  244. for _, tc := range tcases {
  245. mask, _ := NewSocketMask(tc.maskBit)
  246. count := mask.Count()
  247. if count != tc.expectedCount {
  248. t.Errorf("Expected value to be %v, got %v", tc.expectedCount, count)
  249. }
  250. }
  251. }
  252. func TestGetSockets(t *testing.T) {
  253. tcases := []struct {
  254. name string
  255. firstSocket int
  256. secondSocket int
  257. expectedSockets []int
  258. }{
  259. {
  260. name: "Get number of each socket which has been set",
  261. firstSocket: 0,
  262. secondSocket: 1,
  263. expectedSockets: []int{0, 1},
  264. },
  265. }
  266. for _, tc := range tcases {
  267. mask, _ := NewSocketMask(tc.firstSocket, tc.secondSocket)
  268. sockets := mask.GetSockets()
  269. if !reflect.DeepEqual(sockets, tc.expectedSockets) {
  270. t.Errorf("Expected value to be %v, got %v", tc.expectedSockets, sockets)
  271. }
  272. }
  273. }
  274. func TestIsNarrowerThan(t *testing.T) {
  275. tcases := []struct {
  276. name string
  277. firstMask []int
  278. secondMask []int
  279. expectedFirstNarrower bool
  280. }{
  281. {
  282. name: "Check narrowness of masks with unequal bits set 1/2",
  283. firstMask: []int{0},
  284. secondMask: []int{0, 1},
  285. expectedFirstNarrower: true,
  286. },
  287. {
  288. name: "Check narrowness of masks with unequal bits set 2/2",
  289. firstMask: []int{0, 1},
  290. secondMask: []int{0},
  291. expectedFirstNarrower: false,
  292. },
  293. {
  294. name: "Check narrowness of masks with equal bits set 1/2",
  295. firstMask: []int{0},
  296. secondMask: []int{1},
  297. expectedFirstNarrower: true,
  298. },
  299. {
  300. name: "Check narrowness of masks with equal bits set 2/2",
  301. firstMask: []int{1},
  302. secondMask: []int{0},
  303. expectedFirstNarrower: false,
  304. },
  305. }
  306. for _, tc := range tcases {
  307. firstMask, _ := NewSocketMask(tc.firstMask...)
  308. secondMask, _ := NewSocketMask(tc.secondMask...)
  309. expectedFirstNarrower := firstMask.IsNarrowerThan(secondMask)
  310. if expectedFirstNarrower != tc.expectedFirstNarrower {
  311. t.Errorf("Expected value to be %v, got %v", tc.expectedFirstNarrower, expectedFirstNarrower)
  312. }
  313. }
  314. }