1
1
package http
2
2
3
3
import (
4
- "io"
5
4
"log/slog"
6
- "net"
7
5
"net/http"
8
6
"net/http/httptest"
9
7
"strings"
10
8
"testing"
11
9
)
12
10
13
11
func XyzHandler (w http.ResponseWriter , r * http.Request ) {
14
- resp := "Hello World"
15
- slog .Info ("Received request with protocol type" , "proto" , r .Proto )
16
- w .Header ().Add ("Content-Type" , "text/plain" )
17
- w .WriteHeader (HttpStatusCodeOK )
12
+ if r .Method == "GET" {
13
+ resp := "Hello World"
14
+ slog .Info ("Received request with protocol type" , "proto" , r .Proto )
15
+ w .Header ().Add ("Content-Type" , "text/plain" )
16
+ w .WriteHeader (HttpStatusCodeOK )
18
17
19
- w .Write (([]byte (resp )))
18
+ w .Write (([]byte (resp )))
19
+ }
20
+
21
+ if r .Method == "HEAD" {
22
+ w .WriteHeader (200 )
23
+ }
20
24
}
21
25
22
26
func MiddleWare (next http.Handler ) http.Handler {
@@ -26,20 +30,25 @@ func MiddleWare(next http.Handler) http.Handler {
26
30
})
27
31
}
28
32
29
- func TestGet (t * testing.T ) {
30
-
33
+ func BuildServer (t * testing.T ) ( * httptest. Server , string ) {
34
+ t . Helper ()
31
35
mux := http .NewServeMux ()
32
36
mux .Handle ("/" , MiddleWare (http .HandlerFunc (XyzHandler )))
33
37
34
38
server := httptest .NewServer (mux )
39
+ url := strings .Split (server .URL , "://" )[1 ]
40
+ return server , url
41
+ }
42
+
43
+ func TestGet (t * testing.T ) {
44
+ server , url := BuildServer (t )
35
45
defer server .Close ()
36
46
37
- url := strings . Split ( server . URL , "://" )[ 1 ]
38
- conn , err := net . Dial ( "tcp" , url )
47
+ http_client , err := NewHttpClient ( url )
48
+
39
49
if err != nil {
40
- t .Errorf ("failed to dial socket %s" , err )
50
+ t .Errorf ("failed to create new http client %s" , err )
41
51
}
42
- http_client := HttpClient {conn }
43
52
res , err := http_client .Get ("/" )
44
53
45
54
if err != nil {
@@ -62,29 +71,21 @@ func TestGet(t *testing.T) {
62
71
}
63
72
64
73
func TestHead (t * testing.T ) {
65
- return
66
- server , client := net .Pipe ()
67
- http_client := HttpClient {client }
68
-
69
- go func () {
70
- defer client .Close ()
71
- _ , err := http_client .Head ("xyz" )
72
-
73
- if err != nil {
74
- t .Errorf ("Unexpected error %s" , err )
75
- }
76
- }()
74
+ server , url := BuildServer (t )
75
+ http_client , err := NewHttpClient (url )
77
76
78
- res , err := io .ReadAll (server )
77
+ if err != nil {
78
+ t .Errorf ("unexpected error when creating http client %s" , err )
79
+ }
80
+ defer server .Close ()
81
+ resp , err := http_client .Head ("/" )
79
82
80
83
if err != nil {
81
84
t .Errorf ("Unexpected error %s" , err )
82
85
}
83
86
84
- expected := "HEAD xyz HTTP/1.1\n Host: localhost\r \n \r \n "
85
-
86
- if string (res ) != expected {
87
- t .Errorf ("got %s want %s" , string (res ), expected )
87
+ if ! resp .Ok () {
88
+ t .Errorf ("got %d want %d" , resp .StatusLine .StatusCode , 200 )
88
89
}
89
90
}
90
91
0 commit comments