package gemini_test import ( "bytes" "context" "crypto/tls" "fmt" "io" "net/url" "testing" "tildegit.org/tjp/gus" "tildegit.org/tjp/gus/gemini" ) func TestRoundTrip(t *testing.T) { tlsConf, err := gemini.FileTLS("./testdata/server.crt", "./testdata/server.key") if err != nil { t.Fatalf("FileTLS(): %s", err.Error()) } handler := func(ctx context.Context, req *gus.Request) *gus.Response { return gemini.Success("text/gemini", bytes.NewBufferString("you've found my page")) } server, err := gemini.NewServer(context.Background(), tlsConf, "tcp", "127.0.0.1:0", handler) if err != nil { t.Fatalf("NewServer(): %s", err.Error()) } go server.Serve() defer server.Close() u, err := url.Parse(fmt.Sprintf("gemini://%s/test", server.Address())) if err != nil { t.Fatalf("url.Parse: %s", err.Error()) } cli := gemini.NewClient(testClientTLS()) response, err := cli.RoundTrip(&gus.Request{URL: u}) if err != nil { t.Fatalf("RoundTrip(): %s", err.Error()) } if response.Status != gemini.StatusSuccess { t.Errorf("response status: expected %d, got %d", gemini.StatusSuccess, response.Status) } if response.Meta != "text/gemini" { t.Errorf("response meta: expected \"text/gemini\", got %q", response.Meta) } if response.Body == nil { t.Fatal("succcess response has nil body") } body, err := io.ReadAll(response.Body) if err != nil { t.Fatalf("ReadAll: %s", err.Error()) } if string(body) != "you've found my page" { t.Errorf("response body: expected \"you've found my page\", got %q", string(body)) } } func testClientTLS() *tls.Config { return &tls.Config{InsecureSkipVerify: true} }