コード例 #1
0
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"
コード例 #2
0
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())
コード例 #3
0
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={})
コード例 #4
0
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")
コード例 #5
0
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())
コード例 #6
0
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
コード例 #7
0
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={})
コード例 #8
0
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()
コード例 #9
0
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={})
コード例 #10
0
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