def test_repr_JobResult_with_DiskJobResult(self, mocked_helper): """ verify that _repr_JobResult() called with DiskJobResult calls _repr_DiskJobResult """ result = DiskJobResult({}) helper = SessionSuspendHelper() helper._repr_JobResult(result) mocked_helper._repr_DiskJobResult.assertCalledOnceWith(result)
class SessionSuspendHelperTests(TestCase): """ Tests for various methods of SessionSuspendHelper """ def setUp(self): self.helper = SessionSuspendHelper() def test_repr_IOLogRecord(self): """ verify that the representation of IOLogRecord is okay """ record = IOLogRecord(0.0, "stdout", b"binary data") data = self.helper._repr_IOLogRecord(record) self.assertEqual(data, [0.0, "stdout", "YmluYXJ5IGRhdGE="]) @mock.patch('plainbox.impl.session.suspend.SessionSuspendHelper') def test_repr_JobResult_with_MemoryJobResult(self, mocked_helper): """ verify that _repr_JobResult() called with MemoryJobResult calls _repr_MemoryJobResult """ result = MemoryJobResult({}) helper = SessionSuspendHelper() helper._repr_JobResult(result) mocked_helper._repr_MemoryJobResult.assertCalledOnceWith(result) @mock.patch('plainbox.impl.session.suspend.SessionSuspendHelper') def test_repr_JobResult_with_DiskJobResult(self, mocked_helper): """ verify that _repr_JobResult() called with DiskJobResult calls _repr_DiskJobResult """ result = DiskJobResult({}) helper = SessionSuspendHelper() helper._repr_JobResult(result) mocked_helper._repr_DiskJobResult.assertCalledOnceWith(result) def test_repr_JobResult_with_junk(self): """ verify that _repr_JobResult() raises TypeError when called with something other than JobResult instances """ with self.assertRaises(TypeError): self.helper._repr_JobResult(None) def test_repr_SessionMetaData_empty_metadata(self): """ verify that representation of empty SessionMetaData is okay """ # all defaults with empty values data = self.helper._repr_SessionMetaData(SessionMetaData()) self.assertEqual(data, { 'title': None, 'flags': [], 'running_job_name': None }) def test_repr_SessionMetaData_typical_metadata(self): """ verify that representation of typical SessionMetaData is okay """ # no surprises here, just the same data copied over data = self.helper._repr_SessionMetaData(SessionMetaData( title='USB Testing session', flags=['incomplete'], running_job_name='usb/detect' )) self.assertEqual(data, { 'title': 'USB Testing session', 'flags': ['incomplete'], 'running_job_name': 'usb/detect', }) def test_repr_SessionState_empty_session(self): """ verify that representation of empty SessionState is okay """ data = self.helper._repr_SessionState(SessionState([])) self.assertEqual(data, { 'jobs': {}, 'results': {}, 'desired_job_list': [], 'metadata': { 'title': None, 'flags': [], 'running_job_name': None, }, }) def test_json_repr_has_version_field(self): """ verify that the json representation has the 'version' field """ data = self.helper._json_repr(SessionState([])) self.assertIn("version", data) def test_json_repr_current_version(self): """ verify what the version field is """ data = self.helper._json_repr(SessionState([])) self.assertEqual(data['version'], 1) def test_json_repr_stores_session_state(self): """ verify that the json representation has the 'session' field """ data = self.helper._json_repr(SessionState([])) self.assertIn("session", data) def test_suspend(self): """ verify that the suspend() method returns gzipped JSON representation """ data = self.helper.suspend(SessionState([])) # XXX: we cannot really test what the compressed data looks like # because apparently python3.2 gzip output is non-deterministic. # It seems to be an instance of the gzip bug that was fixed a few # years ago. # # I've filed a bug on python3.2 in Ubuntu and Python upstream project # https://bugs.launchpad.net/ubuntu/+source/python3.2/+bug/871083 # # In the meantime we can only test that we got bytes out self.assertIsInstance(data, bytes) # And that we can gzip uncompress them and get what we expected self.assertEqual(gzip.decompress(data), ( b'{"session":{"desired_job_list":[],"jobs":{},"metadata":' b'{"flags":[],"running_job_name":null,"title":null},"results":{}' b'},"version":1}'))