| |
@@ -1,8 +1,10 @@
|
| |
import copy
|
| |
+ import datetime
|
| |
import mock
|
| |
import unittest
|
| |
|
| |
import koji
|
| |
+ import koji.util
|
| |
import koji.plugin
|
| |
|
| |
|
| |
@@ -98,6 +100,14 @@
|
| |
self.callbacks.append([cbtype, args, kwargs])
|
| |
raise TestError
|
| |
|
| |
+ @koji.plugin.convert_datetime
|
| |
+ def datetime_callback(self, cbtype, *args, **kwargs):
|
| |
+ self.callbacks.append([cbtype, args, kwargs])
|
| |
+
|
| |
+ @koji.plugin.convert_datetime
|
| |
+ def datetime_callback2(self, cbtype, *args, **kwargs):
|
| |
+ self.callbacks.append([cbtype, args, kwargs])
|
| |
+
|
| |
def test_simple_callback(self):
|
| |
args = ('hello',)
|
| |
kwargs = {'world': 1}
|
| |
@@ -127,6 +137,47 @@
|
| |
getLogger.assert_called_once()
|
| |
getLogger.return_value.warn.assert_called_once()
|
| |
|
| |
+ def test_datetime_callback(self):
|
| |
+ dt1 = datetime.datetime.now()
|
| |
+ dt2 = datetime.datetime(2001,1,1)
|
| |
+ args = (dt1,"2",["three"], {4: dt2},)
|
| |
+ kwargs = {'foo': [dt1, dt2]}
|
| |
+ cbtype = 'preTag'
|
| |
+ koji.plugin.register_callback(cbtype, self.datetime_callback)
|
| |
+ koji.plugin.run_callbacks(cbtype, *args, **kwargs)
|
| |
+ args2 = koji.util.encode_datetime_recurse(args)
|
| |
+ kwargs2 = koji.util.encode_datetime_recurse(kwargs)
|
| |
+ self.assertEqual(len(self.callbacks), 1)
|
| |
+ self.assertEqual(self.callbacks[0], [cbtype, args2, kwargs2])
|
| |
+
|
| |
+ def test_multiple_datetime_callback(self):
|
| |
+ dt1 = datetime.datetime.now()
|
| |
+ dt2 = datetime.datetime(2001,1,1)
|
| |
+ args = (dt1,"2",["three"], {4: dt2},)
|
| |
+ kwargs = {'foo': [dt1, dt2]}
|
| |
+ cbtype = 'preTag'
|
| |
+ koji.plugin.register_callback(cbtype, self.datetime_callback)
|
| |
+ koji.plugin.register_callback(cbtype, self.datetime_callback2)
|
| |
+ koji.plugin.run_callbacks(cbtype, *args, **kwargs)
|
| |
+ args2 = koji.util.encode_datetime_recurse(args)
|
| |
+ kwargs2 = koji.util.encode_datetime_recurse(kwargs)
|
| |
+ self.assertEqual(len(self.callbacks), 2)
|
| |
+ self.assertEqual(self.callbacks[0], [cbtype, args2, kwargs2])
|
| |
+ self.assertEqual(self.callbacks[1], [cbtype, args2, kwargs2])
|
| |
+ # verify that caching worked
|
| |
+ # unfortunately, args and kwargs get unpacked and repacked, so we have
|
| |
+ # to dig down
|
| |
+ cb_args1 = self.callbacks[0][1]
|
| |
+ cb_args2 = self.callbacks[1][1]
|
| |
+ for i in range(len(cb_args1)):
|
| |
+ if cb_args1[i] is not cb_args2[i]:
|
| |
+ raise Exception("converted args not cached")
|
| |
+ cb_kwargs1 = self.callbacks[0][2]
|
| |
+ cb_kwargs2 = self.callbacks[1][2]
|
| |
+ for k in cb_kwargs1:
|
| |
+ if cb_kwargs1[k] is not cb_kwargs2[k]:
|
| |
+ raise Exception("converted kwargs not cached")
|
| |
+
|
| |
def test_bad_callback(self):
|
| |
args = ('hello',)
|
| |
kwargs = {'world': 1}
|
| |
Some plugins might not like the datetime objects that we now have internally on the hub (thanks to psycopg2). This provides the option to automatically convert them to strings (as they were before 1.12).
We use this option for the included protonmsg and messagebus plugins.