1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
9
"gopkg.in/juju/names.v2"
11
"github.com/juju/juju/apiserver/common"
12
"github.com/juju/juju/apiserver/logger"
13
"github.com/juju/juju/apiserver/params"
14
apiservertesting "github.com/juju/juju/apiserver/testing"
15
jujutesting "github.com/juju/juju/juju/testing"
16
"github.com/juju/juju/state"
17
statetesting "github.com/juju/juju/state/testing"
20
type loggerSuite struct {
21
jujutesting.JujuConnSuite
23
// These are raw State objects. Use them for setup and assertions, but
24
// should never be touched by the API calls themselves
25
rawMachine *state.Machine
26
logger *logger.LoggerAPI
27
resources *common.Resources
28
authorizer apiservertesting.FakeAuthorizer
31
var _ = gc.Suite(&loggerSuite{})
33
func (s *loggerSuite) SetUpTest(c *gc.C) {
34
s.JujuConnSuite.SetUpTest(c)
35
s.resources = common.NewResources()
36
s.AddCleanup(func(_ *gc.C) { s.resources.StopAll() })
38
// Create a machine to work with
40
s.rawMachine, err = s.State.AddMachine("quantal", state.JobHostUnits)
41
c.Assert(err, jc.ErrorIsNil)
43
// The default auth is as the machine agent
44
s.authorizer = apiservertesting.FakeAuthorizer{
45
Tag: s.rawMachine.Tag(),
47
s.logger, err = logger.NewLoggerAPI(s.State, s.resources, s.authorizer)
48
c.Assert(err, jc.ErrorIsNil)
51
func (s *loggerSuite) TestNewLoggerAPIRefusesNonAgent(c *gc.C) {
52
// We aren't even a machine agent
53
anAuthorizer := s.authorizer
54
anAuthorizer.Tag = s.AdminUserTag(c)
55
endPoint, err := logger.NewLoggerAPI(s.State, s.resources, anAuthorizer)
56
c.Assert(endPoint, gc.IsNil)
57
c.Assert(err, gc.ErrorMatches, "permission denied")
60
func (s *loggerSuite) TestNewLoggerAPIAcceptsUnitAgent(c *gc.C) {
61
// We aren't even a machine agent
62
anAuthorizer := s.authorizer
63
anAuthorizer.Tag = names.NewUnitTag("germany/7")
64
endPoint, err := logger.NewLoggerAPI(s.State, s.resources, anAuthorizer)
65
c.Assert(err, jc.ErrorIsNil)
66
c.Assert(endPoint, gc.NotNil)
69
func (s *loggerSuite) TestWatchLoggingConfigNothing(c *gc.C) {
70
// Not an error to watch nothing
71
results := s.logger.WatchLoggingConfig(params.Entities{})
72
c.Assert(results.Results, gc.HasLen, 0)
75
func (s *loggerSuite) setLoggingConfig(c *gc.C, loggingConfig string) {
76
err := s.State.UpdateModelConfig(map[string]interface{}{"logging-config": loggingConfig}, nil, nil)
77
c.Assert(err, jc.ErrorIsNil)
78
envConfig, err := s.State.ModelConfig()
79
c.Assert(err, jc.ErrorIsNil)
80
c.Assert(envConfig.LoggingConfig(), gc.Equals, loggingConfig)
83
func (s *loggerSuite) TestWatchLoggingConfig(c *gc.C) {
84
args := params.Entities{
85
Entities: []params.Entity{{Tag: s.rawMachine.Tag().String()}},
87
results := s.logger.WatchLoggingConfig(args)
88
c.Assert(results.Results, gc.HasLen, 1)
89
c.Assert(results.Results[0].NotifyWatcherId, gc.Not(gc.Equals), "")
90
c.Assert(results.Results[0].Error, gc.IsNil)
91
resource := s.resources.Get(results.Results[0].NotifyWatcherId)
92
c.Assert(resource, gc.NotNil)
94
w := resource.(state.NotifyWatcher)
95
wc := statetesting.NewNotifyWatcherC(c, s.State, w)
98
newLoggingConfig := "<root>=WARN;juju.log.test=DEBUG;unit=INFO"
99
s.setLoggingConfig(c, newLoggingConfig)
102
statetesting.AssertStop(c, w)
106
func (s *loggerSuite) TestWatchLoggingConfigRefusesWrongAgent(c *gc.C) {
107
// We are a machine agent, but not the one we are trying to track
108
args := params.Entities{
109
Entities: []params.Entity{{Tag: "machine-12354"}},
111
results := s.logger.WatchLoggingConfig(args)
112
// It is not an error to make the request, but the specific item is rejected
113
c.Assert(results.Results, gc.HasLen, 1)
114
c.Assert(results.Results[0].NotifyWatcherId, gc.Equals, "")
115
c.Assert(results.Results[0].Error, gc.DeepEquals, apiservertesting.ErrUnauthorized)
118
func (s *loggerSuite) TestLoggingConfigForNoone(c *gc.C) {
119
// Not an error to request nothing, dumb, but not an error.
120
results := s.logger.LoggingConfig(params.Entities{})
121
c.Assert(results.Results, gc.HasLen, 0)
124
func (s *loggerSuite) TestLoggingConfigRefusesWrongAgent(c *gc.C) {
125
args := params.Entities{
126
Entities: []params.Entity{{Tag: "machine-12354"}},
128
results := s.logger.LoggingConfig(args)
129
c.Assert(results.Results, gc.HasLen, 1)
130
result := results.Results[0]
131
c.Assert(result.Error, gc.DeepEquals, apiservertesting.ErrUnauthorized)
134
func (s *loggerSuite) TestLoggingConfigForAgent(c *gc.C) {
135
newLoggingConfig := "<root>=WARN;juju.log.test=DEBUG;unit=INFO"
136
s.setLoggingConfig(c, newLoggingConfig)
138
args := params.Entities{
139
Entities: []params.Entity{{Tag: s.rawMachine.Tag().String()}},
141
results := s.logger.LoggingConfig(args)
142
c.Assert(results.Results, gc.HasLen, 1)
143
result := results.Results[0]
144
c.Assert(result.Error, gc.IsNil)
145
c.Assert(result.Result, gc.Equals, newLoggingConfig)