~nskaggs/+junk/xenial-test

« back to all changes in this revision

Viewing changes to src/github.com/joyent/gocommon/testing/httpsuite_test.go

  • Committer: Nicholas Skaggs
  • Date: 2016-10-24 20:56:05 UTC
  • Revision ID: nicholas.skaggs@canonical.com-20161024205605-z8lta0uvuhtxwzwl
Initi with beta15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package testing_test
 
2
 
 
3
import (
 
4
        "crypto/tls"
 
5
        "crypto/x509"
 
6
        "io/ioutil"
 
7
        gc "launchpad.net/gocheck"
 
8
        "net/http"
 
9
        "net/url"
 
10
        "reflect"
 
11
        "testing"
 
12
 
 
13
        jt "github.com/joyent/gocommon/testing"
 
14
)
 
15
 
 
16
type HTTPTestSuite struct {
 
17
        jt.HTTPSuite
 
18
}
 
19
 
 
20
type HTTPSTestSuite struct {
 
21
        jt.HTTPSuite
 
22
}
 
23
 
 
24
func Test(t *testing.T) {
 
25
        gc.TestingT(t)
 
26
}
 
27
 
 
28
var _ = gc.Suite(&HTTPTestSuite{})
 
29
var _ = gc.Suite(&HTTPSTestSuite{jt.HTTPSuite{UseTLS: true}})
 
30
 
 
31
type HelloHandler struct{}
 
32
 
 
33
func (h *HelloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 
34
        w.Header().Set("Content-Type", "text/plain")
 
35
        w.WriteHeader(200)
 
36
        w.Write([]byte("Hello World\n"))
 
37
}
 
38
 
 
39
func (s *HTTPTestSuite) TestHelloWorld(c *gc.C) {
 
40
        s.Mux.Handle("/", &HelloHandler{})
 
41
        response, err := http.Get(s.Server.URL)
 
42
        c.Check(err, gc.IsNil)
 
43
        content, err := ioutil.ReadAll(response.Body)
 
44
        response.Body.Close()
 
45
        c.Check(err, gc.IsNil)
 
46
        c.Check(response.Status, gc.Equals, "200 OK")
 
47
        c.Check(response.StatusCode, gc.Equals, 200)
 
48
        c.Check(string(content), gc.Equals, "Hello World\n")
 
49
}
 
50
 
 
51
func (s *HTTPSTestSuite) TestHelloWorldWithTLS(c *gc.C) {
 
52
        s.Mux.Handle("/", &HelloHandler{})
 
53
        c.Check(s.Server.URL[:8], gc.Equals, "https://")
 
54
        response, err := http.Get(s.Server.URL)
 
55
        // Default http.Get fails because the cert is self-signed
 
56
        c.Assert(err, gc.NotNil)
 
57
        c.Assert(reflect.TypeOf(err.(*url.Error).Err), gc.Equals, reflect.TypeOf(x509.UnknownAuthorityError{}))
 
58
        // Connect again with a Client that doesn't validate the cert
 
59
        insecureClient := &http.Client{Transport: &http.Transport{
 
60
                TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}}
 
61
        response, err = insecureClient.Get(s.Server.URL)
 
62
        c.Assert(err, gc.IsNil)
 
63
        content, err := ioutil.ReadAll(response.Body)
 
64
        response.Body.Close()
 
65
        c.Check(err, gc.IsNil)
 
66
        c.Check(response.Status, gc.Equals, "200 OK")
 
67
        c.Check(response.StatusCode, gc.Equals, 200)
 
68
        c.Check(string(content), gc.Equals, "Hello World\n")
 
69
}