aodh/tests/agent/test_manager.py
Doug Hellmann b76f67d11f Publish and receive metering messages
bug 1004198
bug 1004200

- Set up the collector to receive the metering messages.
- Make the collector republish notifications as metering data.
- Add a "monitor" mode to tools/notificationclient.py to simply print
  the events without writing them to a file.
- Add a --topic flag to tools/notificationclient.py so it can be made
  to listen events other than notifications (for monitoring metering
  events).
- Change "counter_datetime" within the metering message to "timestamp"
  to be consistent with the notification message format.
- Add a configuration option to control the secret value for signing
  metering messages.
- Make the collector and agent daemon control topics more specific.
- Use the config setting to set the metering topic subscription.
- Set a short interval for polling to get more data for development
  testing.
- Log after successful load of pollsters instead of before attempt.

Change-Id: Iedfe26f8a4fa80d88cd0a76e5738001ba5689bdc
2012-05-25 19:31:58 -04:00

80 lines
2.3 KiB
Python

# -*- encoding: utf-8 -*-
#
# Copyright © 2012 New Dream Network, LLC (DreamHost)
#
# Author: Doug Hellmann <doug.hellmann@dreamhost.com>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Tests for ceilometer/agent/manager.py
"""
import datetime
from nova import context
from nova import rpc
from nova import test
from ceilometer.agent import manager
from ceilometer import counter
def test_load_plugins():
mgr = manager.AgentManager()
mgr.init_host()
assert mgr.pollsters, 'Failed to load any plugins'
return
class TestRunTasks(test.TestCase):
class Pollster:
counters = []
test_data = counter.Counter(
source='test',
type='test',
volume=1,
user_id='test',
project_id='test',
resource_id='test_run_tasks',
timestamp=datetime.datetime.utcnow().isoformat(),
duration=0,
resource_metadata={'name': 'Pollster',
},
)
def get_counters(self, manager, context):
self.counters.append((manager, context))
return [self.test_data]
def faux_notify(self, context, topic, msg):
self.notifications.append((topic, msg))
def setUp(self):
super(TestRunTasks, self).setUp()
self.notifications = []
self.stubs.Set(rpc, 'cast', self.faux_notify)
self.mgr = manager.AgentManager()
self.mgr.pollsters = [('test', self.Pollster())]
self.ctx = context.RequestContext("user", "project")
self.mgr.periodic_tasks(self.ctx)
def test_message(self):
assert self.Pollster.counters[0][1] is self.ctx
def test_notify(self):
assert len(self.notifications) == 2
def test_notify_topics(self):
topics = [n[0] for n in self.notifications]
assert topics == ['metering', 'metering.test']