Skip to content

Commit

Permalink
add client tests to suite
Browse files Browse the repository at this point in the history
  • Loading branch information
saviorand committed Jan 4, 2024
1 parent 4b181de commit 3dcce24
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 5 deletions.
21 changes: 21 additions & 0 deletions lightbug_http/tests/run.mojo
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
from lightbug_http.python.client import PythonClient
from lightbug_http.tests.utils import FakeClient
from lightbug_http.tests.test_client import test_client_lightbug


fn run_tests() raises:
run_client_tests()


fn run_client_tests() raises:
let fake_client = FakeClient()
let py_client = PythonClient()
test_client_lightbug[FakeClient](fake_client)
test_client_lightbug[PythonClient](py_client)


fn main():
try:
run_tests()
except e:
print("Test suite failed: " + e.__str__())
9 changes: 4 additions & 5 deletions lightbug_http/tests/test_client.mojo
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import testing
from lightbug_http.python.client import PythonClient
from lightbug_http.client import Client
from lightbug_http.http import HTTPRequest
from lightbug_http.uri import URI
from lightbug_http.header import RequestHeader
from lightbug_http.tests.utils import getRequest
from lightbug_http.tests.utils import getRequest, defaultExpectedGetResponse


fn test_client_lightbug() raises:
let client = PythonClient()
fn test_client_lightbug[T: Client](client: T) raises:
let res = client.do(
HTTPRequest(
URI("0.0.0.0:8080"),
Expand All @@ -17,5 +16,5 @@ fn test_client_lightbug() raises:
)
testing.assert_equal(
String(res.body_raw),
"HTTP/1.1 200 OK\r\nServer: M\r\nDate: Content-Length: 13\r\n\r\nHello world!",
defaultExpectedGetResponse,
)
68 changes: 68 additions & 0 deletions lightbug_http/tests/utils.mojo
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from python import Python, PythonObject
from lightbug_http.io.bytes import Bytes
from lightbug_http.error import ErrorHandler
from lightbug_http.uri import URI
from lightbug_http.http import HTTPRequest, HTTPResponse, ResponseHeader
from lightbug_http.net import Listener, Addr, Connection, TCPAddr
from lightbug_http.service import HTTPService, OK
Expand All @@ -17,6 +18,69 @@ fn new_fake_listener(request_count: Int, request: Bytes) -> FakeListener:
return FakeListener(request_count, request)


struct ReqInfo:
var full_uri: URI
var host: String
var is_tls: Bool

fn __init__(inout self, full_uri: URI, host: String, is_tls: Bool):
self.full_uri = full_uri
self.host = host
self.is_tls = is_tls


struct FakeClient(Client):
"""FakeClient doesn't actually send any requests, but it extracts useful information from the input.
"""

var name: String
var host: StringLiteral
var port: Int
var req_full_uri: URI
var req_host: String
var req_is_tls: Bool

fn __init__(inout self) raises:
self.host = "127.0.0.1"
self.port = 8888
self.name = "lightbug_http_fake_client"
self.req_full_uri = URI("")
self.req_host = ""
self.req_is_tls = False

fn __init__(inout self, host: StringLiteral, port: Int) raises:
self.host = host
self.port = port
self.name = "lightbug_http_fake_client"
self.req_full_uri = URI("")
self.req_host = ""
self.req_is_tls = False

fn do(self, req: HTTPRequest) raises -> HTTPResponse:
return OK(String(defaultExpectedGetResponse)._buffer)

fn extract(inout self, req: HTTPRequest) raises -> ReqInfo:
var full_uri = req.uri()
try:
_ = full_uri.parse()
except e:
print("error parsing uri: " + e.__str__())

self.req_full_uri = full_uri

let host = String(full_uri.host())

if host == "":
raise Error("URI host is nil")

self.req_host = host

let is_tls = full_uri.is_https()
self.req_is_tls = is_tls

return ReqInfo(full_uri, host, is_tls)


struct FakeServer(ServerTrait):
var __listener: FakeListener
var __handler: FakeResponder
Expand Down Expand Up @@ -162,3 +226,7 @@ alias getRequest = String(
+ "Referer: http://example.com/aaa?bbb=ccc\r\nCookie: foo=bar; baz=baraz;"
" aa=aakslsdweriwereowriewroire\r\n\r\n"
)._buffer

alias defaultExpectedGetResponse = String(
"HTTP/1.1 200 OK\r\nServer: M\r\nDate: Content-Length: 13\r\n\r\nHello world!"
)

0 comments on commit 3dcce24

Please sign in to comment.