Coverage for manila/tests/scheduler/test_scheduler_options.py: 100%

84 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2026-02-18 22:19 +0000

1# Copyright 2011 OpenStack LLC. 

2# All Rights Reserved. 

3# 

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 

7# 

8# http://www.apache.org/licenses/LICENSE-2.0 

9# 

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 

14# under the License. 

15""" 

16Tests For scheduler options. 

17""" 

18 

19import datetime 

20 

21from oslo_serialization import jsonutils 

22 

23from manila.scheduler import scheduler_options 

24from manila import test 

25 

26 

27class 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 

33 self.data = data 

34 

35 # For overrides ... 

36 self._time_now = now 

37 self._file_now = file_now 

38 self._file_data = filedata.encode("utf-8") 

39 

40 self.file_was_loaded = False 

41 

42 def _get_file_timestamp(self, filename): 

43 return self._file_now 

44 

45 def _get_file_handle(self, filename): 

46 self.file_was_loaded = True 

47 import io 

48 return io.BytesIO(self._file_data) 

49 

50 def _get_time_now(self): 

51 return self._time_now 

52 

53 

54class SchedulerOptionsTestCase(test.TestCase): 

55 def test_get_configuration_first_time_no_flag(self): 

56 last_checked = None 

57 now = datetime.datetime(2012, 1, 1, 1, 1, 1) 

58 file_old = None 

59 file_now = datetime.datetime(2012, 1, 1, 1, 1, 1) 

60 

61 data = dict(a=1, b=2, c=3) 

62 jdata = jsonutils.dumps(data) 

63 

64 fake = FakeSchedulerOptions(last_checked, now, file_old, file_now, 

65 {}, jdata) 

66 self.assertEqual({}, fake.get_configuration()) 

67 self.assertFalse(fake.file_was_loaded) 

68 

69 def test_get_configuration_first_time_empty_file(self): 

70 last_checked = None 

71 now = datetime.datetime(2012, 1, 1, 1, 1, 1) 

72 file_old = None 

73 file_now = datetime.datetime(2012, 1, 1, 1, 1, 1) 

74 

75 jdata = "" 

76 

77 fake = FakeSchedulerOptions(last_checked, now, file_old, file_now, 

78 {}, jdata) 

79 self.assertEqual({}, fake.get_configuration('foo.json')) 

80 self.assertTrue(fake.file_was_loaded) 

81 

82 def test_get_configuration_first_time_happy_day(self): 

83 last_checked = None 

84 now = datetime.datetime(2012, 1, 1, 1, 1, 1) 

85 file_old = None 

86 file_now = datetime.datetime(2012, 1, 1, 1, 1, 1) 

87 

88 data = dict(a=1, b=2, c=3) 

89 jdata = jsonutils.dumps(data) 

90 

91 fake = FakeSchedulerOptions(last_checked, now, file_old, file_now, 

92 {}, jdata) 

93 self.assertEqual(data, fake.get_configuration('foo.json')) 

94 self.assertTrue(fake.file_was_loaded) 

95 

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) 

101 

102 data = dict(a=1, b=2, c=3) 

103 jdata = jsonutils.dumps(data) 

104 

105 fake = FakeSchedulerOptions(last_checked, now, file_old, file_now, 

106 data, jdata) 

107 self.assertEqual(data, fake.get_configuration('foo.json')) 

108 self.assertFalse(fake.file_was_loaded) 

109 

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) 

115 

116 old_data = dict(a=1, b=2, c=3) 

117 data = dict(a=11, b=12, c=13) 

118 jdata = jsonutils.dumps(data) 

119 

120 fake = FakeSchedulerOptions(last_checked, now, file_old, file_now, 

121 old_data, jdata) 

122 self.assertEqual(old_data, fake.get_configuration('foo.json')) 

123 self.assertFalse(fake.file_was_loaded) 

124 

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) 

130 

131 old_data = dict(a=1, b=2, c=3) 

132 data = dict(a=11, b=12, c=13) 

133 jdata = jsonutils.dumps(data) 

134 

135 fake = FakeSchedulerOptions(last_checked, now, file_old, file_now, 

136 old_data, jdata) 

137 self.assertEqual(data, fake.get_configuration('foo.json')) 

138 self.assertTrue(fake.file_was_loaded)