github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/bundle/client_test.go (about) 1 // Copyright 2018 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package bundle_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 basetesting "github.com/juju/juju/api/base/testing" 12 "github.com/juju/juju/api/bundle" 13 "github.com/juju/juju/apiserver/common" 14 "github.com/juju/juju/apiserver/params" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type bundleMockSuite struct { 19 coretesting.BaseSuite 20 bundleClient *bundle.Client 21 } 22 23 var _ = gc.Suite(&bundleMockSuite{}) 24 25 func newClient(f basetesting.APICallerFunc, ver int) *bundle.Client { 26 return bundle.NewClient(basetesting.BestVersionCaller{f, ver}) 27 } 28 29 func (s *bundleMockSuite) TestFailExportBundlev1(c *gc.C) { 30 client := newClient( 31 func(objType string, 32 version int, 33 id, 34 request string, 35 args, 36 response interface{}, 37 ) error { 38 c.Check(objType, gc.Equals, "Bundle") 39 c.Check(id, gc.Equals, "") 40 c.Check(request, gc.Equals, "ExportBundle") 41 c.Assert(args, gc.Equals, nil) 42 result := response.(*params.StringResult) 43 result.Result = "" 44 return nil 45 }, 1, 46 ) 47 result, err := client.ExportBundle() 48 c.Assert(err, gc.NotNil) 49 c.Assert(err.Error(), gc.Equals, "this controller version does not support bundle export feature.") 50 c.Assert(result, jc.DeepEquals, "") 51 } 52 53 func (s *bundleMockSuite) TestExportBundlev2(c *gc.C) { 54 client := newClient( 55 func(objType string, version int, 56 id, 57 request string, 58 args, 59 response interface{}, 60 ) error { 61 result := response.(*params.StringResult) 62 result.Result = "applications:\n " + 63 "ubuntu:\n " + 64 "charm: cs:trusty/ubuntu\n " + 65 "series: trusty\n " + 66 "num_units: 1\n " + 67 "to:\n " + 68 "- \"0\"\n " + 69 "options:\n " + 70 "key: value\n" + 71 "series: xenial\n" + 72 "relations:\n" + 73 "- []\n" 74 return nil 75 }, 2, 76 ) 77 result, err := client.ExportBundle() 78 c.Assert(err, jc.ErrorIsNil) 79 c.Assert(result, jc.DeepEquals, "applications:\n "+ 80 "ubuntu:\n "+ 81 "charm: cs:trusty/ubuntu\n "+ 82 "series: trusty\n "+ 83 "num_units: 1\n "+ 84 "to:\n "+ 85 "- \"0\"\n "+ 86 "options:\n "+ 87 "key: value\n"+ 88 "series: xenial\n"+ 89 "relations:\n"+ 90 "- []\n") 91 } 92 93 func (s *bundleMockSuite) TestExportBundleNotNilParamsErrorv2(c *gc.C) { 94 client := newClient( 95 func(objType string, version int, 96 id, 97 request string, 98 args, 99 response interface{}, 100 ) error { 101 result := response.(*params.StringResult) 102 result.Result = "" 103 *(response.(*params.StringResult)) = params.StringResult{Error: common.ServerError( 104 errors.New("export failed nothing to export as there are no applications"))} 105 return result.Error 106 }, 2, 107 ) 108 result, err := client.ExportBundle() 109 c.Assert(err, gc.NotNil) 110 c.Assert(result, jc.DeepEquals, "") 111 c.Check(err.Error(), gc.Matches, "export failed nothing to export as there are no applications") 112 } 113 114 func (s *bundleMockSuite) TestExportBundleFailNoParamsErrorv2(c *gc.C) { 115 client := newClient( 116 func(objType string, version int, 117 id, 118 request string, 119 args, 120 response interface{}, 121 ) error { 122 result := response.(*params.StringResult) 123 result.Result = "" 124 return errors.New("foo") 125 }, 2, 126 ) 127 result, err := client.ExportBundle() 128 c.Assert(err, gc.NotNil) 129 c.Assert(result, jc.DeepEquals, "") 130 c.Check(err.Error(), gc.Matches, "foo") 131 }