Revision 4769da6b kamaki/cli/test.py
b/kamaki/cli/test.py | ||
---|---|---|
34 | 34 |
from unittest import makeSuite, TestSuite, TextTestRunner, TestCase |
35 | 35 |
from inspect import getmembers, isclass |
36 | 36 |
from tempfile import NamedTemporaryFile |
37 |
from mock import patch, call |
|
38 |
from itertools import product |
|
37 | 39 |
|
38 | 40 |
from kamaki.cli.command_tree.test import Command, CommandTree |
39 | 41 |
from kamaki.cli.argument.test import ( |
... | ... | |
131 | 133 |
self.assertEqual(history.retrieve(- i), sample_history[- i - 1]) |
132 | 134 |
|
133 | 135 |
|
136 |
class LoggerMethods(TestCase): |
|
137 |
|
|
138 |
class PseudoLogger(object): |
|
139 |
level = 'some level' |
|
140 |
_setLevel_calls = [] |
|
141 |
_addHandler_calls = [] |
|
142 |
|
|
143 |
def setLevel(self, *args): |
|
144 |
self._setLevel_calls.append(args) |
|
145 |
|
|
146 |
def addHandler(self, *args): |
|
147 |
self._addHandler_calls.append(args) |
|
148 |
|
|
149 |
class PseudoHandler(object): |
|
150 |
_setFormatter_calls = [] |
|
151 |
|
|
152 |
def setFormatter(self, *args): |
|
153 |
self._setFormatter_calls.append(args) |
|
154 |
|
|
155 |
def setUp(self): |
|
156 |
from kamaki.cli.logger import LOG_FILE, _blacklist |
|
157 |
self.LF, self.BL = list(LOG_FILE), dict(_blacklist) |
|
158 |
|
|
159 |
def tearDown(self): |
|
160 |
self.PseudoLogger._setLevel_calls = [] |
|
161 |
self.PseudoLogger._addHandler_calls = [] |
|
162 |
self.PseudoLogger._setFormatter_calls = [] |
|
163 |
from kamaki.cli.logger import LOG_FILE, _blacklist |
|
164 |
for e in LOG_FILE: |
|
165 |
LOG_FILE.pop() |
|
166 |
for e in self.LF: |
|
167 |
LOG_FILE.append(e) |
|
168 |
_blacklist.clear() |
|
169 |
_blacklist.update(self.BL) |
|
170 |
|
|
171 |
@patch('kamaki.cli.logger.logging.getLogger', return_value=PseudoLogger()) |
|
172 |
def test_deactivate(self, GL): |
|
173 |
from kamaki.cli.logger import deactivate, _blacklist |
|
174 |
self.assertEqual(_blacklist, {}) |
|
175 |
deactivate('some logger') |
|
176 |
GL.assert_called_once_with('some logger') |
|
177 |
self.assertEqual( |
|
178 |
_blacklist.get('some logger', None), self.PseudoLogger.level) |
|
179 |
from logging import CRITICAL |
|
180 |
self.assertEqual(self.PseudoLogger._setLevel_calls[-1], (CRITICAL, )) |
|
181 |
|
|
182 |
@patch('kamaki.cli.logger.logging.getLogger', return_value=PseudoLogger()) |
|
183 |
def test_activate(self, GL): |
|
184 |
from kamaki.cli.logger import activate |
|
185 |
activate('another logger') |
|
186 |
GL.assert_called_once_with('another logger') |
|
187 |
self.assertEqual( |
|
188 |
self.PseudoLogger._setLevel_calls[-1], (self.PseudoLogger.level, )) |
|
189 |
|
|
190 |
def test_get_log_filename(self): |
|
191 |
from kamaki.cli.logger import get_log_filename, LOG_FILE |
|
192 |
f = NamedTemporaryFile() |
|
193 |
for e in LOG_FILE: |
|
194 |
LOG_FILE.pop() |
|
195 |
LOG_FILE.append(f.name) |
|
196 |
self.assertEqual(get_log_filename(), f.name) |
|
197 |
LOG_FILE.pop() |
|
198 |
LOG_FILE.append(2 * f.name) |
|
199 |
print('\n Should print error msg here: ') |
|
200 |
self.assertEqual(get_log_filename(), None) |
|
201 |
|
|
202 |
def test_set_log_filename(self): |
|
203 |
from kamaki.cli.logger import set_log_filename, LOG_FILE |
|
204 |
for n in ('some name', 'some other name'): |
|
205 |
set_log_filename(n) |
|
206 |
self.assertEqual(LOG_FILE[0], n) |
|
207 |
|
|
208 |
@patch('kamaki.cli.logger.get_logger', return_value=PseudoLogger()) |
|
209 |
@patch('kamaki.cli.logger.logging.Formatter', return_value='f0rm4t') |
|
210 |
@patch( |
|
211 |
'kamaki.cli.logger.logging.StreamHandler', |
|
212 |
return_value=PseudoHandler()) |
|
213 |
@patch( |
|
214 |
'kamaki.cli.logger.logging.FileHandler', |
|
215 |
return_value=PseudoHandler()) |
|
216 |
def test__add_logger(self, FH, SH, F, GL): |
|
217 |
from kamaki.cli.logger import _add_logger |
|
218 |
from logging import DEBUG |
|
219 |
stdf, cnt = '%(name)s\n %(message)s', 0 |
|
220 |
for name, level, filename, fmt in product( |
|
221 |
('my logger', ), |
|
222 |
('my level', None), |
|
223 |
('my filename', None), |
|
224 |
('my fmt', None)): |
|
225 |
log = _add_logger(name, level, filename, fmt) |
|
226 |
self.assertTrue(isinstance(log, self.PseudoLogger)) |
|
227 |
self.assertEqual(GL.mock_calls[-1], call(name)) |
|
228 |
if filename: |
|
229 |
self.assertEqual(FH.mock_calls[-1], call(filename)) |
|
230 |
else: |
|
231 |
self.assertEqual(SH.mock_calls[-1], call()) |
|
232 |
self.assertEqual(F.mock_calls[-1], call(fmt or stdf)) |
|
233 |
self.assertEqual( |
|
234 |
self.PseudoHandler._setFormatter_calls[-1], ('f0rm4t', )) |
|
235 |
cnt += 1 |
|
236 |
self.assertEqual(len(self.PseudoLogger._addHandler_calls), cnt) |
|
237 |
h = self.PseudoLogger._addHandler_calls[-1] |
|
238 |
self.assertTrue(isinstance(h[0], self.PseudoHandler)) |
|
239 |
l = self.PseudoLogger._setLevel_calls[-1] |
|
240 |
self.assertEqual(l, (level or DEBUG, )) |
|
241 |
|
|
242 |
@patch('kamaki.cli.logger.get_log_filename', return_value='my log fname') |
|
243 |
@patch('kamaki.cli.logger.get_logger', return_value='my get logger ret') |
|
244 |
def test_add_file_logger(self, GL, GLF): |
|
245 |
from kamaki.cli.logger import add_file_logger |
|
246 |
with patch('kamaki.cli.logger._add_logger', return_value='AL') as AL: |
|
247 |
GLFcount = GLF.call_count |
|
248 |
for name, level, filename in product( |
|
249 |
('my name'), ('my level', None), ('my filename', None)): |
|
250 |
self.assertEqual(add_file_logger(name, level, filename), 'AL') |
|
251 |
self.assertEqual(AL.mock_calls[-1], call( |
|
252 |
name, level, filename or 'my log fname', |
|
253 |
fmt='%(name)s(%(levelname)s) %(asctime)s\n\t%(message)s')) |
|
254 |
if filename: |
|
255 |
self.assertEqual(GLFcount, GLF.call_count) |
|
256 |
else: |
|
257 |
GLFcount = GLF.call_count |
|
258 |
self.assertEqual(GLF.mock_calls[-1], call()) |
|
259 |
with patch('kamaki.cli.logger._add_logger', side_effect=Exception): |
|
260 |
self.assertEqual(add_file_logger('X'), 'my get logger ret') |
|
261 |
GL.assert_called_once_with('X') |
|
262 |
|
|
263 |
@patch('kamaki.cli.logger.get_logger', return_value='my get logger ret') |
|
264 |
def test_add_stream_logger(self, GL): |
|
265 |
from kamaki.cli.logger import add_stream_logger |
|
266 |
with patch('kamaki.cli.logger._add_logger', return_value='AL') as AL: |
|
267 |
for name, level, fmt in product( |
|
268 |
('my name'), ('my level', None), ('my fmt', None)): |
|
269 |
self.assertEqual(add_stream_logger(name, level, fmt), 'AL') |
|
270 |
self.assertEqual(AL.mock_calls[-1], call(name, level, fmt=fmt)) |
|
271 |
with patch('kamaki.cli.logger._add_logger', side_effect=Exception): |
|
272 |
self.assertEqual(add_stream_logger('X'), 'my get logger ret') |
|
273 |
GL.assert_called_once_with('X') |
|
274 |
|
|
275 |
@patch('kamaki.cli.logger.logging.getLogger', return_value=PseudoLogger()) |
|
276 |
def test_get_logger(self, GL): |
|
277 |
from kamaki.cli.logger import get_logger |
|
278 |
get_logger('my logger name') |
|
279 |
GL.assert_called_once_with('my logger name') |
|
280 |
|
|
281 |
|
|
134 | 282 |
# TestCase auxiliary methods |
135 | 283 |
|
136 | 284 |
def runTestCase(cls, test_name, args=[], failure_collector=[]): |
Also available in: Unified diff