github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/apiserver/rsyslog/rsyslog_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package rsyslog_test 5 6 import ( 7 "encoding/pem" 8 9 jc "github.com/juju/testing/checkers" 10 gc "launchpad.net/gocheck" 11 12 "github.com/juju/juju/instance" 13 "github.com/juju/juju/juju/testing" 14 "github.com/juju/juju/state" 15 "github.com/juju/juju/state/api/params" 16 apirsyslog "github.com/juju/juju/state/api/rsyslog" 17 "github.com/juju/juju/state/apiserver/common" 18 commontesting "github.com/juju/juju/state/apiserver/common/testing" 19 "github.com/juju/juju/state/apiserver/rsyslog" 20 apiservertesting "github.com/juju/juju/state/apiserver/testing" 21 coretesting "github.com/juju/juju/testing" 22 ) 23 24 type rsyslogSuite struct { 25 testing.JujuConnSuite 26 *commontesting.EnvironWatcherTest 27 authorizer apiservertesting.FakeAuthorizer 28 resources *common.Resources 29 rsyslog *rsyslog.RsyslogAPI 30 } 31 32 var _ = gc.Suite(&rsyslogSuite{}) 33 34 func (s *rsyslogSuite) SetUpTest(c *gc.C) { 35 s.JujuConnSuite.SetUpTest(c) 36 s.authorizer = apiservertesting.FakeAuthorizer{ 37 LoggedIn: true, 38 EnvironManager: true, 39 MachineAgent: true, 40 } 41 s.resources = common.NewResources() 42 api, err := rsyslog.NewRsyslogAPI(s.State, s.resources, s.authorizer) 43 c.Assert(err, gc.IsNil) 44 s.EnvironWatcherTest = commontesting.NewEnvironWatcherTest( 45 api, s.State, s.resources, commontesting.NoSecrets) 46 } 47 48 func verifyRsyslogCACert(c *gc.C, st *apirsyslog.State, expected string) { 49 cfg, err := st.GetRsyslogConfig("foo") 50 c.Assert(err, gc.IsNil) 51 c.Assert(cfg.CACert, gc.DeepEquals, expected) 52 } 53 54 func (s *rsyslogSuite) TestSetRsyslogCert(c *gc.C) { 55 st, m := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) 56 err := m.SetAddresses(instance.NewAddress("0.1.2.3", instance.NetworkUnknown)) 57 c.Assert(err, gc.IsNil) 58 59 err = st.Rsyslog().SetRsyslogCert(coretesting.CACert) 60 c.Assert(err, gc.IsNil) 61 verifyRsyslogCACert(c, st.Rsyslog(), coretesting.CACert) 62 } 63 64 func (s *rsyslogSuite) TestSetRsyslogCertNil(c *gc.C) { 65 st, m := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) 66 err := m.SetAddresses(instance.NewAddress("0.1.2.3", instance.NetworkUnknown)) 67 c.Assert(err, gc.IsNil) 68 69 err = st.Rsyslog().SetRsyslogCert("") 70 c.Assert(err, gc.ErrorMatches, "no certificates found") 71 verifyRsyslogCACert(c, st.Rsyslog(), "") 72 } 73 74 func (s *rsyslogSuite) TestSetRsyslogCertInvalid(c *gc.C) { 75 st, m := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) 76 err := m.SetAddresses(instance.NewAddress("0.1.2.3", instance.NetworkUnknown)) 77 c.Assert(err, gc.IsNil) 78 79 err = st.Rsyslog().SetRsyslogCert(string(pem.EncodeToMemory(&pem.Block{ 80 Type: "CERTIFICATE", 81 Bytes: []byte("not a valid certificate"), 82 }))) 83 c.Assert(err, gc.ErrorMatches, ".*structure error.*") 84 verifyRsyslogCACert(c, st.Rsyslog(), "") 85 } 86 87 func (s *rsyslogSuite) TestSetRsyslogCertPerms(c *gc.C) { 88 // create a machine-0 so we have an addresss to log to 89 m, err := s.State.AddMachine("trusty", state.JobManageEnviron) 90 c.Assert(err, gc.IsNil) 91 err = m.SetAddresses(instance.NewAddress("0.1.2.3", instance.NetworkUnknown)) 92 c.Assert(err, gc.IsNil) 93 94 unitState, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 95 err = unitState.Rsyslog().SetRsyslogCert(coretesting.CACert) 96 c.Assert(err, gc.ErrorMatches, "invalid entity name or password") 97 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 98 // Verify no change was effected. 99 verifyRsyslogCACert(c, unitState.Rsyslog(), "") 100 } 101 102 func (s *rsyslogSuite) TestUpgraderAPIAllowsUnitAgent(c *gc.C) { 103 anAuthorizer := s.authorizer 104 anAuthorizer.UnitAgent = true 105 anAuthorizer.MachineAgent = false 106 anUpgrader, err := rsyslog.NewRsyslogAPI(s.State, s.resources, anAuthorizer) 107 c.Check(err, gc.IsNil) 108 c.Check(anUpgrader, gc.NotNil) 109 } 110 111 func (s *rsyslogSuite) TestUpgraderAPIRefusesNonUnitNonMachineAgent(c *gc.C) { 112 anAuthorizer := s.authorizer 113 anAuthorizer.UnitAgent = false 114 anAuthorizer.MachineAgent = false 115 anUpgrader, err := rsyslog.NewRsyslogAPI(s.State, s.resources, anAuthorizer) 116 c.Check(err, gc.NotNil) 117 c.Check(anUpgrader, gc.IsNil) 118 c.Assert(err, gc.ErrorMatches, "permission denied") 119 }