コード例 #1
0
    def test_get_phases_checks_status_on_first_call_and_returns_correct_value(self):
        self.conn.send_get_request.return_value = self.status_with({
            'phases': [
                {
                    'name': 'name1',
                    'part': 'part1',
                    'description': 'description1',
                    'completion': 1
                },
                {
                    'name': 'name2',
                    'part': 'part2',
                    'description': 'description2',
                    'completion': 2
                }
            ]
        })
        d = Decompilation('ID', self.conn)

        phases = d.get_phases()

        self.assertEqual(len(phases), 2)
        self.assertEqual(phases[0].name, 'name1')
        self.assertEqual(phases[1].name, 'name2')
        self.assert_get_request_was_sent_with('/ID/status')
コード例 #2
0
    def test_waits_until_cfg_is_generated(self):
        self.conn.send_get_request.side_effect = [
            self.status_with({
                'cfgs': {
                    'my_func': {
                        'generated': False,
                        'failed': False,
                        'error': None
                    }
                }
            }), self.status_with({
                'cfgs': {
                    'my_func': {
                        'generated': True,
                        'failed': False,
                        'error': None
                    }
                }
            })
        ]
        d = Decompilation('ID', self.conn)

        d.wait_until_cfg_is_generated('my_func')

        self.assertEqual(len(self.conn.send_get_request.mock_calls), 2)
コード例 #3
0
    def test_get_phases_checks_status_on_first_call_and_returns_correct_value(self):
        self.conn.send_get_request.return_value = self.status_with({
            'phases': [
                {
                    'name': 'name1',
                    'part': 'part1',
                    'description': 'description1',
                    'completion': 1,
                    'warnings': []
                },
                {
                    'name': 'name2',
                    'part': 'part2',
                    'description': 'description2',
                    'completion': 2,
                    'warnings': []
                }
            ]
        })
        d = Decompilation('ID', self.conn)

        phases = d.get_phases()

        self.assertEqual(len(phases), 2)
        self.assertEqual(phases[0].name, 'name1')
        self.assertEqual(phases[1].name, 'name2')
        self.assert_get_request_was_sent_with('/ID/status')
コード例 #4
0
    def test_waits_until_cfg_is_generated(self):
        self.conn.send_get_request.side_effect = [
            self.status_with({
                'cfgs': {
                    'my_func': {
                        'generated': False,
                        'failed': False,
                        'error': None
                    }
                }
            }), self.status_with({
                'cfgs': {
                    'my_func': {
                        'generated': True,
                        'failed': False,
                        'error': None
                    }
                }
            })
        ]
        d = Decompilation('ID', self.conn)

        d.wait_until_cfg_is_generated('my_func')

        self.assertEqual(len(self.conn.send_get_request.mock_calls), 2)
コード例 #5
0
    def test_does_not_raise_exception_when_on_failure_is_none(self):
        self.conn.send_get_request.return_value = self.status_with({
            'finished': True,
            'failed': True,
            'error': 'error message'
        })
        d = Decompilation('ID', self.conn)

        d.wait_until_finished(on_failure=None)
コード例 #6
0
    def test_does_not_raise_exception_when_on_failure_is_none(self):
        self.conn.send_get_request.return_value = self.status_with({
            'finished': True,
            'failed': True,
            'error': 'error message'
        })
        d = Decompilation('ID', self.conn)

        d.wait_until_finished(on_failure=None)
コード例 #7
0
    def test_does_not_raise_exception_when_on_failure_is_none(self):
        self.conn.send_get_request.return_value = self.status_with(
            {'archive': {
                'generated': False,
                'failed': True,
                'error': None
            }})
        d = Decompilation('ID', self.conn)

        d.wait_until_archive_is_generated(on_failure=None)
コード例 #8
0
    def test_get_completion_checks_status_on_first_call_and_returns_correct_value(self):
        self.conn.send_get_request.return_value = self.status_with({
            'completion': 20
        })
        d = Decompilation('ID', self.conn)

        completion = d.get_completion()

        self.assertEqual(completion, 20)
        self.assert_get_request_was_sent_with('/ID/status')
