Skip to content

Commit

Permalink
add basic test for client
Browse files Browse the repository at this point in the history
  • Loading branch information
ninedraft committed Jan 9, 2022
1 parent df094bd commit 2b807f9
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions gemax/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package gemax_test

import (
"context"
"crypto/tls"
"embed"
"io"
"net"
"testing"

"github.com/ninedraft/gemax/gemax"
"github.com/ninedraft/gemax/gemax/internal/testaddr"
"github.com/ninedraft/gemax/gemax/internal/tester"
)

Expand Down Expand Up @@ -35,3 +38,55 @@ func TestClient(test *testing.T) {
}
test.Logf("%s", data)
}

func TestClientTLS(test *testing.T) {
var addr = testaddr.Addr()
var tcpListener, errListenTCP = net.Listen("tcp", addr)
if errListenTCP != nil {
test.Fatalf("starting a TCP listener: %v", errListenTCP)
}
defer tcpListener.Close()

var cert, errCert = tls.LoadX509KeyPair("testdata/cert.pem", "testdata/key.pem")
if errCert != nil {
test.Fatalf("loading test TLS certs: %v", errCert)
}
var tlsCfg = &tls.Config{
MinVersion: tls.VersionTLS12,
Certificates: []tls.Certificate{cert},
}

var ctx, cancel = context.WithCancel(context.Background())
defer cancel()

var listener = tls.NewListener(tcpListener, tlsCfg)
go func() {
<-ctx.Done()
listener.Close()
}()
go func() {
var conn, errAccept = listener.Accept()
if errAccept != nil {
test.Log("accepting test connection:", errAccept)
return
}
defer conn.Close()

var testdata, errTestData = testClientPages.ReadFile("testdata/client/pages/success.com")
if errTestData != nil {
test.Log("reading test data:", errTestData)
return
}
conn.Write(testdata)
}()

var client = &gemax.Client{}
var resp, errFetch = client.Fetch(ctx, "gemini://"+addr)
if errFetch != nil {
test.Fatal("fetching test data:", errFetch)
}
defer resp.Close()

var responseText, _ = io.ReadAll(resp)
test.Logf("response: %q", responseText)
}

0 comments on commit 2b807f9

Please sign in to comment.