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  }