~ubuntu-branches/ubuntu/vivid/ceilometer/vivid

« back to all changes in this revision

Viewing changes to ceilometer/tests/alarm/evaluator/test_base.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2014-03-06 14:44:28 UTC
  • mto: (28.1.1 utopic-proposed) (1.2.1)
  • mto: This revision was merged to the branch mainline in revision 19.
  • Revision ID: package-import@ubuntu.com-20140306144428-rvphsh4igwyulzf0
Tags: upstream-2014.1~b3
ImportĀ upstreamĀ versionĀ 2014.1~b3

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
# under the License.
18
18
"""class for tests in ceilometer/alarm/evaluator/__init__.py
19
19
"""
 
20
import datetime
20
21
import mock
 
22
import pytz
21
23
 
22
24
from ceilometer.alarm import evaluator
23
25
from ceilometer.openstack.common import test
 
26
from ceilometer.openstack.common import timeutils
24
27
 
25
28
 
26
29
class TestEvaluatorBaseClass(test.BaseTestCase):
28
31
        super(TestEvaluatorBaseClass, self).setUp()
29
32
        self.called = False
30
33
 
31
 
    def _notify(self, alarm, previous, reason):
 
34
    def _notify(self, alarm, previous, reason, details):
32
35
        self.called = True
33
36
        raise Exception('Boom!')
34
37
 
42
45
 
43
46
        ev = EvaluatorSub(notifier)
44
47
        ev.api_client = mock.MagicMock()
45
 
        ev._refresh(mock.MagicMock(), mock.MagicMock(), mock.MagicMock())
 
48
        ev._refresh(mock.MagicMock(), mock.MagicMock(),
 
49
                    mock.MagicMock(), mock.MagicMock())
46
50
        self.assertTrue(self.called)
 
51
 
 
52
    def test_base_time_constraints(self):
 
53
        alarm = mock.MagicMock()
 
54
        alarm.time_constraints = [
 
55
            {'name': 'test',
 
56
             'description': 'test',
 
57
             'start': '0 11 * * *',  # daily at 11:00
 
58
             'duration': 10800,  # 3 hours
 
59
             'timezone': ''},
 
60
            {'name': 'test2',
 
61
             'description': 'test',
 
62
             'start': '0 23 * * *',  # daily at 23:00
 
63
             'duration': 10800,  # 3 hours
 
64
             'timezone': ''},
 
65
        ]
 
66
        cls = evaluator.Evaluator
 
67
        timeutils.set_time_override(datetime.datetime(2014, 1, 1, 12, 0, 0))
 
68
        self.assertTrue(cls.within_time_constraint(alarm))
 
69
 
 
70
        timeutils.set_time_override(datetime.datetime(2014, 1, 2, 1, 0, 0))
 
71
        self.assertTrue(cls.within_time_constraint(alarm))
 
72
 
 
73
        timeutils.set_time_override(datetime.datetime(2014, 1, 2, 5, 0, 0))
 
74
        self.assertFalse(cls.within_time_constraint(alarm))
 
75
 
 
76
    def test_base_time_constraints_complex(self):
 
77
        alarm = mock.MagicMock()
 
78
        alarm.time_constraints = [
 
79
            {'name': 'test',
 
80
             'description': 'test',
 
81
             # Every consecutive 2 minutes (from the 3rd to the 57th) past
 
82
             # every consecutive 2 hours (between 3:00 and 12:59) on every day.
 
83
             'start': '3-57/2 3-12/2 * * *',
 
84
             'duration': 30,
 
85
             'timezone': ''}
 
86
        ]
 
87
        cls = evaluator.Evaluator
 
88
 
 
89
        # test minutes inside
 
90
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 3, 0))
 
91
        self.assertTrue(cls.within_time_constraint(alarm))
 
92
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 31, 0))
 
93
        self.assertTrue(cls.within_time_constraint(alarm))
 
94
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 57, 0))
 
95
        self.assertTrue(cls.within_time_constraint(alarm))
 
96
 
 
97
        # test minutes outside
 
98
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 2, 0))
 
99
        self.assertFalse(cls.within_time_constraint(alarm))
 
100
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 4, 0))
 
101
        self.assertFalse(cls.within_time_constraint(alarm))
 
102
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 58, 0))
 
103
        self.assertFalse(cls.within_time_constraint(alarm))
 
104
 
 
105
        # test hours inside
 
106
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 3, 31, 0))
 
107
        self.assertTrue(cls.within_time_constraint(alarm))
 
108
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 5, 31, 0))
 
109
        self.assertTrue(cls.within_time_constraint(alarm))
 
110
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 11, 31, 0))
 
111
        self.assertTrue(cls.within_time_constraint(alarm))
 
112
 
 
113
        # test hours outside
 
114
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 1, 31, 0))
 
115
        self.assertFalse(cls.within_time_constraint(alarm))
 
116
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 4, 31, 0))
 
117
        self.assertFalse(cls.within_time_constraint(alarm))
 
118
        timeutils.set_time_override(datetime.datetime(2014, 1, 5, 12, 31, 0))
 
119
        self.assertFalse(cls.within_time_constraint(alarm))
 
120
 
 
121
    def test_base_time_constraints_timezone(self):
 
122
        alarm = mock.MagicMock()
 
123
        alarm.time_constraints = [
 
124
            {'name': 'test',
 
125
             'description': 'test',
 
126
             'start': '0 11 * * *',  # daily at 11:00
 
127
             'duration': 10800,  # 3 hours
 
128
             'timezone': 'Europe/Ljubljana'}
 
129
        ]
 
130
        cls = evaluator.Evaluator
 
131
        dt_eu = datetime.datetime(2014, 1, 1, 12, 0, 0,
 
132
                                  tzinfo=pytz.timezone('Europe/Ljubljana'))
 
133
        dt_us = datetime.datetime(2014, 1, 1, 12, 0, 0,
 
134
                                  tzinfo=pytz.timezone('US/Eastern'))
 
135
        timeutils.set_time_override(dt_eu.astimezone(pytz.UTC))
 
136
        self.assertTrue(cls.within_time_constraint(alarm))
 
137
 
 
138
        timeutils.set_time_override(dt_us.astimezone(pytz.UTC))
 
139
        self.assertFalse(cls.within_time_constraint(alarm))