github.com/wangyougui/gf/v2@v2.6.5/net/gtcp/gtcp_z_unit_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/wangyougui/gf. 6 7 package gtcp_test 8 9 import ( 10 "crypto/tls" 11 "fmt" 12 "testing" 13 "time" 14 15 "github.com/wangyougui/gf/v2/debug/gdebug" 16 "github.com/wangyougui/gf/v2/net/gtcp" 17 "github.com/wangyougui/gf/v2/os/gfile" 18 "github.com/wangyougui/gf/v2/test/gtest" 19 "github.com/wangyougui/gf/v2/text/gstr" 20 ) 21 22 var ( 23 simpleTimeout = time.Millisecond * 100 24 sendData = []byte("hello") 25 invalidAddr = "127.0.0.1:99999" 26 crtFile = gfile.Dir(gdebug.CallerFilePath()) + gfile.Separator + "testdata/server.crt" 27 keyFile = gfile.Dir(gdebug.CallerFilePath()) + gfile.Separator + "testdata/server.key" 28 ) 29 30 func startTCPServer(addr string) *gtcp.Server { 31 s := gtcp.NewServer(addr, func(conn *gtcp.Conn) { 32 defer conn.Close() 33 for { 34 data, err := conn.Recv(-1) 35 if err != nil { 36 break 37 } 38 conn.Send(data) 39 } 40 }) 41 go s.Run() 42 time.Sleep(simpleTimeout) 43 return s 44 } 45 46 func startTCPPkgServer(addr string) *gtcp.Server { 47 s := gtcp.NewServer(addr, func(conn *gtcp.Conn) { 48 defer conn.Close() 49 for { 50 data, err := conn.RecvPkg() 51 if err != nil { 52 break 53 } 54 conn.SendPkg(data) 55 } 56 }) 57 go s.Run() 58 time.Sleep(simpleTimeout) 59 return s 60 } 61 62 func startTCPTLSServer(addr string) *gtcp.Server { 63 tlsConfig := &tls.Config{ 64 InsecureSkipVerify: true, 65 Certificates: []tls.Certificate{ 66 {}, 67 }, 68 } 69 s := gtcp.NewServerTLS(addr, tlsConfig, func(conn *gtcp.Conn) { 70 defer conn.Close() 71 for { 72 data, err := conn.Recv(-1) 73 if err != nil { 74 break 75 } 76 conn.Send(data) 77 } 78 }) 79 go s.Run() 80 time.Sleep(simpleTimeout) 81 return s 82 } 83 84 func startTCPKeyCrtServer(addr string) *gtcp.Server { 85 s, _ := gtcp.NewServerKeyCrt(addr, crtFile, keyFile, func(conn *gtcp.Conn) { 86 defer conn.Close() 87 for { 88 data, err := conn.Recv(-1) 89 if err != nil { 90 break 91 } 92 conn.Send(data) 93 } 94 }) 95 go s.Run() 96 time.Sleep(simpleTimeout) 97 return s 98 } 99 100 func TestGetFreePorts(t *testing.T) { 101 ports, _ := gtcp.GetFreePorts(2) 102 gtest.C(t, func(t *gtest.T) { 103 t.AssertGT(ports[0], 0) 104 t.AssertGT(ports[1], 0) 105 }) 106 107 startTCPServer(fmt.Sprintf("%s:%d", "127.0.0.1", ports[0])) 108 109 gtest.C(t, func(t *gtest.T) { 110 conn, err := gtcp.NewPoolConn(fmt.Sprintf("127.0.0.1:%d", ports[0])) 111 t.AssertNil(err) 112 defer conn.Close() 113 result, err := conn.SendRecv(sendData, -1) 114 t.AssertNil(err) 115 t.Assert(result, sendData) 116 }) 117 gtest.C(t, func(t *gtest.T) { 118 conn, err := gtcp.NewPoolConn(fmt.Sprintf("127.0.0.1:%d", 80)) 119 t.AssertNE(err, nil) 120 t.AssertNil(conn) 121 }) 122 } 123 124 func TestMustGetFreePort(t *testing.T) { 125 port := gtcp.MustGetFreePort() 126 addr := fmt.Sprintf("%s:%d", "127.0.0.1", port) 127 startTCPServer(addr) 128 129 gtest.C(t, func(t *gtest.T) { 130 result, err := gtcp.SendRecv(addr, sendData, -1) 131 t.AssertNil(err) 132 t.Assert(sendData, result) 133 }) 134 } 135 136 func TestNewConn(t *testing.T) { 137 addr := gtcp.FreePortAddress 138 139 gtest.C(t, func(t *gtest.T) { 140 conn, err := gtcp.NewConn(addr, simpleTimeout) 141 t.AssertNil(conn) 142 t.AssertNE(err, nil) 143 }) 144 145 gtest.C(t, func(t *gtest.T) { 146 s := startTCPServer(gtcp.FreePortAddress) 147 148 conn, err := gtcp.NewConn(s.GetListenedAddress(), simpleTimeout) 149 t.AssertNil(err) 150 t.AssertNE(conn, nil) 151 defer conn.Close() 152 result, err := conn.SendRecv(sendData, -1) 153 t.AssertNil(err) 154 t.Assert(result, sendData) 155 }) 156 } 157 158 // TODO 159 func TestNewConnTLS(t *testing.T) { 160 addr := gtcp.FreePortAddress 161 162 gtest.C(t, func(t *gtest.T) { 163 conn, err := gtcp.NewConnTLS(addr, &tls.Config{}) 164 t.AssertNil(conn) 165 t.AssertNE(err, nil) 166 }) 167 168 gtest.C(t, func(t *gtest.T) { 169 s := startTCPTLSServer(addr) 170 171 conn, err := gtcp.NewConnTLS(s.GetListenedAddress(), &tls.Config{ 172 InsecureSkipVerify: true, 173 Certificates: []tls.Certificate{ 174 {}, 175 }, 176 }) 177 t.AssertNil(conn) 178 t.AssertNE(err, nil) 179 }) 180 } 181 182 func TestNewConnKeyCrt(t *testing.T) { 183 addr := gtcp.FreePortAddress 184 185 gtest.C(t, func(t *gtest.T) { 186 conn, err := gtcp.NewConnKeyCrt(addr, crtFile, keyFile) 187 t.AssertNil(conn) 188 t.AssertNE(err, nil) 189 }) 190 191 gtest.C(t, func(t *gtest.T) { 192 s := startTCPKeyCrtServer(addr) 193 194 conn, err := gtcp.NewConnKeyCrt(s.GetListenedAddress(), crtFile, keyFile) 195 t.AssertNil(conn) 196 t.AssertNE(err, nil) 197 }) 198 } 199 200 func TestConn_Send(t *testing.T) { 201 s := startTCPServer(gtcp.FreePortAddress) 202 203 gtest.C(t, func(t *gtest.T) { 204 conn, err := gtcp.NewConn(s.GetListenedAddress()) 205 t.AssertNil(err) 206 t.AssertNE(conn, nil) 207 err = conn.Send(sendData, gtcp.Retry{Count: 1}) 208 t.AssertNil(err) 209 result, err := conn.Recv(-1) 210 t.AssertNil(err) 211 t.Assert(result, sendData) 212 }) 213 } 214 215 func TestConn_SendWithTimeout(t *testing.T) { 216 s := startTCPServer(gtcp.FreePortAddress) 217 218 gtest.C(t, func(t *gtest.T) { 219 conn, err := gtcp.NewConn(s.GetListenedAddress()) 220 t.AssertNil(err) 221 t.AssertNE(conn, nil) 222 err = conn.SendWithTimeout(sendData, time.Second, gtcp.Retry{Count: 1}) 223 t.AssertNil(err) 224 result, err := conn.Recv(-1) 225 t.AssertNil(err) 226 t.Assert(result, sendData) 227 }) 228 } 229 230 func TestConn_SendRecv(t *testing.T) { 231 s := startTCPServer(gtcp.FreePortAddress) 232 233 gtest.C(t, func(t *gtest.T) { 234 conn, err := gtcp.NewConn(s.GetListenedAddress()) 235 t.AssertNil(err) 236 t.AssertNE(conn, nil) 237 result, err := conn.SendRecv(sendData, -1, gtcp.Retry{Count: 1}) 238 t.AssertNil(err) 239 t.Assert(result, sendData) 240 }) 241 } 242 243 func TestConn_SendRecvWithTimeout(t *testing.T) { 244 s := startTCPServer(gtcp.FreePortAddress) 245 246 gtest.C(t, func(t *gtest.T) { 247 conn, err := gtcp.NewConn(s.GetListenedAddress()) 248 t.AssertNil(err) 249 t.AssertNE(conn, nil) 250 result, err := conn.SendRecvWithTimeout(sendData, -1, time.Second, gtcp.Retry{Count: 1}) 251 t.AssertNil(err) 252 t.Assert(result, sendData) 253 }) 254 } 255 256 func TestConn_RecvWithTimeout(t *testing.T) { 257 s := startTCPServer(gtcp.FreePortAddress) 258 259 gtest.C(t, func(t *gtest.T) { 260 conn, err := gtcp.NewConn(s.GetListenedAddress()) 261 t.AssertNil(err) 262 t.AssertNE(conn, nil) 263 conn.Send(sendData) 264 result, err := conn.RecvWithTimeout(-1, time.Second, gtcp.Retry{Count: 1}) 265 t.AssertNil(err) 266 t.Assert(result, sendData) 267 }) 268 } 269 270 func TestConn_RecvLine(t *testing.T) { 271 s := startTCPServer(gtcp.FreePortAddress) 272 273 gtest.C(t, func(t *gtest.T) { 274 conn, err := gtcp.NewConn(s.GetListenedAddress()) 275 t.AssertNil(err) 276 t.AssertNE(conn, nil) 277 data := []byte("hello\n") 278 conn.Send(data) 279 result, err := conn.RecvLine(gtcp.Retry{Count: 1}) 280 t.AssertNil(err) 281 splitData := gstr.Split(string(data), "\n") 282 t.Assert(result, splitData[0]) 283 }) 284 } 285 286 func TestConn_RecvTill(t *testing.T) { 287 s := startTCPServer(gtcp.FreePortAddress) 288 289 gtest.C(t, func(t *gtest.T) { 290 conn, err := gtcp.NewConn(s.GetListenedAddress()) 291 t.AssertNil(err) 292 t.AssertNE(conn, nil) 293 conn.Send(sendData) 294 result, err := conn.RecvTill([]byte("hello"), gtcp.Retry{Count: 1}) 295 t.AssertNil(err) 296 t.Assert(result, sendData) 297 }) 298 } 299 300 func TestConn_SetDeadline(t *testing.T) { 301 s := startTCPServer(gtcp.FreePortAddress) 302 303 gtest.C(t, func(t *gtest.T) { 304 conn, err := gtcp.NewConn(s.GetListenedAddress()) 305 t.AssertNil(err) 306 t.AssertNE(conn, nil) 307 conn.SetDeadline(time.Time{}) 308 err = conn.Send(sendData, gtcp.Retry{Count: 1}) 309 t.AssertNil(err) 310 result, err := conn.Recv(-1) 311 t.AssertNil(err) 312 t.Assert(result, sendData) 313 }) 314 } 315 316 func TestConn_SetReceiveBufferWait(t *testing.T) { 317 s := startTCPServer(gtcp.FreePortAddress) 318 319 gtest.C(t, func(t *gtest.T) { 320 conn, err := gtcp.NewConn(s.GetListenedAddress()) 321 t.AssertNil(err) 322 t.AssertNE(conn, nil) 323 conn.SetBufferWaitRecv(time.Millisecond * 100) 324 err = conn.Send(sendData, gtcp.Retry{Count: 1}) 325 t.AssertNil(err) 326 result, err := conn.Recv(-1) 327 t.AssertNil(err) 328 t.Assert(result, sendData) 329 }) 330 } 331 332 func TestNewNetConnKeyCrt(t *testing.T) { 333 addr := gtcp.FreePortAddress 334 335 startTCPKeyCrtServer(addr) 336 337 gtest.C(t, func(t *gtest.T) { 338 conn, err := gtcp.NewNetConnKeyCrt(addr, "crtFile", keyFile, time.Second) 339 t.AssertNil(conn) 340 t.AssertNE(err, nil) 341 }) 342 343 gtest.C(t, func(t *gtest.T) { 344 conn, err := gtcp.NewNetConnKeyCrt(addr, crtFile, keyFile, time.Second) 345 t.AssertNil(conn) 346 t.AssertNE(err, nil) 347 }) 348 } 349 350 func TestSend(t *testing.T) { 351 s := startTCPServer(gtcp.FreePortAddress) 352 353 gtest.C(t, func(t *gtest.T) { 354 err := gtcp.Send(invalidAddr, sendData, gtcp.Retry{Count: 1}) 355 t.AssertNE(err, nil) 356 }) 357 358 gtest.C(t, func(t *gtest.T) { 359 err := gtcp.Send(s.GetListenedAddress(), sendData, gtcp.Retry{Count: 1}) 360 t.AssertNil(err) 361 }) 362 } 363 364 func TestSendRecv(t *testing.T) { 365 s := startTCPServer(gtcp.FreePortAddress) 366 367 gtest.C(t, func(t *gtest.T) { 368 result, err := gtcp.SendRecv(invalidAddr, sendData, -1) 369 t.AssertNE(err, nil) 370 t.Assert(result, nil) 371 }) 372 373 gtest.C(t, func(t *gtest.T) { 374 result, err := gtcp.SendRecv(s.GetListenedAddress(), sendData, -1) 375 t.AssertNil(err) 376 t.Assert(result, sendData) 377 }) 378 } 379 380 func TestSendWithTimeout(t *testing.T) { 381 s := startTCPServer(gtcp.FreePortAddress) 382 383 gtest.C(t, func(t *gtest.T) { 384 err := gtcp.SendWithTimeout(invalidAddr, sendData, time.Millisecond*500) 385 t.AssertNE(err, nil) 386 err = gtcp.SendWithTimeout(s.GetListenedAddress(), sendData, time.Millisecond*500) 387 t.AssertNil(err) 388 }) 389 } 390 391 func TestSendRecvWithTimeout(t *testing.T) { 392 s := startTCPServer(gtcp.FreePortAddress) 393 394 gtest.C(t, func(t *gtest.T) { 395 result, err := gtcp.SendRecvWithTimeout(invalidAddr, sendData, -1, time.Millisecond*500) 396 t.AssertNil(result) 397 t.AssertNE(err, nil) 398 result, err = gtcp.SendRecvWithTimeout(s.GetListenedAddress(), sendData, -1, time.Millisecond*500) 399 t.AssertNil(err) 400 t.Assert(result, sendData) 401 }) 402 } 403 404 func TestSendPkg(t *testing.T) { 405 s := startTCPPkgServer(gtcp.FreePortAddress) 406 407 gtest.C(t, func(t *gtest.T) { 408 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 409 t.AssertNil(err) 410 err = gtcp.SendPkg(invalidAddr, sendData) 411 t.AssertNE(err, nil) 412 }) 413 414 gtest.C(t, func(t *gtest.T) { 415 err := gtcp.SendPkg(s.GetListenedAddress(), sendData, gtcp.PkgOption{Retry: gtcp.Retry{Count: 3}}) 416 t.AssertNil(err) 417 err = gtcp.SendPkg(s.GetListenedAddress(), sendData) 418 t.AssertNil(err) 419 }) 420 } 421 422 func TestSendRecvPkg(t *testing.T) { 423 s := startTCPPkgServer(gtcp.FreePortAddress) 424 425 gtest.C(t, func(t *gtest.T) { 426 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 427 t.AssertNil(err) 428 _, err = gtcp.SendRecvPkg(invalidAddr, sendData) 429 t.AssertNE(err, nil) 430 }) 431 432 gtest.C(t, func(t *gtest.T) { 433 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 434 t.AssertNil(err) 435 result, err := gtcp.SendRecvPkg(s.GetListenedAddress(), sendData) 436 t.AssertNil(err) 437 t.Assert(result, sendData) 438 }) 439 } 440 441 func TestSendPkgWithTimeout(t *testing.T) { 442 s := startTCPPkgServer(gtcp.FreePortAddress) 443 444 gtest.C(t, func(t *gtest.T) { 445 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 446 t.AssertNil(err) 447 err = gtcp.SendPkgWithTimeout(invalidAddr, sendData, time.Second) 448 t.AssertNE(err, nil) 449 }) 450 451 gtest.C(t, func(t *gtest.T) { 452 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 453 t.AssertNil(err) 454 err = gtcp.SendPkgWithTimeout(s.GetListenedAddress(), sendData, time.Second) 455 t.AssertNil(err) 456 }) 457 } 458 459 func TestSendRecvPkgWithTimeout(t *testing.T) { 460 s := startTCPPkgServer(gtcp.FreePortAddress) 461 462 gtest.C(t, func(t *gtest.T) { 463 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 464 t.AssertNil(err) 465 _, err = gtcp.SendRecvPkgWithTimeout(invalidAddr, sendData, time.Second) 466 t.AssertNE(err, nil) 467 }) 468 469 gtest.C(t, func(t *gtest.T) { 470 err := gtcp.SendPkg(s.GetListenedAddress(), sendData) 471 t.AssertNil(err) 472 result, err := gtcp.SendRecvPkgWithTimeout(s.GetListenedAddress(), sendData, time.Second) 473 t.AssertNil(err) 474 t.Assert(result, sendData) 475 }) 476 } 477 478 func TestNewServer(t *testing.T) { 479 gtest.C(t, func(t *gtest.T) { 480 s := gtcp.NewServer(gtcp.FreePortAddress, func(conn *gtcp.Conn) { 481 defer conn.Close() 482 for { 483 data, err := conn.Recv(-1) 484 if err != nil { 485 break 486 } 487 conn.Send(data) 488 } 489 }, "NewServer") 490 defer s.Close() 491 go s.Run() 492 493 time.Sleep(simpleTimeout) 494 495 result, err := gtcp.SendRecv(s.GetListenedAddress(), sendData, -1) 496 t.AssertNil(err) 497 t.Assert(result, sendData) 498 }) 499 } 500 501 func TestGetServer(t *testing.T) { 502 gtest.C(t, func(t *gtest.T) { 503 s := gtcp.GetServer("GetServer") 504 defer s.Close() 505 go s.Run() 506 507 t.Assert(s.GetAddress(), "") 508 }) 509 510 gtest.C(t, func(t *gtest.T) { 511 gtcp.NewServer(gtcp.FreePortAddress, func(conn *gtcp.Conn) { 512 defer conn.Close() 513 for { 514 data, err := conn.Recv(-1) 515 if err != nil { 516 break 517 } 518 conn.Send(data) 519 } 520 }, "NewServer") 521 522 s := gtcp.GetServer("NewServer") 523 defer s.Close() 524 go s.Run() 525 526 time.Sleep(simpleTimeout) 527 528 result, err := gtcp.SendRecv(s.GetListenedAddress(), sendData, -1) 529 t.AssertNil(err) 530 t.Assert(result, sendData) 531 }) 532 } 533 534 func TestServer_SetAddress(t *testing.T) { 535 gtest.C(t, func(t *gtest.T) { 536 s := gtcp.NewServer("", func(conn *gtcp.Conn) { 537 defer conn.Close() 538 for { 539 data, err := conn.Recv(-1) 540 if err != nil { 541 break 542 } 543 conn.Send(data) 544 } 545 }) 546 defer s.Close() 547 t.Assert(s.GetAddress(), "") 548 s.SetAddress(gtcp.FreePortAddress) 549 go s.Run() 550 551 time.Sleep(simpleTimeout) 552 553 result, err := gtcp.SendRecv(s.GetListenedAddress(), sendData, -1) 554 t.AssertNil(err) 555 t.Assert(result, sendData) 556 }) 557 } 558 559 func TestServer_SetHandler(t *testing.T) { 560 gtest.C(t, func(t *gtest.T) { 561 s := gtcp.NewServer(gtcp.FreePortAddress, nil) 562 defer s.Close() 563 s.SetHandler(func(conn *gtcp.Conn) { 564 defer conn.Close() 565 for { 566 data, err := conn.Recv(-1) 567 if err != nil { 568 break 569 } 570 conn.Send(data) 571 } 572 }) 573 go s.Run() 574 575 time.Sleep(simpleTimeout) 576 577 result, err := gtcp.SendRecv(s.GetListenedAddress(), sendData, -1) 578 t.AssertNil(err) 579 t.Assert(result, sendData) 580 }) 581 } 582 583 func TestServer_Run(t *testing.T) { 584 gtest.C(t, func(t *gtest.T) { 585 s := gtcp.NewServer(gtcp.FreePortAddress, func(conn *gtcp.Conn) { 586 defer conn.Close() 587 for { 588 data, err := conn.Recv(-1) 589 if err != nil { 590 break 591 } 592 conn.Send(data) 593 } 594 }) 595 defer s.Close() 596 go s.Run() 597 598 time.Sleep(simpleTimeout) 599 600 result, err := gtcp.SendRecv(s.GetListenedAddress(), sendData, -1) 601 t.AssertNil(err) 602 t.Assert(result, sendData) 603 }) 604 605 gtest.C(t, func(t *gtest.T) { 606 s := gtcp.NewServer(gtcp.FreePortAddress, nil) 607 defer s.Close() 608 go func() { 609 err := s.Run() 610 t.AssertNE(err, nil) 611 }() 612 }) 613 }