コード例 #9
0
    def test_archive_generation_has_finished_returns_true_when_generated(self):
        self.conn.send_get_request.return_value = self.status_with(
            {'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }})
        d = Decompilation('ID', self.conn)

        self.assertTrue(d.archive_generation_has_finished())
コード例 #10
0
    def test_get_archive_generation_error_returns_none_when_succeeded(self):
        self.conn.send_get_request.return_value = self.status_with(
            {'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }})
        d = Decompilation('ID', self.conn)

        self.assertIsNone(d.get_archive_generation_error())
コード例 #11
0
    def test_get_completion_checks_status_on_first_call_and_returns_correct_value(self):
        self.conn.send_get_request.return_value = self.status_with({
            'completion': 20
        })
        d = Decompilation('ID', self.conn)

        completion = d.get_completion()

        self.assertEqual(completion, 20)
        self.assert_get_request_was_sent_with('/ID/status')
コード例 #12
0
    def test_raises_exception_by_default_when_resource_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'finished': True,
            'failed': True,
            'error': 'error message'
        })
        d = Decompilation('ID', self.conn)

        with self.assertRaises(DecompilationFailedError) as cm:
            d.wait_until_finished()
        self.assertRegex(str(cm.exception), r'.*error message.*')
コード例 #13
0
    def test_returns_when_resource_is_finished(self):
        self.conn.send_get_request.return_value = self.status_with({
            'completion': 100,
            'finished': True,
            'succeeded': True
        })
        d = Decompilation('ID', self.conn)

        d.wait_until_finished()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #14
0
    def test_get_archive_generation_error_returns_correct_error_when_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertEqual(d.get_archive_generation_error(), 'error message')
コード例 #15
0
    def test_get_archive_generation_error_returns_none_when_succeeded(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertIsNone(d.get_archive_generation_error())
コード例 #16
0
    def test_returns_when_resource_is_finished(self):
        self.conn.send_get_request.return_value = self.status_with({
            'completion': 100,
            'finished': True,
            'succeeded': True
        })
        d = Decompilation('ID', self.conn)

        d.wait_until_finished()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #17
0
    def test_get_archive_generation_error_returns_correct_error_when_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertEqual(d.get_archive_generation_error(), 'error message')
コード例 #18
0
    def test_archive_generation_has_failed_returns_false_when_not_finished(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': False,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertFalse(d.archive_generation_has_failed())
コード例 #19
0
    def test_cg_generation_has_failed_returns_false_when_not_finished(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cg': {
                'generated': False,
                'failed': False,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertFalse(d.cg_generation_has_failed())
コード例 #20
0
    def test_cg_generation_has_failed_returns_false_when_succeeded(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cg': {
                'generated': True,
                'failed': False,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertFalse(d.cg_generation_has_failed())
コード例 #21
0
    def test_cg_generation_has_failed_returns_true_when_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cg': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertTrue(d.cg_generation_has_failed())
コード例 #22
0
    def test_archive_generation_has_succeeded_returns_false_when_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertFalse(d.archive_generation_has_succeeded())
コード例 #23
0
    def test_does_not_raise_exception_when_on_failure_is_none(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        d.wait_until_archive_is_generated(on_failure=None)
コード例 #24
0
    def test_raises_exception_by_default_when_resource_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'finished': True,
            'failed': True,
            'error': 'error message'
        })
        d = Decompilation('ID', self.conn)

        with self.assertRaises(DecompilationFailedError) as cm:
            d.wait_until_finished()
        self.assertRegex(str(cm.exception), r'.*error message.*')
コード例 #25
0
    def test_archive_generation_has_failed_returns_true_when_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertTrue(d.archive_generation_has_failed())
コード例 #26
0
    def test_calls_on_failure_when_it_is_callable(self):
        self.conn.send_get_request.return_value = self.status_with({
            'finished': True,
            'failed': True,
            'error': 'error message'
        })
        d = Decompilation('ID', self.conn)
        on_failure = mock.Mock()

        d.wait_until_finished(on_failure=on_failure)

        on_failure.assert_called_once_with('error message')
コード例 #27
0
    def test_calls_callback_when_resource_finishes(self):
        self.conn.send_get_request.return_value = self.status_with({
            'completion': 100,
            'finished': True,
            'succeeded': True
        })
        d = Decompilation('ID', self.conn)
        callback = mock.Mock()

        d.wait_until_finished(callback)

        callback.assert_called_once_with(d)
コード例 #28
0
    def test_archive_generation_has_finished_checks_status_on_first_call(self):
        self.conn.send_get_request.return_value = self.status_with(
            {'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }})
        d = Decompilation('ID', self.conn)

        d.archive_generation_has_finished()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #29
0
    def test_calls_callback_when_resource_finishes(self):
        self.conn.send_get_request.return_value = self.status_with({
            'completion': 100,
            'finished': True,
            'succeeded': True
        })
        d = Decompilation('ID', self.conn)
        callback = mock.Mock()

        d.wait_until_finished(callback)

        callback.assert_called_once_with(d)
コード例 #30
0
    def test_returns_when_archive_is_generated(self):
        self.conn.send_get_request.return_value = self.status_with(
            {'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }})
        d = Decompilation('ID', self.conn)

        d.wait_until_archive_is_generated()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #31
0
    def test_calls_on_failure_when_it_is_callable(self):
        self.conn.send_get_request.return_value = self.status_with({
            'finished': True,
            'failed': True,
            'error': 'error message'
        })
        d = Decompilation('ID', self.conn)
        on_failure = mock.Mock()

        d.wait_until_finished(on_failure=on_failure)

        on_failure.assert_called_once_with('error message')
コード例 #32
0
    def test_archive_generation_has_finished_checks_status_on_first_call(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        d.archive_generation_has_finished()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #33
0
    def test_raises_exception_by_default_when_generation_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        with self.assertRaises(ArchiveGenerationFailedError) as cm:
            d.wait_until_archive_is_generated()
        self.assertRegex(str(cm.exception), r'.*error message.*')
コード例 #34
0
    def test_cfg_generation_has_finished_returns_true_when_generated(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': True,
                    'failed': False,
                    'error': None
                }
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertTrue(d.cfg_generation_has_finished('my_func'))
コード例 #35
0
    def test_cfg_generation_has_failed_returns_false_when_succeeded(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': True,
                    'failed': False,
                    'error': None
                }
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertFalse(d.cfg_generation_has_failed('my_func'))
コード例 #36
0
    def test_get_cg_error_checks_status_on_first_call(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cg': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        d.get_cg_generation_error()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #37
0
    def test_raises_exception_by_default_when_generation_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        with self.assertRaises(ArchiveGenerationFailedError) as cm:
            d.wait_until_archive_is_generated()
        self.assertRegex(str(cm.exception), r'.*error message.*')
コード例 #38
0
    def test_returns_when_archive_is_generated(self):
        self.conn.send_get_request.return_value = self.status_with({
            'archive': {
                'generated': True,
                'failed': False,
                'error': None
            }
        })
        d = Decompilation('ID', self.conn)

        d.wait_until_archive_is_generated()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #39
0
    def test_get_cg_error_checks_status_on_first_call(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cg': {
                'generated': False,
                'failed': True,
                'error': 'error message'
            }
        })
        d = Decompilation('ID', self.conn)

        d.get_cg_generation_error()

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #40
0
    def test_cfg_generation_has_succeeded_returns_false_when_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': False,
                    'failed': True,
                    'error': 'error message'
                }
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertFalse(d.cfg_generation_has_succeeded('my_func'))
コード例 #41
0
    def test_cfg_generation_has_succeeded_checks_status_on_first_call(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': True,
                    'failed': False,
                    'error': None
                }
            }
        })
        d = Decompilation('ID', self.conn)

        d.cfg_generation_has_succeeded('my_func')

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #42
0
    def test_raises_exception_by_default_when_generation_failed(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': False,
                    'failed': True,
                    'error': 'error message'
                }
            }
        })
        d = Decompilation('ID', self.conn)

        with self.assertRaises(CFGGenerationFailedError) as cm:
            d.wait_until_cfg_is_generated('my_func')
        self.assertIn('error message', str(cm.exception))
コード例 #43
0
    def test_cfg_generation_has_succeeded_checks_status_on_first_call(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': True,
                    'failed': False,
                    'error': None
                }
            }
        })
        d = Decompilation('ID', self.conn)

        d.cfg_generation_has_succeeded('my_func')

        self.assert_get_request_was_sent_with('/ID/status')
