github.com/kelleygo/clashcore@v1.0.2/transport/hysteria/core/frag_test.go (about) 1 package core 2 3 import ( 4 "reflect" 5 "testing" 6 ) 7 8 func Test_fragUDPMessage(t *testing.T) { 9 type args struct { 10 m udpMessage 11 maxSize int 12 } 13 tests := []struct { 14 name string 15 args args 16 want []udpMessage 17 }{ 18 { 19 "no frag", 20 args{ 21 udpMessage{ 22 SessionID: 123, 23 HostLen: 4, 24 Host: "test", 25 Port: 123, 26 MsgID: 123, 27 FragID: 0, 28 FragCount: 1, 29 DataLen: 5, 30 Data: []byte("hello"), 31 }, 32 100, 33 }, 34 []udpMessage{ 35 udpMessage{ 36 SessionID: 123, 37 HostLen: 4, 38 Host: "test", 39 Port: 123, 40 MsgID: 123, 41 FragID: 0, 42 FragCount: 1, 43 DataLen: 5, 44 Data: []byte("hello"), 45 }, 46 }, 47 }, 48 { 49 "2 frags", 50 args{ 51 udpMessage{ 52 SessionID: 123, 53 HostLen: 4, 54 Host: "test", 55 Port: 123, 56 MsgID: 123, 57 FragID: 0, 58 FragCount: 1, 59 DataLen: 5, 60 Data: []byte("hello"), 61 }, 62 22, 63 }, 64 []udpMessage{ 65 udpMessage{ 66 SessionID: 123, 67 HostLen: 4, 68 Host: "test", 69 Port: 123, 70 MsgID: 123, 71 FragID: 0, 72 FragCount: 2, 73 DataLen: 4, 74 Data: []byte("hell"), 75 }, 76 udpMessage{ 77 SessionID: 123, 78 HostLen: 4, 79 Host: "test", 80 Port: 123, 81 MsgID: 123, 82 FragID: 1, 83 FragCount: 2, 84 DataLen: 1, 85 Data: []byte("o"), 86 }, 87 }, 88 }, 89 { 90 "4 frags", 91 args{ 92 udpMessage{ 93 SessionID: 123, 94 HostLen: 4, 95 Host: "test", 96 Port: 123, 97 MsgID: 123, 98 FragID: 0, 99 FragCount: 1, 100 DataLen: 20, 101 Data: []byte("wow wow wow lol lmao"), 102 }, 103 23, 104 }, 105 []udpMessage{ 106 udpMessage{ 107 SessionID: 123, 108 HostLen: 4, 109 Host: "test", 110 Port: 123, 111 MsgID: 123, 112 FragID: 0, 113 FragCount: 4, 114 DataLen: 5, 115 Data: []byte("wow w"), 116 }, 117 udpMessage{ 118 SessionID: 123, 119 HostLen: 4, 120 Host: "test", 121 Port: 123, 122 MsgID: 123, 123 FragID: 1, 124 FragCount: 4, 125 DataLen: 5, 126 Data: []byte("ow wo"), 127 }, 128 udpMessage{ 129 SessionID: 123, 130 HostLen: 4, 131 Host: "test", 132 Port: 123, 133 MsgID: 123, 134 FragID: 2, 135 FragCount: 4, 136 DataLen: 5, 137 Data: []byte("w lol"), 138 }, 139 udpMessage{ 140 SessionID: 123, 141 HostLen: 4, 142 Host: "test", 143 Port: 123, 144 MsgID: 123, 145 FragID: 3, 146 FragCount: 4, 147 DataLen: 5, 148 Data: []byte(" lmao"), 149 }, 150 }, 151 }, 152 } 153 for _, tt := range tests { 154 t.Run(tt.name, func(t *testing.T) { 155 if got := fragUDPMessage(tt.args.m, tt.args.maxSize); !reflect.DeepEqual(got, tt.want) { 156 t.Errorf("fragUDPMessage() = %v, want %v", got, tt.want) 157 } 158 }) 159 } 160 } 161 162 func Test_defragger_Feed(t *testing.T) { 163 d := &defragger{} 164 type args struct { 165 m udpMessage 166 } 167 tests := []struct { 168 name string 169 args args 170 want *udpMessage 171 }{ 172 { 173 "no frag", 174 args{ 175 udpMessage{ 176 SessionID: 123, 177 HostLen: 4, 178 Host: "test", 179 Port: 123, 180 MsgID: 123, 181 FragID: 0, 182 FragCount: 1, 183 DataLen: 5, 184 Data: []byte("hello"), 185 }, 186 }, 187 &udpMessage{ 188 SessionID: 123, 189 HostLen: 4, 190 Host: "test", 191 Port: 123, 192 MsgID: 123, 193 FragID: 0, 194 FragCount: 1, 195 DataLen: 5, 196 Data: []byte("hello"), 197 }, 198 }, 199 { 200 "frag 1 - 1/3", 201 args{ 202 udpMessage{ 203 SessionID: 123, 204 HostLen: 4, 205 Host: "test", 206 Port: 123, 207 MsgID: 666, 208 FragID: 0, 209 FragCount: 3, 210 DataLen: 5, 211 Data: []byte("hello"), 212 }, 213 }, 214 nil, 215 }, 216 { 217 "frag 1 - 2/3", 218 args{ 219 udpMessage{ 220 SessionID: 123, 221 HostLen: 4, 222 Host: "test", 223 Port: 123, 224 MsgID: 666, 225 FragID: 1, 226 FragCount: 3, 227 DataLen: 8, 228 Data: []byte(" shitty "), 229 }, 230 }, 231 nil, 232 }, 233 { 234 "frag 1 - 3/3", 235 args{ 236 udpMessage{ 237 SessionID: 123, 238 HostLen: 4, 239 Host: "test", 240 Port: 123, 241 MsgID: 666, 242 FragID: 2, 243 FragCount: 3, 244 DataLen: 7, 245 Data: []byte("world!!"), 246 }, 247 }, 248 &udpMessage{ 249 SessionID: 123, 250 HostLen: 4, 251 Host: "test", 252 Port: 123, 253 MsgID: 666, 254 FragID: 0, 255 FragCount: 1, 256 DataLen: 20, 257 Data: []byte("hello shitty world!!"), 258 }, 259 }, 260 { 261 "frag 2 - 1/2", 262 args{ 263 udpMessage{ 264 SessionID: 123, 265 HostLen: 4, 266 Host: "test", 267 Port: 123, 268 MsgID: 777, 269 FragID: 0, 270 FragCount: 2, 271 DataLen: 5, 272 Data: []byte("hello"), 273 }, 274 }, 275 nil, 276 }, 277 { 278 "frag 3 - 2/2", 279 args{ 280 udpMessage{ 281 SessionID: 123, 282 HostLen: 4, 283 Host: "test", 284 Port: 123, 285 MsgID: 778, 286 FragID: 1, 287 FragCount: 2, 288 DataLen: 5, 289 Data: []byte(" moto"), 290 }, 291 }, 292 nil, 293 }, 294 { 295 "frag 2 - 2/2", 296 args{ 297 udpMessage{ 298 SessionID: 123, 299 HostLen: 4, 300 Host: "test", 301 Port: 123, 302 MsgID: 777, 303 FragID: 1, 304 FragCount: 2, 305 DataLen: 5, 306 Data: []byte(" moto"), 307 }, 308 }, 309 nil, 310 }, 311 { 312 "frag 2 - 1/2 re", 313 args{ 314 udpMessage{ 315 SessionID: 123, 316 HostLen: 4, 317 Host: "test", 318 Port: 123, 319 MsgID: 777, 320 FragID: 0, 321 FragCount: 2, 322 DataLen: 5, 323 Data: []byte("hello"), 324 }, 325 }, 326 &udpMessage{ 327 SessionID: 123, 328 HostLen: 4, 329 Host: "test", 330 Port: 123, 331 MsgID: 777, 332 FragID: 0, 333 FragCount: 1, 334 DataLen: 10, 335 Data: []byte("hello moto"), 336 }, 337 }, 338 } 339 for _, tt := range tests { 340 t.Run(tt.name, func(t *testing.T) { 341 if got := d.Feed(tt.args.m); !reflect.DeepEqual(got, tt.want) { 342 t.Errorf("Feed() = %v, want %v", got, tt.want) 343 } 344 }) 345 } 346 }