launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/state/api/client_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package api_test 5 6 import ( 7 "fmt" 8 gc "launchpad.net/gocheck" 9 "net/http" 10 11 "launchpad.net/juju-core/charm" 12 jujutesting "launchpad.net/juju-core/juju/testing" 13 "launchpad.net/juju-core/state/api" 14 "launchpad.net/juju-core/state/api/params" 15 "launchpad.net/juju-core/testing" 16 jc "launchpad.net/juju-core/testing/checkers" 17 ) 18 19 type clientSuite struct { 20 jujutesting.JujuConnSuite 21 } 22 23 var _ = gc.Suite(&clientSuite{}) 24 25 // TODO(jam) 2013-08-27 http://pad.lv/1217282 26 // Right now most of the direct tests for api.Client behavior are in 27 // state/apiserver/client/*_test.go 28 29 func (s *clientSuite) TestCloseMultipleOk(c *gc.C) { 30 client := s.APIState.Client() 31 c.Assert(client.Close(), gc.IsNil) 32 c.Assert(client.Close(), gc.IsNil) 33 c.Assert(client.Close(), gc.IsNil) 34 } 35 36 func (s *clientSuite) TestAddLocalCharm(c *gc.C) { 37 charmArchive := testing.Charms.Bundle(c.MkDir(), "dummy") 38 curl := charm.MustParseURL( 39 fmt.Sprintf("local:quantal/%s-%d", charmArchive.Meta().Name, charmArchive.Revision()), 40 ) 41 client := s.APIState.Client() 42 43 // Test the sanity checks first. 44 _, err := client.AddLocalCharm(charm.MustParseURL("cs:quantal/wordpress-1"), nil) 45 c.Assert(err, gc.ErrorMatches, `expected charm URL with local: schema, got "cs:quantal/wordpress-1"`) 46 47 // Upload an archive with its original revision. 48 savedURL, err := client.AddLocalCharm(curl, charmArchive) 49 c.Assert(err, gc.IsNil) 50 c.Assert(savedURL.String(), gc.Equals, curl.String()) 51 52 // Upload a charm directory with changed revision. 53 charmDir := testing.Charms.ClonedDir(c.MkDir(), "dummy") 54 charmDir.SetDiskRevision(42) 55 savedURL, err = client.AddLocalCharm(curl, charmDir) 56 c.Assert(err, gc.IsNil) 57 c.Assert(savedURL.Revision, gc.Equals, 42) 58 59 // Upload a charm directory again, revision should be bumped. 60 savedURL, err = client.AddLocalCharm(curl, charmDir) 61 c.Assert(err, gc.IsNil) 62 c.Assert(savedURL.String(), gc.Equals, curl.WithRevision(43).String()) 63 64 // Finally, try the NotImplementedError by mocking the server 65 // address to a handler that returns 405 Method Not Allowed for 66 // POST. 67 http.HandleFunc("/charms", func(w http.ResponseWriter, r *http.Request) { 68 if r.Method == "POST" { 69 http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed) 70 } 71 }) 72 go func() { 73 err = http.ListenAndServe(":8900", nil) 74 c.Assert(err, gc.IsNil) 75 }() 76 77 api.SetServerRoot(client, "http://localhost:8900") 78 _, err = client.AddLocalCharm(curl, charmArchive) 79 c.Assert(err, jc.Satisfies, params.IsCodeNotImplemented) 80 }