def test_analysis_update_tasks(): values = dict( id=1, tasks=[dict(id=1, message="1"), dict(id=2, message="2")], ) analysis = Analysis(**values) assert analysis.id == 1 assert analysis.tasks[0].id == 1 assert analysis.tasks[0].message == "1" assert analysis.tasks[1].id == 2 assert analysis.tasks[1].message == "2" values = dict( id=1, tasks=[dict(id=1, message="111"), dict(id=2, message="222")], ) analysis.update(**values) assert analysis.id == 1 assert analysis.tasks[0].id == 1 assert analysis.tasks[0].message == "111" assert analysis.tasks[1].id == 2 assert analysis.tasks[1].message == "222"
def test_subscribe_progress_for_finished(): values = dict( id=1, tasks=[ dict(id=1, status="successful"), dict(id=2, status="successful") ], ) analysis = Analysis(**values) with pytest.raises(VxCubeApiException): list(analysis.subscribe_progress())
def test_analysis_delete(): request = mock.Mock(return_value=None) with mock.patch("vxcube_api.raw_api.VxCubeApiRequest.request", new=request): raw_api = VxCubeRawApi(base_url="http://test", version=2.0) analysis = Analysis(id=42, _raw_api=raw_api) assert analysis.delete() request.assert_called_with(method="delete", url="http://test/api-2.0/analyses/42", params={}, headers={})
def test_analysis_download_sample(): request = mock.Mock(return_value=None) with mock.patch("vxcube_api.raw_api.VxCubeApiRequest.request", new=request): raw_api = VxCubeRawApi(base_url="http://test", version=2.0) analysis = Analysis(id=42, _raw_api=raw_api) analysis.download_sample(output_file="test_output") request.assert_called_with(method="get", url="http://test/api-2.0/analyses/42/sample", params={}, headers={}, output_file="test_output")
def test_subscribe_progress_with_connection_close(): values = dict( id=1, _raw_api=VxCubeRawApi(base_url="https://test", version=2.0), tasks=[dict(id=1, status="processing")], ) analysis = Analysis(**values) ws = mock.MagicMock() ws.send.side_effect = WebSocketConnectionClosedException() with mock.patch("websocket.WebSocket", return_value=ws), mock.patch("tortilla.Wrap.get", return_value={"id": 42}): list(analysis.subscribe_progress())
def test_analysis(): values = dict( id=1, sha1="sha1hash", sample_id=1, size=2342, format_name="exe", start_date="2018-04-08T15:16:23.420000+00:00", user_name="test_user", tasks=[dict(id=1, )], ) analysis = Analysis(**values) assert analysis.id == 1 assert analysis.sha1 == "sha1hash" assert analysis.sample_id == 1 assert analysis.size == 2342 assert analysis.format_name == "exe" assert analysis.start_date == datetime.datetime(2018, 4, 8, 15, 16, 23, 420000, tzinfo=tzutc()) assert analysis.user_name == "test_user" assert isinstance(analysis.tasks, list) assert isinstance(analysis.tasks[0], Task) assert analysis.tasks[0].id == 1
def test_analysis_cureit(): request = mock.Mock(return_value={"status": "processing", "retries": None}) with mock.patch("vxcube_api.raw_api.VxCubeApiRequest.request", new=request): raw_api = VxCubeRawApi(base_url="http://test", version=2.0) analysis = Analysis(id=42, _raw_api=raw_api) cureit = analysis.cureit() assert cureit.analysis_id == 42 assert cureit.status == "processing" assert cureit.retries is None assert cureit._raw_api is raw_api request.assert_called_with(method="get", url="http://test/api-2.0/analyses/42/cureit", params={}, headers={})
def test_subscribe_progress_with_https_scheme(): values = dict( id=1, _raw_api=VxCubeRawApi(base_url="https://test", version=2.0), tasks=[ dict(id=1, status="processing"), dict(id=2, status="processing") ], ) analysis = Analysis(**values) ws = mock.MagicMock() ws.__iter__.return_value = iter(["{\"message\": \"test\"}"]) with mock.patch("websocket.WebSocket", return_value=ws): with mock.patch("tortilla.Wrap.get", return_value={"id": 42}): assert list(analysis.subscribe_progress()) == [{"message": "test"}] assert analysis.id == 42 ws.connect.assert_called_with("wss://test/api-2.0/ws/progress", header={"Authorization": "api-key None"}) ws.send.assert_called_with("{\"analysis_id\": 1}") ws.close.assert_called_once()
def test_analysis_restart(): request = mock.Mock( return_value={"tasks": [{ "id": 23, "status": "processing" }]}) with mock.patch("vxcube_api.raw_api.VxCubeApiRequest.request", new=request): raw_api = VxCubeRawApi(base_url="http://test", version=2.0) analysis = Analysis(id=42, tasks=[{ "id": 23, "status": "failed" }], _raw_api=raw_api) assert analysis.restart() assert analysis.tasks[0].id == 23 assert analysis.tasks[0].status == "processing" request.assert_called_with(method="post", url="http://test/api-2.0/analyses/42/restart", params={}, headers={})
def test_analysis_progress(): values = dict(tasks=[ dict(id=1, status="in queue", progress=0), dict(id=2, status="processing", progress=35), dict( id=3, status="failed", ), dict(id=4, status="processing", progress=65) ], ) analysis = Analysis(**values) assert analysis.is_processing assert not analysis.is_finished assert analysis.total_progress == 50 # (0 + 35 + 100 + 65) / 4