Fix createStreamServer[T]().

Add test for bug with createStreamServer[T]().
This commit is contained in:
cheatfate 2018-06-11 22:54:08 +03:00
parent 3d6ce0f509
commit d2b93f309b
2 changed files with 46 additions and 7 deletions

View File

@ -858,11 +858,12 @@ proc createStreamServer*[T](host: TransportAddress,
sock: AsyncFD = asyncInvalidSocket,
backlog: int = 100,
bufferSize: int = DefaultStreamBufferSize,
child: StreamServer = nil): StreamServer =
child: StreamServer = nil,
init: TransportInitCallback = nil): StreamServer =
var fflags = flags + {GCUserData}
GC_ref(udata)
result = createStreamServer(host, cbproc, flags, sock, backlog, bufferSize,
cast[pointer](udata))
child, init, cast[pointer](udata))
proc getUserData*[T](server: StreamServer): T {.inline.} =
## Obtain user data stored in ``server`` object.

View File

@ -13,10 +13,14 @@ type
CustomServer = ref object of StreamServer
test1: string
test2: string
test3: string
CustomTransport = ref object of StreamTransport
test: string
CustomData = ref object
test: string
proc serveStreamClient(server: StreamServer,
transp: StreamTransport) {.async.} =
discard
@ -27,9 +31,17 @@ proc serveCustomStreamClient(server: StreamServer,
var ctransp = cast[CustomTransport](transp)
cserver.test1 = "CONNECTION"
cserver.test2 = ctransp.test
cserver.test3 = await transp.readLine()
var answer = "ANSWER\r\n"
discard await transp.write(answer)
transp.close()
proc serveUdataStreamClient(server: StreamServer,
transp: StreamTransport) {.async.} =
var udata = getUserData[CustomData](server)
var line = await transp.readLine()
discard await transp.write(line & udata.test & "\r\n")
transp.close()
server.stop()
server.close()
proc customServerTransport(server: StreamServer,
fd: AsyncFD): StreamTransport =
@ -67,15 +79,31 @@ proc test2(): bool =
server2.close()
result = true
proc client(server: CustomServer, ta: TransportAddress) {.async.} =
proc client1(server: CustomServer, ta: TransportAddress) {.async.} =
var transp = CustomTransport()
transp.test = "CLIENT"
server.start()
var ptransp = await connect(ta, child = transp)
var etransp = cast[CustomTransport](ptransp)
doAssert(etransp.test == "CLIENT")
var msg = "TEST\r\n"
discard await transp.write(msg)
var line = await transp.readLine()
transp.close()
await server.join()
server.stop()
server.close()
proc client2(server: StreamServer,
ta: TransportAddress): Future[bool] {.async.} =
server.start()
var transp = await connect(ta)
var msg = "TEST\r\n"
discard await transp.write(msg)
var line = await transp.readLine()
result = (line == "TESTCUSTOMDATA")
transp.close()
server.stop()
server.close()
proc test3(): bool =
var server = CustomServer()
@ -84,9 +112,17 @@ proc test3(): bool =
var pserver = createStreamServer(ta, serveCustomStreamClient, {ReuseAddr},
child = cast[StreamServer](server),
init = customServerTransport)
waitFor client(server, ta)
waitFor client1(server, ta)
result = (server.test1 == "CONNECTION") and (server.test2 == "CUSTOM")
proc test4(): bool =
var co = CustomData()
co.test = "CUSTOMDATA"
var ta = initTAddress("127.0.0.1:31354")
var server = createStreamServer(ta, serveUdataStreamClient, {ReuseAddr},
udata = co)
result = waitFor client2(server, ta)
when isMainModule:
suite "Server's test suite":
test "Stream Server start/stop test":
@ -95,3 +131,5 @@ when isMainModule:
check test3() == true
test "Datagram Server start/stop test":
check test2() == true
test "StreamServer[T] test":
check test4() == true