Пример #1
0
def test_task_with_ayncio_loop_and_fuct_token_set_configuration():
    """Test spintest with a strict match on custom body."""
    httpretty.enable()
    httpretty.register_uri(
        httpretty.GET,
        "http://test.com/test",
        body=json.dumps({
            "a": "a",
            "b": "b",
            "c": "c"
        }),
        status=200,
    )
    loop = asyncio.new_event_loop()
    token_func = FakeCreatedToken()
    manager = TaskManager(
        ["http://test.com"],
        [{
            "method": "GET",
            "route": "/test"
        }, {
            "method": "GET",
            "route": "/test"
        }],
        token=token_func,
    )
    result = loop.run_until_complete(manager.next())
    assert "SUCCESS" == result["status"]
    assert token_func.call_count == 1
    result1 = loop.run_until_complete(manager.next())
    assert "SUCCESS" == result1["status"]
    assert token_func.call_count == 2

    httpretty.disable()
    httpretty.reset()
Пример #2
0
def test_task_next_async_failed():
    """Test spintest accessing with next asynchronously."""
    httpretty.enable()
    httpretty.register_uri(httpretty.GET, "http://foo.com/test")
    httpretty.register_uri(httpretty.GET, "http://bar.com/test", status=500)

    loop = asyncio.new_event_loop()
    manager = TaskManager(
        ["http://foo.com", "http://bar.com"],
        [{
            "method": "GET",
            "route": "/test"
        }],
        parallel=True,
    )
    results = loop.run_until_complete(manager.next())

    assert "SUCCESS" in [result["status"] for result in results]
    assert "FAILED" in [result["status"] for result in results]

    with pytest.raises(StopAsyncIteration):
        loop.run_until_complete(manager.next())

    httpretty.disable()
    httpretty.reset()
Пример #3
0
def test_rollback_multi_rollbacks_parallel():
    """Test spintest with multiple rollbacks parallel."""
    httpretty.enable()
    httpretty.register_uri(httpretty.POST, "http://test.com/test", status=201)
    httpretty.register_uri(httpretty.GET, "http://test.com/test", status=500)
    httpretty.register_uri(httpretty.DELETE,
                           "http://test.com/test",
                           status=500)
    httpretty.register_uri(httpretty.DELETE,
                           "http://test.com/test_2",
                           status=204)

    loop = asyncio.new_event_loop()
    manager = TaskManager(
        ["http://test.com"],
        [
            {
                "method": "POST",
                "route": "/test",
                "rollback": ["delete_test", "delete_test_2"],
            },
            {
                "method": "GET",
                "route": "/test"
            },
            {
                "name": "delete_test",
                "method": "DELETE",
                "route": "/test"
            },
            {
                "name": "delete_test_2",
                "method": "DELETE",
                "route": "/test_2"
            },
        ],
    )

    for _ in range(4):
        result = loop.run_until_complete(manager.next())

    assert result["name"] == "delete_test_2"
    assert result["ignore"] is True

    httpretty.disable()
    httpretty.reset()
Пример #4
0
def test_rollback_multi_urls():
    """Test spintest with rollback on multiple URLS."""
    httpretty.enable()
    httpretty.register_uri(httpretty.POST, "http://foo.com/test", status=201)
    httpretty.register_uri(httpretty.GET, "http://foo.com/test", status=500)
    httpretty.register_uri(httpretty.DELETE, "http://foo.com/test", status=204)
    httpretty.register_uri(httpretty.POST, "http://bar.com/test", status=201)
    httpretty.register_uri(httpretty.GET, "http://bar.com/test", status=200)
    httpretty.register_uri(httpretty.DELETE, "http://bar.com/test", status=204)

    loop = asyncio.new_event_loop()
    manager = TaskManager(
        ["http://foo.com", "http://bar.com"],
        [
            {
                "method": "POST",
                "route": "/test",
                "rollback": ["delete_test"]
            },
            {
                "method": "GET",
                "route": "/test"
            },
            {
                "name": "delete_test",
                "method": "DELETE",
                "route": "/test"
            },
        ],
    )

    for _ in range(3):
        result = loop.run_until_complete(manager.next())

    assert result["name"] == "delete_test"
    assert result["ignore"] is True

    for _ in range(3):
        result = loop.run_until_complete(manager.next())

    assert result["name"] == "delete_test"
    assert result["ignore"] is False

    httpretty.disable()
    httpretty.reset()
