summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/luv/tests/test-tcp.lua
blob: 885d381ebced140e41cff6f7dcf37829346664af (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
return require('lib/tap')(function (test)
  test("basic tcp server and client", function (print, p, expect, uv)
    local server = uv.new_tcp()
    uv.tcp_bind(server, "::", 0)
    uv.listen(server, 128, expect(function (err)
      p("server on connection", server)
      assert(not err, err)
      uv.close(server)
    end))

    local address = uv.tcp_getsockname(server)
    p{server=server,address=address}

    local client = uv.new_tcp()
    local req = uv.tcp_connect(client, "::1", address.port, expect(function (err)
      p("client on connect", client, err)
      assert(not err, err)
      uv.shutdown(client, expect(function (err)
        p("client on shutdown", client, err)
        assert(not err, err)
        uv.close(client, expect(function ()
          p("client on close", client)
        end))
      end))
    end))
    p{client=client,req=req}
  end)

  test("tcp echo server and client", function (print, p, expect, uv)
    local server = uv.new_tcp()
    assert(uv.tcp_bind(server, "127.0.0.1", 0))
    assert(uv.listen(server, 1, expect(function ()
      local client = uv.new_tcp()
      assert(uv.accept(server, client))
      assert(uv.read_start(client, expect(function (err, data)
        p("server read", {err=err,data=data})
        assert(not err, err)
        if data then
          assert(uv.write(client, data))
        else
          assert(uv.read_stop(client))
          uv.close(client)
          uv.close(server)
        end
      end, 2)))
    end)))

    local address = uv.tcp_getsockname(server)
    p{server=server,address=address}

    local socket = assert(uv.new_tcp())
    assert(uv.tcp_connect(socket, "127.0.0.1", address.port, expect(function ()
      assert(uv.read_start(socket, expect(function (err, data)
        p("client read", {err=err,data=data})
        assert(not err, err)
        assert(uv.read_stop(socket))
        uv.close(socket)
      end)))
      local req = assert(uv.write(socket, "Hello", function (err)
        p("client onwrite", socket, err)
        assert(not err, err)
      end))
      p{socket=socket,req=req}
    end)))
  end)

  test("tcp echo server and client with methods", function (print, p, expect, uv)
    local server = uv.new_tcp()
    assert(server:bind("127.0.0.1", 0))
    assert(server:listen(1, expect(function ()
      local client = uv.new_tcp()
      assert(server:accept(client))
      assert(client:read_start(expect(function (err, data)
        p("server read", {err=err,data=data})
        assert(not err, err)
        if data then
          assert(client:write(data))
        else
          assert(client:read_stop())
          client:close()
          server:close()
        end
      end, 2)))
    end)))

    local address = server:getsockname()
    p{server=server,address=address}

    local socket = assert(uv.new_tcp())
    assert(socket:connect("127.0.0.1", address.port, expect(function ()
      assert(socket:read_start(expect(function (err, data)
        p("client read", {err=err,data=data})
        assert(not err, err)
        assert(socket:read_stop())
        socket:close()
      end)))
      local req = assert(socket:write("Hello", function (err)
        p("client onwrite", socket, err)
        assert(not err, err)
      end))
      p{socket=socket,req=req}
    end)))
  end)

  test("tcp invalid ip address", function (print, p, expect, uv)
    local ip = '127.0.0.100005'
    local server = uv.new_tcp()
    local status, err = pcall(function() uv.tcp_bind(server, ip, 1000) end)
    assert(not status)
    p(err)
    assert(err:find(ip))
    uv.close(server)
  end)
end)