コード例 #44
0
    def test_calls_on_failure_when_it_is_callable(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': False,
                    'failed': True,
                    'error': 'error message'
                }
            }
        })
        d = Decompilation('ID', self.conn)
        on_failure = mock.Mock()

        d.wait_until_cfg_is_generated('my_func', on_failure=on_failure)

        on_failure.assert_called_once_with('error message')
コード例 #45
0
 def test_save_binary_stores_file_to_directory_when_given(self):
     d = Decompilation('ID', self.conn)
     self.assert_obtains_and_saves_file(
         d.save_binary,
         '/ID/outputs/binary',
         directory='dir'
     )
コード例 #46
0
 def test_save_archive_stores_file_to_cwd_when_directory_is_not_given(self):
     d = Decompilation('ID', self.conn)
     self.assert_obtains_and_saves_file(
         d.save_archive,
         '/ID/outputs/archive',
         directory=None
     )
コード例 #47
0
 def test_save_cfg_stores_file_to_directory_when_given(self):
     d = Decompilation('ID', self.conn)
     self.assert_obtains_and_saves_file(
         functools.partial(d.save_cfg, 'my_func'),
         '/ID/outputs/cfgs/my_func',
         directory='dir'
     )
コード例 #48
0
 def test_get_dsm_code_obtains_file_contents(self):
     d = Decompilation('ID', self.conn)
     self.assert_obtains_file_contents(
         d.get_dsm_code,
         '/ID/outputs/dsm',
         is_text_file=True
     )