Пример #5
0
def test_task_with_token_token_is_not_visible_on_log():
    """Test spintest with a strict match on custom body."""
    TOKEN = str(uuid.uuid4())
    httpretty.enable()

    httpretty.register_uri(
        httpretty.GET,
        "http://test.com/test",
        body=json.dumps({
            "a": "a",
            "b": "b",
            "c": "c"
        }),
        status=200,
    )

    tasks = [{
        "method": "GET",
        "route": "/test",
        "expected": {
            "code": 200,
            "body": {
                "a": "a",
                "b": "b",
                "c": "c"
            },
            "expected_match": "strict",
        },
    }]

    loop = asyncio.get_event_loop()
    results = []
    manager = TaskManager(["http://test.com"], tasks, token=TOKEN)

    for i in range(len(tasks)):
        result = loop.run_until_complete(manager.next())
        results.append(result)

    assert TOKEN not in results[0]["task"]["headers"]["Authorization"]

    httpretty.disable()
    httpretty.reset()
Пример #6
0
def test_task_next():
    """Test spintest accessing with next."""
    httpretty.enable()
    httpretty.register_uri(httpretty.GET,
                           "http://test.com/test",
                           body=json.dumps({"foo": "bar"}))

    loop = asyncio.new_event_loop()
    manager = TaskManager(["http://test.com"], [{
        "method": "GET",
        "route": "/test"
    }])
    result = loop.run_until_complete(manager.next())

    assert "SUCCESS" == result["status"]
    assert "OK." == result["message"]
    assert 200 == result["code"]
    assert {"foo": "bar"} == result["body"]
    assert "http://test.com" == result["url"]
    assert "/test" == result["route"]
    # Because comparing floats is hard and is not the goal of this test
    result["task"]["duration_sec"] = 42.0
    assert {
        "method": "GET",
        "route": "/test",
        "headers": {
            "Accept": "application/json",
            "Content-Type": "application/json"
        },
        "retry": 0,
        "delay": 1,
        "ignore": False,
        "duration_sec": 42.0,
    } == result["task"]

    assert {"__token__": None} == result["output"]

    with pytest.raises(StopAsyncIteration):
        loop.run_until_complete(manager.next())

    httpretty.disable()
    httpretty.reset()
Пример #7
0
def test_two_tokens_are_generated_with_one_task_with_two_retry():
    httpretty.enable()
    httpretty.register_uri(
        httpretty.GET,
        "http://test.com/test",
        status=200,
        body=json.dumps({"status": "CREATED"}),
    )
    httpretty.register_uri(
        httpretty.GET,
        "http://test.com/test",
        status=200,
        body=json.dumps({"status": "CREATING"}),
    )
    loop = asyncio.new_event_loop()
    token_func = FakeCreatedToken()
    manager = TaskManager(
        ["http://test.com"],
        [{
            "method": "GET",
            "route": "/test",
            "expected": {
                "body": {
                    "status": "CREATED"
                }
            },
            "retry": 1,
        }],
        token=token_func,
    )
    result = loop.run_until_complete(manager.next())
    assert "SUCCESS" == result["status"]
    assert token_func.call_count == 2

    httpretty.disable()
    httpretty.reset()
Пример #8
0
        "expected": {
            "code": 201
        },
    },
    {
        "method": "GET",
        "route": "one_by_one/{{id['id']}}",
        "expected": {
            "body": {
                "one_by_one": payload
            }
        },
    },
]
loop = asyncio.get_event_loop()
manager = TaskManager(url, tasks)

fake_payload = {"toto": "FAKE"}


def read_file(id):
    with open(os.environ["HOME"] + "/tmp/meetup.txt", "r") as f:
        result = f.read()
        payload["id"] = id
        if result == str(payload):
            # if result == str(fake_payload):
            return True
        else:
            raise Exception