udp_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package network
  2. import (
  3. "fmt"
  4. "strings"
  5. "sync"
  6. "testing"
  7. "time"
  8. )
  9. const (
  10. testUDPServerAddress = "127.0.0.1:10060"
  11. testUDPServerTimeout = time.Second
  12. testUDPServerReceiveBufferSize = 1024
  13. testUDPClientTimeout = time.Second
  14. testUDPClientReceiveBufferSize = 1024
  15. )
  16. func TestUDP(t *testing.T) {
  17. server := &UDPServer{}
  18. err := server.Connect(testUDPServerAddress, NewUDPServerOptions(
  19. WithUDPServerReadTimeout(testUDPServerTimeout),
  20. WithUDPServerWriteTimeout(testUDPServerTimeout),
  21. WithUDPServerReceiveBufferSize(testUDPServerReceiveBufferSize),
  22. WithUDPServerRequestCallback(func(dataReader *DataReader) (*DataReader, error) {
  23. requestBytes, err := dataReader.Bytes(dataReader.Len())
  24. if err != nil {
  25. return nil, err
  26. }
  27. responseWriter := NewDataWriter()
  28. err = responseWriter.Bytes([]byte(strings.ToUpper(string(requestBytes))))
  29. if err != nil {
  30. return nil, err
  31. }
  32. return responseWriter.ToReader(), nil
  33. }),
  34. ))
  35. if err != nil {
  36. t.Fatal(err)
  37. }
  38. defer server.Disconnect()
  39. wg := &sync.WaitGroup{}
  40. wg.Add(2)
  41. client := &UDPClient{}
  42. err = client.Connect(testUDPServerAddress, NewUDPClientOptions(
  43. WithUDPClientReadTimeout(testUDPClientTimeout),
  44. WithUDPClientWriteTimeout(testUDPClientTimeout),
  45. WithUDPClientReceiveBufferSize(testUDPClientReceiveBufferSize),
  46. WithUDPClientRequestNonBlockCount(2),
  47. WithUDPClientResponseCallback(func(dataReader *DataReader) {
  48. requestBytes, err := dataReader.Bytes(dataReader.Len())
  49. if err != nil {
  50. fmt.Println(err)
  51. return
  52. }
  53. fmt.Println(string(requestBytes))
  54. wg.Done()
  55. }),
  56. ))
  57. if err != nil {
  58. t.Fatal(err)
  59. }
  60. defer client.Disconnect()
  61. client.Send([]byte("test1"))
  62. client.Send([]byte("test2"))
  63. wg.Wait()
  64. }