github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/agent/resourceshookcontext/unitfacade_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package resourceshookcontext_test 5 6 import ( 7 "github.com/juju/errors" 8 "github.com/juju/testing" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/apiserver/common" 13 "github.com/juju/juju/apiserver/facades/agent/resourceshookcontext" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/resource" 16 "github.com/juju/juju/resource/api" 17 "github.com/juju/juju/resource/resourcetesting" 18 ) 19 20 var _ = gc.Suite(&UnitFacadeSuite{}) 21 22 type UnitFacadeSuite struct { 23 testing.IsolationSuite 24 25 stub *testing.Stub 26 } 27 28 func (s *UnitFacadeSuite) SetUpTest(c *gc.C) { 29 s.IsolationSuite.SetUpTest(c) 30 31 s.stub = &testing.Stub{} 32 } 33 34 func (s *UnitFacadeSuite) TestNewUnitFacade(c *gc.C) { 35 expected := &stubUnitDataStore{Stub: s.stub} 36 37 uf := resourceshookcontext.NewUnitFacade(expected) 38 39 s.stub.CheckNoCalls(c) 40 c.Check(uf.DataStore, gc.Equals, expected) 41 } 42 43 func (s *UnitFacadeSuite) TestGetResourceInfoOkay(c *gc.C) { 44 opened1 := resourcetesting.NewResource(c, s.stub, "spam", "a-application", "some data") 45 res1 := opened1.Resource 46 opened2 := resourcetesting.NewResource(c, s.stub, "eggs", "a-application", "other data") 47 res2 := opened2.Resource 48 store := &stubUnitDataStore{Stub: s.stub} 49 store.ReturnListResources = resource.ApplicationResources{ 50 Resources: []resource.Resource{res1, res2}, 51 } 52 uf := resourceshookcontext.UnitFacade{DataStore: store} 53 54 results, err := uf.GetResourceInfo(params.ListUnitResourcesArgs{ 55 ResourceNames: []string{"spam", "eggs"}, 56 }) 57 c.Assert(err, jc.ErrorIsNil) 58 59 s.stub.CheckCallNames(c, "ListResources") 60 c.Check(results, jc.DeepEquals, params.UnitResourcesResult{ 61 Resources: []params.UnitResourceResult{{ 62 Resource: api.Resource2API(res1), 63 }, { 64 Resource: api.Resource2API(res2), 65 }}, 66 }) 67 } 68 69 func (s *UnitFacadeSuite) TestGetResourceInfoEmpty(c *gc.C) { 70 opened := resourcetesting.NewResource(c, s.stub, "spam", "a-application", "some data") 71 store := &stubUnitDataStore{Stub: s.stub} 72 store.ReturnListResources = resource.ApplicationResources{ 73 Resources: []resource.Resource{opened.Resource}, 74 } 75 uf := resourceshookcontext.UnitFacade{DataStore: store} 76 77 results, err := uf.GetResourceInfo(params.ListUnitResourcesArgs{ 78 ResourceNames: []string{}, 79 }) 80 c.Assert(err, jc.ErrorIsNil) 81 82 s.stub.CheckCallNames(c, "ListResources") 83 c.Check(results, jc.DeepEquals, params.UnitResourcesResult{ 84 Resources: []params.UnitResourceResult{}, 85 }) 86 } 87 88 func (s *UnitFacadeSuite) TestGetResourceInfoNotFound(c *gc.C) { 89 opened := resourcetesting.NewResource(c, s.stub, "spam", "a-application", "some data") 90 store := &stubUnitDataStore{Stub: s.stub} 91 store.ReturnListResources = resource.ApplicationResources{ 92 Resources: []resource.Resource{opened.Resource}, 93 } 94 uf := resourceshookcontext.UnitFacade{DataStore: store} 95 96 results, err := uf.GetResourceInfo(params.ListUnitResourcesArgs{ 97 ResourceNames: []string{"eggs"}, 98 }) 99 c.Assert(err, jc.ErrorIsNil) 100 101 s.stub.CheckCallNames(c, "ListResources") 102 c.Check(results, jc.DeepEquals, params.UnitResourcesResult{ 103 Resources: []params.UnitResourceResult{{ 104 ErrorResult: params.ErrorResult{ 105 Error: common.ServerError(errors.NotFoundf(`resource "eggs"`)), 106 }, 107 }}, 108 }) 109 }