github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/logger/logger_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package logger_test
     5  
     6  import (
     7  	gc "launchpad.net/gocheck"
     8  
     9  	jujutesting "launchpad.net/juju-core/juju/testing"
    10  	"launchpad.net/juju-core/state"
    11  	"launchpad.net/juju-core/state/api"
    12  	"launchpad.net/juju-core/state/api/logger"
    13  	"launchpad.net/juju-core/state/testing"
    14  )
    15  
    16  type loggerSuite struct {
    17  	jujutesting.JujuConnSuite
    18  
    19  	// These are raw State objects. Use them for setup and assertions, but
    20  	// should never be touched by the API calls themselves
    21  	rawMachine *state.Machine
    22  	rawCharm   *state.Charm
    23  	rawService *state.Service
    24  	rawUnit    *state.Unit
    25  
    26  	logger *logger.State
    27  }
    28  
    29  var _ = gc.Suite(&loggerSuite{})
    30  
    31  func (s *loggerSuite) SetUpTest(c *gc.C) {
    32  	s.JujuConnSuite.SetUpTest(c)
    33  	var stateAPI *api.State
    34  	stateAPI, s.rawMachine = s.OpenAPIAsNewMachine(c)
    35  	// Create the logger facade.
    36  	s.logger = stateAPI.Logger()
    37  	c.Assert(s.logger, gc.NotNil)
    38  }
    39  
    40  func (s *loggerSuite) TestLoggingConfigWrongMachine(c *gc.C) {
    41  	config, err := s.logger.LoggingConfig("42")
    42  	c.Assert(err, gc.ErrorMatches, "permission denied")
    43  	c.Assert(config, gc.Equals, "")
    44  }
    45  
    46  func (s *loggerSuite) TestLoggingConfig(c *gc.C) {
    47  	config, err := s.logger.LoggingConfig(s.rawMachine.Tag())
    48  	c.Assert(err, gc.IsNil)
    49  	c.Assert(config, gc.Not(gc.Equals), "")
    50  }
    51  
    52  func (s *loggerSuite) setLoggingConfig(c *gc.C, loggingConfig string) {
    53  	err := testing.UpdateConfig(s.BackingState, map[string]interface{}{"logging-config": loggingConfig})
    54  	c.Assert(err, gc.IsNil)
    55  }
    56  
    57  func (s *loggerSuite) TestWatchLoggingConfig(c *gc.C) {
    58  	watcher, err := s.logger.WatchLoggingConfig(s.rawMachine.Tag())
    59  	c.Assert(err, gc.IsNil)
    60  	defer testing.AssertStop(c, watcher)
    61  	wc := testing.NewNotifyWatcherC(c, s.BackingState, watcher)
    62  	// Initial event
    63  	wc.AssertOneChange()
    64  
    65  	loggingConfig := "<root>=WARN;juju.log.test=DEBUG"
    66  	s.setLoggingConfig(c, loggingConfig)
    67  	// One change noticing the new version
    68  	wc.AssertOneChange()
    69  	// Setting the version to the same value doesn't trigger a change
    70  	s.setLoggingConfig(c, loggingConfig)
    71  	wc.AssertNoChange()
    72  
    73  	loggingConfig = loggingConfig + ";wibble=DEBUG"
    74  	s.setLoggingConfig(c, loggingConfig)
    75  	wc.AssertOneChange()
    76  	testing.AssertStop(c, watcher)
    77  	wc.AssertClosed()
    78  }