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  }