1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
gc "launchpad.net/gocheck"
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"
23
type rsyslogSuite struct {
25
*commontesting.EnvironWatcherTest
26
authorizer apiservertesting.FakeAuthorizer
27
resources *common.Resources
30
var _ = gc.Suite(&rsyslogSuite{})
32
func (s *rsyslogSuite) SetUpTest(c *gc.C) {
33
s.JujuConnSuite.SetUpTest(c)
34
s.authorizer = apiservertesting.FakeAuthorizer{
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)
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)
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))
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)
65
func (s *rsyslogSuite) TestSetRsyslogCertInvalid(c *gc.C) {
66
st, _ := s.OpenAPIAsNewMachine(c, state.JobManageEnviron)
67
err := st.Rsyslog().SetRsyslogCert(pem.EncodeToMemory(&pem.Block{
69
Bytes: []byte("not a valid certificate"),
71
c.Assert(err, gc.ErrorMatches, ".*structure error.*")
72
verifyRsyslogCACert(c, st.Rsyslog(), nil)
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)