Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import httpclient, asynchttpserver, asyncdispatch, asyncfutures
- import net
- import std/asyncnet
- import std/nativesockets
- const postBegin = """
- POST / HTTP/1.1
- Transfer-Encoding:chunked
- """
- block:
- const expected = "hello=world"
- const input = ("b\r\n" &
- "hello=world\r\n" &
- "0\r\n" &
- "\r\n")
- var sanity = false
- proc handler(request: Request) {.async.} =
- doAssert(request.body == expected)
- doAssert(request.headers.hasKey("Transfer-Encoding"))
- doAssert(not request.headers.hasKey("Content-Length"))
- sanity = true
- await request.respond(Http200, "Good")
- let server = newAsyncHttpServer()
- asyncCheck server.serve(Port(0), handler)
- let port = getLocalAddr(server.getSocket.getFd, AF_INET)[1]
- let data = postBegin & input
- var socket = newSocket()
- socket.connect("127.0.0.1", port)
- socket.send(data)
- waitFor sleepAsync(10)
- socket.close()
- server.close()
- # Verify we ran the handler and its asserts
- doAssert(sanity)
- block:
- const expected = "hello encoding"
- const input = ("e\r\n" &
- "hello encoding\r\n" &
- "0\r\n" &
- "\r\n")
- var sanity = false
- proc handler(request: Request) {.async.} =
- doAssert(request.body == expected)
- doAssert(request.headers.hasKey("Transfer-Encoding"))
- doAssert(not request.headers.hasKey("Content-Length"))
- sanity = true
- await request.respond(Http200, "Good")
- let server = newAsyncHttpServer()
- asyncCheck server.serve(Port(0), handler)
- let port = getLocalAddr(server.getSocket.getFd, AF_INET)[1]
- let data = postBegin & input
- var socket = newSocket()
- socket.connect("127.0.0.1", port)
- socket.send(data)
- waitFor sleepAsync(10)
- socket.close()
- server.close()
- # Verify we ran the handler and its asserts
- doAssert(sanity)
- # block:
- # # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding
- # const expected = "MozillaDeveloperNetwork"
- # const input = ("7\r\n" &
- # "Mozilla\r\n" &
- # "9\r\n" &
- # "Developer\r\n" &
- # "7\r\n" &
- # "Network\r\n" &
- # "0\r\n" &
- # "\r\n")
- # var sanity = false
- # proc handler(request: Request) {.async.} =
- # doAssert(request.body == expected)
- # doAssert(request.headers.hasKey("Transfer-Encoding"))
- # doAssert(not request.headers.hasKey("Content-Length"))
- # sanity = true
- # await request.respond(Http200, "Good")
- # let server = newAsyncHttpServer()
- # asyncCheck server.serve(Port(0), handler)
- # let port = getLocalAddr(server.getSocket.getFd, AF_INET)[1]
- # let data = postBegin & input
- # var socket = newSocket()
- # socket.connect("127.0.0.1", port)
- # socket.send(data)
- # waitFor sleepAsync(10)
- # socket.close()
- # server.close()
- # # Verify we ran the handler and its asserts
- # doAssert(sanity)
- # block:
- # # https://en.wikipedia.org/wiki/Chunked_transfer_encoding#Example
- # const expected = "Wikipedia in \r\n\r\nchunks."
- # const input = ("4\r\n" &
- # "Wiki\r\n" &
- # "6\r\n" &
- # "pedia \r\n" &
- # "E\r\n" &
- # "in \r\n" &
- # "\r\n" &
- # "chunks.\r\n" &
- # "0\r\n" &
- # "\r\n")
- # var sanity = false
- # proc handler(request: Request) {.async.} =
- # doAssert(request.body == expected)
- # doAssert(request.headers.hasKey("Transfer-Encoding"))
- # doAssert(not request.headers.hasKey("Content-Length"))
- # sanity = true
- # await request.respond(Http200, "Good")
- # let server = newAsyncHttpServer()
- # asyncCheck server.serve(Port(0), handler)
- # let port = getLocalAddr(server.getSocket.getFd, AF_INET)[1]
- # let data = postBegin & input
- # var socket = newSocket()
- # socket.connect("127.0.0.1", port)
- # socket.send(data)
- # waitFor sleepAsync(10)
- # socket.close()
- # server.close()
- # # Verify we ran the handler and its asserts
- # doAssert(sanity)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement