added http package; updated data.odin
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
package http_test
|
||||
|
||||
import "core:fmt"
|
||||
import "core:log"
|
||||
import "core:net"
|
||||
import "core:testing"
|
||||
import "core:thread"
|
||||
|
||||
import http "../src"
|
||||
|
||||
SERVER_BODY :: "hello world"
|
||||
SERVER_RESPONSE := "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n" +
|
||||
"Content-Length: 11\r\n" +
|
||||
"Connection: close\r\n\r\n" +
|
||||
SERVER_BODY
|
||||
|
||||
Serve_Args :: struct {
|
||||
listener: net.TCP_Socket,
|
||||
}
|
||||
|
||||
serve_proc :: proc(data: rawptr) {
|
||||
args := (^Serve_Args)(data)
|
||||
|
||||
conn, _, err := net.accept_tcp(args.listener)
|
||||
if err != nil {
|
||||
log.errorf("test server: accept failed: %v", err)
|
||||
return
|
||||
}
|
||||
defer net.close(conn)
|
||||
|
||||
request: [4096]byte
|
||||
if _, err := net.recv_tcp(conn, request[:]); err != nil {
|
||||
log.errorf("test server: recv failed: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if _, err := net.send_tcp(conn, transmute([]u8)SERVER_RESPONSE); err != nil {
|
||||
log.errorf("test server: send failed: %v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@(test)
|
||||
test_http_get_request :: proc(t: ^testing.T) {
|
||||
listener, err := net.listen_tcp({net.IP4_Loopback, 0})
|
||||
if err != nil {
|
||||
log.errorf("could not start test server: %v", err)
|
||||
testing.fail(t)
|
||||
return
|
||||
}
|
||||
defer net.close(listener)
|
||||
|
||||
bound, berr := net.bound_endpoint(listener)
|
||||
if berr != nil {
|
||||
log.errorf("could not read test server port: %v", berr)
|
||||
testing.fail(t)
|
||||
return
|
||||
}
|
||||
|
||||
args: Serve_Args = {listener = listener}
|
||||
server_thread := thread.create_and_start_with_data(&args, serve_proc)
|
||||
defer thread.destroy(server_thread)
|
||||
|
||||
url_buf: [64]byte
|
||||
url := fmt.bprintf(url_buf[:], "http://127.0.0.1:%d/", bound.port)
|
||||
|
||||
log.infof("requesting %s", url)
|
||||
body, ok := http.http_get(url)
|
||||
if !testing.expect(t, ok, "http_get returned ok=false") {
|
||||
return
|
||||
}
|
||||
defer delete(body)
|
||||
|
||||
testing.expectf(t, body == SERVER_BODY, "expected %q, got %q", SERVER_BODY, body)
|
||||
}
|
||||
Reference in New Issue
Block a user