udp_server_test.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package server
  2. import (
  3. "fmt"
  4. "net"
  5. "testing"
  6. "time"
  7. )
  8. const (
  9. testUDPHost = "127.0.0.1:5638"
  10. )
  11. type testUDPEchoHandler struct{}
  12. func (a testUDPEchoHandler) Handler(conn *net.UDPConn) {
  13. buf := make([]byte, 1024)
  14. for {
  15. len, addr, err := conn.ReadFromUDP(buf)
  16. if err != nil {
  17. fmt.Println(err)
  18. continue
  19. }
  20. strData := string(buf)
  21. fmt.Println("Received:", strData)
  22. len, err = conn.WriteToUDP(buf[:len], addr)
  23. if err != nil {
  24. fmt.Println(err)
  25. }
  26. }
  27. }
  28. func validateUDPServer(t *testing.T, addr string) {
  29. cli, err := net.Dial("udp", testUDPHost)
  30. if err != nil {
  31. t.Fatal(err)
  32. }
  33. _, err = cli.Write([]byte(testEchoData))
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. buf := make([]byte, 1024)
  38. length, err := cli.Read(buf)
  39. if err != nil {
  40. t.Fatal(err)
  41. }
  42. gotData := string(buf[:length])
  43. if gotData != testEchoData {
  44. t.Errorf("echo server test failed. want: %s, got: %s", testEchoData, gotData)
  45. }
  46. }
  47. func TestUDPServer(t *testing.T) {
  48. initLog("test", "debug")
  49. h := testUDPEchoHandler{}
  50. svr := &UDPServer{
  51. addr: testUDPHost,
  52. handler: h,
  53. }
  54. err := svr.Start()
  55. if err != nil {
  56. t.Fatal(err)
  57. }
  58. time.Sleep(time.Millisecond * 100)
  59. validateUDPServer(t, testUDPHost)
  60. }