1
# Copyright 2011 OpenStack LLC.
4
# Licensed under the Apache License, Version 2.0 (the "License"); you may
5
# not use this file except in compliance with the License. You may obtain
6
# a copy of the License at
8
# http://www.apache.org/licenses/LICENSE-2.0
10
# Unless required by applicable law or agreed to in writing, software
11
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13
# License for the specific language governing permissions and limitations
16
Tests For PickledScheduler.
22
from cinder.openstack.common import jsonutils
23
from cinder.scheduler import scheduler_options
24
from cinder import test
27
class FakeSchedulerOptions(scheduler_options.SchedulerOptions):
28
def __init__(self, last_checked, now, file_old, file_now, data, filedata):
29
super(FakeSchedulerOptions, self).__init__()
30
# Change internals ...
31
self.last_modified = file_old
32
self.last_checked = last_checked
37
self._file_now = file_now
38
self._file_data = filedata
40
self.file_was_loaded = False
42
def _get_file_timestamp(self, filename):
45
def _get_file_handle(self, filename):
46
self.file_was_loaded = True
47
return StringIO.StringIO(self._file_data)
49
def _get_time_now(self):
53
class SchedulerOptionsTestCase(test.TestCase):
54
def test_get_configuration_first_time_no_flag(self):
56
now = datetime.datetime(2012, 1, 1, 1, 1, 1)
58
file_now = datetime.datetime(2012, 1, 1, 1, 1, 1)
60
data = dict(a=1, b=2, c=3)
61
jdata = jsonutils.dumps(data)
63
fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
65
self.assertEquals({}, fake.get_configuration())
66
self.assertFalse(fake.file_was_loaded)
68
def test_get_configuration_first_time_empty_file(self):
70
now = datetime.datetime(2012, 1, 1, 1, 1, 1)
72
file_now = datetime.datetime(2012, 1, 1, 1, 1, 1)
74
data = dict(a=1, b=2, c=3)
77
fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
79
self.assertEquals({}, fake.get_configuration('foo.json'))
80
self.assertTrue(fake.file_was_loaded)
82
def test_get_configuration_first_time_happy_day(self):
84
now = datetime.datetime(2012, 1, 1, 1, 1, 1)
86
file_now = datetime.datetime(2012, 1, 1, 1, 1, 1)
88
data = dict(a=1, b=2, c=3)
89
jdata = jsonutils.dumps(data)
91
fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
93
self.assertEquals(data, fake.get_configuration('foo.json'))
94
self.assertTrue(fake.file_was_loaded)
96
def test_get_configuration_second_time_no_change(self):
97
last_checked = datetime.datetime(2011, 1, 1, 1, 1, 1)
98
now = datetime.datetime(2012, 1, 1, 1, 1, 1)
99
file_old = datetime.datetime(2012, 1, 1, 1, 1, 1)
100
file_now = datetime.datetime(2012, 1, 1, 1, 1, 1)
102
data = dict(a=1, b=2, c=3)
103
jdata = jsonutils.dumps(data)
105
fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
107
self.assertEquals(data, fake.get_configuration('foo.json'))
108
self.assertFalse(fake.file_was_loaded)
110
def test_get_configuration_second_time_too_fast(self):
111
last_checked = datetime.datetime(2011, 1, 1, 1, 1, 1)
112
now = datetime.datetime(2011, 1, 1, 1, 1, 2)
113
file_old = datetime.datetime(2012, 1, 1, 1, 1, 1)
114
file_now = datetime.datetime(2013, 1, 1, 1, 1, 1)
116
old_data = dict(a=1, b=2, c=3)
117
data = dict(a=11, b=12, c=13)
118
jdata = jsonutils.dumps(data)
120
fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
122
self.assertEquals(old_data, fake.get_configuration('foo.json'))
123
self.assertFalse(fake.file_was_loaded)
125
def test_get_configuration_second_time_change(self):
126
last_checked = datetime.datetime(2011, 1, 1, 1, 1, 1)
127
now = datetime.datetime(2012, 1, 1, 1, 1, 1)
128
file_old = datetime.datetime(2012, 1, 1, 1, 1, 1)
129
file_now = datetime.datetime(2013, 1, 1, 1, 1, 1)
131
old_data = dict(a=1, b=2, c=3)
132
data = dict(a=11, b=12, c=13)
133
jdata = jsonutils.dumps(data)
135
fake = FakeSchedulerOptions(last_checked, now, file_old, file_now,
137
self.assertEquals(data, fake.get_configuration('foo.json'))
138
self.assertTrue(fake.file_was_loaded)