added http package; updated data.odin
CI / Detect changed paths (pull_request) Successful in 3s
CI / Odin unit tests and build (pull_request) Successful in 50s
CI / API unit tests and lint (pull_request) Failing after 43s
CI / Infra unit tests, vet, and preview (pull_request) Successful in 33s

This commit is contained in:
2026-09-12 13:55:14 -06:00
parent 3a037b5fd3
commit 39cb53ea8a
3 changed files with 357 additions and 5 deletions
+75
View File
@@ -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)
}