From b62b2f3598e9e475e7066ec0c73144fda2f34d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E9=AA=9E?= Date: Mon, 13 Jun 2022 22:01:20 +0800 Subject: [PATCH] Improve the code coverage of the gudp module (#1907) --- net/gudp/gudp_z_unit_test.go | 127 +++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) diff --git a/net/gudp/gudp_z_unit_test.go b/net/gudp/gudp_z_unit_test.go index 55d6f6e8586..504b0a5fd88 100644 --- a/net/gudp/gudp_z_unit_test.go +++ b/net/gudp/gudp_z_unit_test.go @@ -18,6 +18,27 @@ import ( "github.com/gogf/gf/v2/util/gconv" ) +var ( + simpleTimeout = time.Millisecond * 100 + sendData = []byte("hello") + invalidAddr = "127.0.0.1:99999" +) + +func startUDPServer(addr string) { + s := gudp.NewServer(addr, func(conn *gudp.Conn) { + defer conn.Close() + for { + data, err := conn.Recv(-1) + if err != nil { + break + } + conn.Send(data) + } + }) + go s.Run() + time.Sleep(simpleTimeout) +} + func Test_Basic(t *testing.T) { var ( ctx = context.TODO() @@ -46,6 +67,11 @@ func Test_Basic(t *testing.T) { conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", p)) t.AssertNil(err) t.Assert(conn.Send([]byte(gconv.String(i))), nil) + t.AssertNil(conn.RemoteAddr()) + result, err := conn.Recv(-1) + t.AssertNil(err) + t.AssertNE(conn.RemoteAddr(), nil) + t.Assert(string(result), fmt.Sprintf(`> %d`, i)) conn.Close() } }) @@ -60,6 +86,41 @@ func Test_Basic(t *testing.T) { conn.Close() } }) + // gudp.Conn.SendWithTimeout + gtest.C(t, func(t *gtest.T) { + for i := 0; i < 100; i++ { + conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", p)) + t.AssertNil(err) + err = conn.SendWithTimeout([]byte(gconv.String(i)), time.Second) + t.AssertNil(err) + conn.Close() + } + }) + // gudp.Conn.RecvWithTimeout + gtest.C(t, func(t *gtest.T) { + for i := 0; i < 100; i++ { + conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", p)) + t.AssertNil(err) + err = conn.Send([]byte(gconv.String(i))) + t.AssertNil(err) + conn.SetRecvBufferWait(time.Millisecond * 100) + result, err := conn.RecvWithTimeout(-1, time.Second) + t.AssertNil(err) + t.Assert(string(result), fmt.Sprintf(`> %d`, i)) + conn.Close() + } + }) + // gudp.Conn.SendRecvWithTimeout + gtest.C(t, func(t *gtest.T) { + for i := 0; i < 100; i++ { + conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", p)) + t.AssertNil(err) + result, err := conn.SendRecvWithTimeout([]byte(gconv.String(i)), -1, time.Second) + t.AssertNil(err) + t.Assert(string(result), fmt.Sprintf(`> %d`, i)) + conn.Close() + } + }) // gudp.Send gtest.C(t, func(t *gtest.T) { for i := 0; i < 100; i++ { @@ -112,3 +173,69 @@ func Test_Buffer(t *testing.T) { t.Assert(string(result), "4") }) } + +func Test_NewConn(t *testing.T) { + var ( + port, _ = gudp.GetFreePort() + ) + + startUDPServer(fmt.Sprintf("127.0.0.1:%d", port)) + + gtest.C(t, func(t *gtest.T) { + conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", port), fmt.Sprintf("127.0.0.1:%d", port+1)) + t.AssertNil(err) + conn.SetDeadline(time.Now().Add(time.Second)) + t.Assert(conn.Send(sendData), nil) + conn.Close() + }) + + gtest.C(t, func(t *gtest.T) { + conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", port), fmt.Sprintf("127.0.0.1:%d", 99999)) + t.AssertNil(conn) + t.AssertNE(err, nil) + }) + + gtest.C(t, func(t *gtest.T) { + conn, err := gudp.NewConn(fmt.Sprintf("127.0.0.1:%d", 99999)) + t.AssertNil(conn) + t.AssertNE(err, nil) + }) +} + +func Test_GetFreePorts(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + ports, err := gudp.GetFreePorts(2) + t.AssertNil(err) + t.AssertEQ(len(ports), 2) + }) +} + +func Test_Server(t *testing.T) { + p, _ := gudp.GetFreePort() + gudp.NewServer(fmt.Sprintf("127.0.0.1:%d", p), func(conn *gudp.Conn) { + defer conn.Close() + for { + data, err := conn.Recv(1) + if len(data) > 0 { + conn.Send(data) + } + if err != nil { + break + } + } + }, "GoFrameUDPServer") + + gtest.C(t, func(t *gtest.T) { + server := gudp.GetServer("GoFrameUDPServer") + t.AssertNE(server, nil) + server = gudp.GetServer("TestUDPServer") + t.AssertNE(server, nil) + server.SetAddress("127.0.0.1:8888") + server.SetHandler(func(conn *gudp.Conn) { + defer conn.Close() + for { + conn.Send([]byte("OtherHandle")) + } + }) + }) +}