summaryrefslogtreecommitdiff
path: root/src/regress/lib/libtls/gotls/tls_test.go
diff options
context:
space:
mode:
authorjsing <>2014-10-31 14:10:55 +0000
committerjsing <>2014-10-31 14:10:55 +0000
commit21b4fa8d2a511b2b7e7215bb18cb3836173fb390 (patch)
tree31393896541297e40332eb6510e90c96ca5d9178 /src/regress/lib/libtls/gotls/tls_test.go
parentcd85e00508e178758948e7a759609d0f1e7764df (diff)
downloadopenbsd-21b4fa8d2a511b2b7e7215bb18cb3836173fb390.tar.gz
openbsd-21b4fa8d2a511b2b7e7215bb18cb3836173fb390.tar.bz2
openbsd-21b4fa8d2a511b2b7e7215bb18cb3836173fb390.zip
Update regress for the libressl to libtls rename.
Diffstat (limited to 'src/regress/lib/libtls/gotls/tls_test.go')
-rw-r--r--src/regress/lib/libtls/gotls/tls_test.go100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/regress/lib/libtls/gotls/tls_test.go b/src/regress/lib/libtls/gotls/tls_test.go
new file mode 100644
index 0000000000..f709fcb455
--- /dev/null
+++ b/src/regress/lib/libtls/gotls/tls_test.go
@@ -0,0 +1,100 @@
1package tls
2
3import (
4 "encoding/pem"
5 "fmt"
6 "io/ioutil"
7 "net/http"
8 "net/http/httptest"
9 "net/url"
10 "os"
11 "strings"
12 "testing"
13)
14
15// createCAFile writes a PEM encoded version of the certificate out to a
16// temporary file, for use by libtls.
17func createCAFile(cert []byte) (string, error) {
18 f, err := ioutil.TempFile("", "tls")
19 if err != nil {
20 return "", fmt.Errorf("failed to create file: %v", err)
21 }
22 defer f.Close()
23 block := &pem.Block{
24 Type: "CERTIFICATE",
25 Bytes: cert,
26 }
27 if err := pem.Encode(f, block); err != nil {
28 return "", fmt.Errorf("failed to encode certificate: %v", err)
29 }
30 return f.Name(), nil
31}
32
33const httpContent = "Hello, TLS!"
34
35func TestTLSBasic(t *testing.T) {
36 ts := httptest.NewTLSServer(
37 http.HandlerFunc(
38 func(w http.ResponseWriter, r *http.Request) {
39 fmt.Fprintln(w, httpContent)
40 },
41 ),
42 )
43 defer ts.Close()
44
45 u, err := url.Parse(ts.URL)
46 if err != nil {
47 t.Fatalf("Failed to parse URL %q: %v", ts.URL, err)
48 }
49
50 caFile, err := createCAFile(ts.TLS.Certificates[0].Certificate[0])
51 if err != nil {
52 t.Fatalf("Failed to create CA file: %v", err)
53 }
54 defer os.Remove(caFile)
55
56 if err := Init(); err != nil {
57 t.Fatal(err)
58 }
59
60 cfg, err := NewConfig()
61 if err != nil {
62 t.Fatal(err)
63 }
64 defer cfg.Free()
65 cfg.SetCAFile(caFile)
66
67 tls, err := NewClient(cfg)
68 if err != nil {
69 t.Fatal(err)
70 }
71 defer tls.Free()
72
73 t.Logf("Connecting to %s", u.Host)
74
75 if err := tls.Connect(u.Host, ""); err != nil {
76 t.Fatal(err)
77 }
78 defer func() {
79 if err := tls.Close(); err != nil {
80 t.Logf("Close failed: %v", err)
81 }
82 }()
83
84 n, err := tls.Write([]byte("GET / HTTP/1.0\n\n"))
85 if err != nil {
86 t.Fatal(err)
87 }
88 t.Logf("Wrote %d bytes...", n)
89
90 buf := make([]byte, 1024)
91 n, err = tls.Read(buf)
92 if err != nil {
93 t.Fatal(err)
94 }
95 t.Logf("Read %d bytes...", n)
96
97 if !strings.Contains(string(buf), httpContent) {
98 t.Errorf("Response does not contain %q", httpContent)
99 }
100}