github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/httpcontext/model_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package httpcontext_test 5 6 import ( 7 "io" 8 "io/ioutil" 9 "net/http" 10 "net/http/httptest" 11 12 "github.com/juju/testing" 13 jc "github.com/juju/testing/checkers" 14 gc "gopkg.in/check.v1" 15 16 "github.com/juju/juju/apiserver/httpcontext" 17 coretesting "github.com/juju/juju/testing" 18 ) 19 20 type ModelHandlersSuite struct { 21 testing.IsolationSuite 22 impliedHandler *httpcontext.ImpliedModelHandler 23 queryHandler *httpcontext.QueryModelHandler 24 server *httptest.Server 25 } 26 27 var _ = gc.Suite(&ModelHandlersSuite{}) 28 29 func (s *ModelHandlersSuite) SetUpTest(c *gc.C) { 30 s.IsolationSuite.SetUpTest(c) 31 h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 32 io.WriteString(w, httpcontext.RequestModelUUID(r)) 33 }) 34 s.impliedHandler = &httpcontext.ImpliedModelHandler{ 35 Handler: h, 36 ModelUUID: coretesting.ModelTag.Id(), 37 } 38 s.queryHandler = &httpcontext.QueryModelHandler{ 39 Handler: h, 40 Query: "modeluuid", 41 } 42 mux := http.NewServeMux() 43 mux.Handle("/query", s.queryHandler) 44 mux.Handle("/implied", s.impliedHandler) 45 s.server = httptest.NewServer(mux) 46 } 47 48 func (s *ModelHandlersSuite) TestRequestModelUUIDNoContext(c *gc.C) { 49 uuid := httpcontext.RequestModelUUID(&http.Request{}) 50 c.Assert(uuid, gc.Equals, "") 51 } 52 53 func (s *ModelHandlersSuite) TestImplied(c *gc.C) { 54 resp, err := s.server.Client().Get(s.server.URL + "/implied") 55 c.Assert(err, jc.ErrorIsNil) 56 c.Assert(resp.StatusCode, gc.Equals, http.StatusOK) 57 defer resp.Body.Close() 58 59 out, err := ioutil.ReadAll(resp.Body) 60 c.Assert(string(out), gc.Equals, coretesting.ModelTag.Id()) 61 } 62 63 func (s *ModelHandlersSuite) TestQuery(c *gc.C) { 64 resp, err := s.server.Client().Get(s.server.URL + "/query?modeluuid=" + coretesting.ModelTag.Id()) 65 c.Assert(err, jc.ErrorIsNil) 66 c.Assert(resp.StatusCode, gc.Equals, http.StatusOK) 67 defer resp.Body.Close() 68 69 out, err := ioutil.ReadAll(resp.Body) 70 c.Assert(string(out), gc.Equals, coretesting.ModelTag.Id()) 71 } 72 73 func (s *ModelHandlersSuite) TestQueryInvalidModelUUID(c *gc.C) { 74 resp, err := s.server.Client().Get(s.server.URL + "/query?modeluuid=zing") 75 c.Assert(err, jc.ErrorIsNil) 76 c.Assert(resp.StatusCode, gc.Equals, http.StatusBadRequest) 77 defer resp.Body.Close() 78 79 out, err := ioutil.ReadAll(resp.Body) 80 c.Assert(string(out), gc.Equals, `invalid model UUID "zing"`+"\n") 81 }