github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/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 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/juju/testing" 12 "launchpad.net/juju-core/state" 13 "launchpad.net/juju-core/state/api/params" 14 apirsyslog "launchpad.net/juju-core/state/api/rsyslog" 15 "launchpad.net/juju-core/state/apiserver/common" 16 commontesting "launchpad.net/juju-core/state/apiserver/common/testing" 17 "launchpad.net/juju-core/state/apiserver/rsyslog" 18 apiservertesting "launchpad.net/juju-core/state/apiserver/testing" 19 coretesting "launchpad.net/juju-core/testing" 20 jc "launchpad.net/juju-core/testing/checkers" 21 ) 22 23 type rsyslogSuite struct { 24 testing.JujuConnSuite 25 *commontesting.EnvironWatcherTest 26 authorizer apiservertesting.FakeAuthorizer 27 resources *common.Resources 28 } 29 30 var _ = gc.Suite(&rsyslogSuite{}) 31 32 func (s *rsyslogSuite) SetUpTest(c *gc.C) { 33 s.JujuConnSuite.SetUpTest(c) 34 s.authorizer = apiservertesting.FakeAuthorizer{ 35 LoggedIn: true, 36 EnvironManager: true, 37 } 38 s.resources = common.NewResources() 39 api, err := rsyslog.NewRsyslogAPI(s.State, s.resources, s.authorizer) 40 c.Assert(err, gc.IsNil) 41 s.EnvironWatcherTest = commontesting.NewEnvironWatcherTest( 42 api, s.State, s.resources, commontesting.NoSecrets) 43 } 44 45 func verifyRsyslogCACert(c *gc.C, st *apirsyslog.State, expected []byte) { 46 cfg, err := st.EnvironConfig() 47 c.Assert(err, gc.IsNil) 48 c.Assert(cfg.RsyslogCACert(), gc.DeepEquals, expected) 49 } 50 51 func (s *rsyslogSuite) TestSetRsyslogCert(c *gc.C) { 52 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) 53 err := st.Rsyslog().SetRsyslogCert([]byte(coretesting.CACert)) 54 c.Assert(err, gc.IsNil) 55 verifyRsyslogCACert(c, st.Rsyslog(), []byte(coretesting.CACert)) 56 } 57 58 func (s *rsyslogSuite) TestSetRsyslogCertNil(c *gc.C) { 59 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) 60 err := st.Rsyslog().SetRsyslogCert(nil) 61 c.Assert(err, gc.ErrorMatches, "no certificates found") 62 verifyRsyslogCACert(c, st.Rsyslog(), nil) 63 } 64 65 func (s *rsyslogSuite) TestSetRsyslogCertInvalid(c *gc.C) { 66 st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron) 67 err := st.Rsyslog().SetRsyslogCert(pem.EncodeToMemory(&pem.Block{ 68 Type: "CERTIFICATE", 69 Bytes: []byte("not a valid certificate"), 70 })) 71 c.Assert(err, gc.ErrorMatches, ".*structure error.*") 72 verifyRsyslogCACert(c, st.Rsyslog(), nil) 73 } 74 75 func (s *rsyslogSuite) TestSetRsyslogCertPerms(c *gc.C) { 76 st, _ := s.OpenAPIAsNewMachine(c, state.JobHostUnits) 77 err := st.Rsyslog().SetRsyslogCert([]byte(coretesting.CACert)) 78 c.Assert(err, gc.ErrorMatches, "invalid entity name or password") 79 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 80 // Verify no change was effected. 81 verifyRsyslogCACert(c, st.Rsyslog(), nil) 82 }