コード例 #49
0
    def test_calls_on_failure_when_it_is_callable(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func': {
                    'generated': False,
                    'failed': True,
                    'error': 'error message'
                }
            }
        })
        d = Decompilation('ID', self.conn)
        on_failure = mock.Mock()

        d.wait_until_cfg_is_generated('my_func', on_failure=on_failure)

        on_failure.assert_called_once_with('error message')
コード例 #50
0
    def test_get_phases_ignores_unknown_phase_attributes(self):
        self.conn.send_get_request.return_value = self.status_with({
            'phases': [{
                'name': 'name',
                'part': 'part',
                'description': 'description',
                'completion': 0,
                'unknown_attr': None  # This attribute is to be ignored.
            }]
        })
        d = Decompilation('ID', self.conn)

        phases = d.get_phases()

        self.assertEqual(len(phases), 1)
        self.assertFalse(hasattr(phases[0], 'unknown_attr'))
コード例 #51
0
    def test_get_phases_ignores_unknown_phase_attributes(self):
        self.conn.send_get_request.return_value = self.status_with({
            'phases': [
                {
                    'name': 'name',
                    'part': 'part',
                    'description': 'description',
                    'completion': 0,
                    'unknown_attr': None  # This attribute is to be ignored.
                }
            ]
        })
        d = Decompilation('ID', self.conn)

        phases = d.get_phases()

        self.assertEqual(len(phases), 1)
        self.assertFalse(hasattr(phases[0], 'unknown_attr'))
コード例 #52
0
    def test_calls_callback_when_resource_status_changes(self):
        self.conn.send_get_request.side_effect = [
            self.status_with({
                'completion': 0,
                'finished': False,
                'succeeded': False
            }), self.status_with({
                'completion': 15,
                'finished': False,
                'succeeded': False
            }), self.status_with({
                'completion': 100,
                'finished': True,
                'succeeded': True
            })
        ]
        d = Decompilation('ID', self.conn)
        callback = mock.Mock()

        d.wait_until_finished(callback)

        self.assertEqual(len(callback.mock_calls), 2)
コード例 #53
0
    def test_calls_callback_when_resource_status_changes(self):
        self.conn.send_get_request.side_effect = [
            self.status_with({
                'completion': 0,
                'finished': False,
                'succeeded': False
            }), self.status_with({
                'completion': 15,
                'finished': False,
                'succeeded': False
            }), self.status_with({
                'completion': 100,
                'finished': True,
                'succeeded': True
            })
        ]
        d = Decompilation('ID', self.conn)
        callback = mock.Mock()

        d.wait_until_finished(callback)

        self.assertEqual(len(callback.mock_calls), 2)
コード例 #54
0
    def test_funcs_with_cfg_returns_correct_value_when_cfgs_generation_requested(self):
        self.conn.send_get_request.return_value = self.status_with({
            'cfgs': {
                'my_func1': {
                    'generated': True,
                    'failed': False,
                    'error': None
                },
                'my_func2': {
                    'generated': False,
                    'failed': False,
                    'error': None
                }
            }
        })
        d = Decompilation('ID', self.conn)

        self.assertEqual(d.funcs_with_cfg, ['my_func1', 'my_func2'])