@@ -2,6 +2,7 @@ package gemax_test
22
33import (
44 "context"
5+ "crypto/tls"
56 "errors"
67 "fmt"
78 "io"
@@ -15,23 +16,81 @@ import (
1516)
1617
1718func TestServerSuccess (test * testing.T ) {
18- var listener = setupEchoServer (test )
19+ var listener , server = setupEchoServer (test )
1920 defer func () { _ = listener .Close () }()
21+ var ctx , cancel = context .WithCancel (context .Background ())
22+ test .Cleanup (cancel )
23+ runTask (test , func () {
24+ var err = server .Serve (ctx , listener )
25+ if err != nil {
26+ test .Logf ("test server: Serve: %v" , err )
27+ }
28+ })
2029
2130 var resp = listener .next (test .Name (), strings .NewReader ("gemini://example.com/path" ))
2231
2332 expectResponse (test , resp , "20 text/gemini\r \n gemini://example.com/path" )
2433}
2534
2635func TestServerBadRequest (test * testing.T ) {
27- var listener = setupEchoServer (test )
36+ var listener , server = setupEchoServer (test )
2837 defer func () { _ = listener .Close () }()
38+ var ctx , cancel = context .WithCancel (context .Background ())
39+ test .Cleanup (cancel )
40+ runTask (test , func () {
41+ var err = server .Serve (ctx , listener )
42+ if err != nil {
43+ test .Logf ("test server: Serve: %v" , err )
44+ }
45+ })
2946
3047 var resp = listener .next (test .Name (), strings .NewReader ("invalid URL" ))
48+
3149 expectResponse (test , resp , "59 " + status .Text (status .BadRequest )+ "\r \n " )
3250}
3351
34- func setupEchoServer (t * testing.T ) * fakeListener {
52+ func TestListenAndServe (test * testing.T ) {
53+ var server = & gemax.Server {
54+ Addr : "localhost:40423" ,
55+ Logf : test .Logf ,
56+ Handler : func (ctx context.Context , rw gemax.ResponseWriter , req gemax.IncomingRequest ) {
57+ _ , _ = io .WriteString (rw , "example text" )
58+ },
59+ }
60+ test .Logf ("loading test certs" )
61+ var cert , errCert = tls .LoadX509KeyPair ("testdata/cert.pem" , "testdata/key.pem" )
62+ if errCert != nil {
63+ test .Fatal (errCert )
64+ }
65+ var cfg = & tls.Config {
66+ MinVersion : tls .VersionTLS12 ,
67+ Certificates : []tls.Certificate {cert },
68+ }
69+ var ctx , cancel = context .WithCancel (context .Background ())
70+ test .Cleanup (cancel )
71+ test .Logf ("starting test server" )
72+ go func () {
73+ test .Logf ("test server: listening on %q" , server .Addr )
74+ var err = server .ListenAndServe (ctx , cfg )
75+ if err != nil {
76+ test .Logf ("test server: Serve: %v" , err )
77+ }
78+ }()
79+ time .Sleep (time .Second )
80+ var client = & gemax.Client {}
81+ var resp , errFetch = client .Fetch (ctx , "gemini://" + server .Addr )
82+ if errFetch != nil {
83+ test .Error ("fetching: " , errFetch )
84+ return
85+ }
86+ defer func () { _ = resp .Close () }()
87+
88+ expectResponse (test , resp , "example text" )
89+ var data , errRead = io .ReadAll (resp )
90+ test .Logf ("%s / %v" , data , errRead )
91+ }
92+
93+ func setupEchoServer (t * testing.T ) (* fakeListener , * gemax.Server ) {
3594 t .Helper ()
3695 var server = & gemax.Server {
3796 Logf : t .Logf ,
@@ -40,15 +99,7 @@ func setupEchoServer(t *testing.T) *fakeListener {
4099 },
41100 }
42101 var listener = newListener (t .Name ())
43- var ctx , cancel = context .WithCancel (context .Background ())
44- t .Cleanup (cancel )
45- runTask (t , func () {
46- var err = server .Serve (ctx , listener )
47- if err != nil {
48- t .Logf ("test server: Serve: %v" , err )
49- }
50- })
51- return listener
102+ return listener , server
52103}
53104
54105func expectResponse (t * testing.T , got io.Reader , want string ) {
0 commit comments