github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/facades/controller/firewaller/firewaller_unit_test.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewaller_test 5 6 import ( 7 "github.com/juju/testing" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 "gopkg.in/juju/names.v2" 11 12 apitesting "github.com/juju/juju/api/testing" 13 "github.com/juju/juju/apiserver/common" 14 "github.com/juju/juju/apiserver/facades/controller/firewaller" 15 "github.com/juju/juju/apiserver/params" 16 apiservertesting "github.com/juju/juju/apiserver/testing" 17 "github.com/juju/juju/core/crossmodel" 18 "github.com/juju/juju/core/status" 19 "github.com/juju/juju/state" 20 coretesting "github.com/juju/juju/testing" 21 ) 22 23 var _ = gc.Suite(&RemoteFirewallerSuite{}) 24 25 type RemoteFirewallerSuite struct { 26 coretesting.BaseSuite 27 28 resources *common.Resources 29 authorizer *apiservertesting.FakeAuthorizer 30 st *mockState 31 api *firewaller.FirewallerAPIV4 32 } 33 34 func (s *RemoteFirewallerSuite) SetUpTest(c *gc.C) { 35 s.BaseSuite.SetUpTest(c) 36 37 s.resources = common.NewResources() 38 s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() }) 39 40 s.authorizer = &apiservertesting.FakeAuthorizer{ 41 Tag: names.NewMachineTag("0"), 42 Controller: true, 43 } 44 45 s.st = newMockState(coretesting.ModelTag.Id()) 46 api, err := firewaller.NewFirewallerAPI(s.st, s.resources, s.authorizer, &mockCloudSpecAPI{}) 47 c.Assert(err, jc.ErrorIsNil) 48 s.api = &firewaller.FirewallerAPIV4{FirewallerAPIV3: api, ControllerConfigAPI: common.NewControllerConfig(s.st)} 49 } 50 51 func (s *RemoteFirewallerSuite) TestWatchIngressAddressesForRelations(c *gc.C) { 52 db2Relation := newMockRelation(123) 53 s.st.relations["remote-db2:db django:db"] = db2Relation 54 55 result, err := s.api.WatchIngressAddressesForRelations( 56 params.Entities{Entities: []params.Entity{{ 57 Tag: names.NewRelationTag("remote-db2:db django:db").String(), 58 }}}) 59 c.Assert(err, jc.ErrorIsNil) 60 c.Assert(result.Results, gc.HasLen, 1) 61 c.Assert(result.Results[0].Changes, jc.SameContents, []string{"1.2.3.4/32"}) 62 c.Assert(result.Results[0].Error, gc.IsNil) 63 c.Assert(result.Results[0].StringsWatcherId, gc.Equals, "1") 64 65 resource := s.resources.Get("1") 66 c.Assert(resource, gc.NotNil) 67 c.Assert(resource, gc.Implements, new(state.StringsWatcher)) 68 69 s.st.CheckCalls(c, []testing.StubCall{ 70 {"KeyRelation", []interface{}{"remote-db2:db django:db"}}, 71 }) 72 } 73 74 func (s *RemoteFirewallerSuite) TestControllerAPIInfoForModels(c *gc.C) { 75 controllerInfo := &mockControllerInfo{ 76 uuid: "some uuid", 77 info: crossmodel.ControllerInfo{ 78 Addrs: []string{"1.2.3.4/32"}, 79 CACert: coretesting.CACert, 80 }, 81 } 82 s.st.controllerInfo[coretesting.ModelTag.Id()] = controllerInfo 83 result, err := s.api.ControllerAPIInfoForModels( 84 params.Entities{Entities: []params.Entity{{ 85 Tag: coretesting.ModelTag.String(), 86 }}}) 87 c.Assert(err, jc.ErrorIsNil) 88 c.Assert(result.Results, gc.HasLen, 1) 89 c.Assert(result.Results[0].Addresses, jc.SameContents, []string{"1.2.3.4/32"}) 90 c.Assert(result.Results[0].Error, gc.IsNil) 91 c.Assert(result.Results[0].CACert, gc.Equals, coretesting.CACert) 92 } 93 94 func (s *RemoteFirewallerSuite) TestMacaroonForRelations(c *gc.C) { 95 mac, err := apitesting.NewMacaroon("apimac") 96 c.Assert(err, jc.ErrorIsNil) 97 entity := names.NewRelationTag("mysql:db wordpress:db") 98 s.st.macaroons[entity] = mac 99 result, err := s.api.MacaroonForRelations( 100 params.Entities{Entities: []params.Entity{{ 101 Tag: entity.String(), 102 }}}) 103 c.Assert(err, jc.ErrorIsNil) 104 c.Assert(result.Results, gc.HasLen, 1) 105 c.Assert(result.Results[0].Error, gc.IsNil) 106 c.Assert(result.Results[0].Result, jc.DeepEquals, mac) 107 } 108 109 func (s *RemoteFirewallerSuite) TestSetRelationStatus(c *gc.C) { 110 db2Relation := newMockRelation(123) 111 s.st.relations["remote-db2:db django:db"] = db2Relation 112 entity := names.NewRelationTag("remote-db2:db django:db") 113 result, err := s.api.SetRelationsStatus( 114 params.SetStatus{Entities: []params.EntityStatusArgs{{ 115 Tag: entity.String(), 116 Status: "suspended", 117 Info: "a message", 118 }}}) 119 c.Assert(err, jc.ErrorIsNil) 120 c.Assert(result.Results, gc.HasLen, 1) 121 c.Assert(result.Results[0].Error, gc.IsNil) 122 c.Assert(db2Relation.status, jc.DeepEquals, status.StatusInfo{Status: status.Suspended, Message: "a message"}) 123 } 124 125 func (s *RemoteFirewallerSuite) TestFirewallRules(c *gc.C) { 126 s.st.firewallRules[state.JujuApplicationOfferRule] = &state.FirewallRule{ 127 WellKnownService: state.JujuApplicationOfferRule, 128 WhitelistCIDRs: []string{"192.168.0.0/16"}, 129 } 130 result, err := s.api.FirewallRules(params.KnownServiceArgs{ 131 KnownServices: []params.KnownServiceValue{params.JujuApplicationOfferRule, params.SSHRule}}) 132 c.Assert(err, jc.ErrorIsNil) 133 c.Assert(result.Rules, gc.HasLen, 1) 134 c.Assert(result.Rules[0].KnownService, gc.Equals, params.KnownServiceValue("juju-application-offer")) 135 c.Assert(result.Rules[0].WhitelistCIDRS, jc.SameContents, []string{"192.168.0.0/16"}) 136 }