Exemplo n.º 1
0
def test_cleanup_via_t1(client, monkeypatch, adm_type_good, adm_instance_good):
    """
    create a type, create an instance, but no acks ever come in, delete instance
    """
    _put_ac_type(client, adm_type_good)

    a1rmr.replace_rcv_func(_fake_dequeue_none)

    _put_ac_instance(client, monkeypatch, adm_instance_good)
    """
    here we test the state transition diagram when it never goes into effect:
    1. not in effect, not deleted
    2. not in effect, deleted
    3. gone (timeout expires)
    """

    _verify_instance_and_status(client, adm_instance_good, "NOT IN EFFECT",
                                False)

    # delete the instance
    _delete_instance(client)

    _verify_instance_and_status(client, adm_instance_good, "NOT IN EFFECT",
                                True)

    # instance should be totally gone after a few seconds
    _instance_is_gone(client)

    # delete the type
    _delete_ac_type(client)
Exemplo n.º 2
0
def test_bad_instances(client, monkeypatch, adm_type_good):
    """
    test various failure modes
    """
    # put the type (needed for some of the tests below)
    rmr_mocks.patch_rmr(monkeypatch)
    res = client.put(ADM_CTRL_TYPE, json=adm_type_good)
    assert res.status_code == 201

    # bad body
    res = client.put(ADM_CTRL_INSTANCE, json={"not": "expected"})
    assert res.status_code == 400

    # bad media type
    res = client.put(ADM_CTRL_INSTANCE, data="notajson")
    assert res.status_code == 415

    # delete a non existent instance
    res = client.delete(ADM_CTRL_INSTANCE + "DARKNESS")
    assert res.status_code == 404

    # get a non existent instance
    a1rmr.replace_rcv_func(_fake_dequeue)
    res = client.get(ADM_CTRL_INSTANCE + "DARKNESS")
    assert res.status_code == 404

    # delete the type (as cleanup)
    res = client.delete(ADM_CTRL_TYPE)
    assert res.status_code == 204
Exemplo n.º 3
0
def test_bad_instances(client, monkeypatch, adm_type_good):
    """
    test various failure modes
    """
    # put the type (needed for some of the tests below)
    rmr_mocks.patch_rmr(monkeypatch)
    res = client.put(ADM_CTRL_TYPE, json=adm_type_good)
    assert res.status_code == 201

    # bad body
    res = client.put(ADM_CTRL_INSTANCE, json={"not": "expected"})
    assert res.status_code == 400

    # bad media type
    res = client.put(ADM_CTRL_INSTANCE, data="notajson")
    assert res.status_code == 415

    # delete a non existent instance
    res = client.delete(ADM_CTRL_INSTANCE + "DARKNESS")
    assert res.status_code == 404

    # get a non existent instance
    a1rmr.replace_rcv_func(_fake_dequeue)
    res = client.get(ADM_CTRL_INSTANCE + "DARKNESS")
    assert res.status_code == 404

    # delete the type (as cleanup)
    res = client.delete(ADM_CTRL_TYPE)
    assert res.status_code == 204

    # test 503 handlers

    def monkey_set(ns, key, value):
        # set a key override function that throws sdl errors on certain keys
        if key == "a1.policy_type.111":
            raise RejectedByBackend()
        if key == "a1.policy_type.112":
            raise NotConnected()
        if key == "a1.policy_type.113":
            raise BackendError()

    monkeypatch.setattr("a1.data.SDL.set", monkey_set)

    def create_alt_id(json, id):
        """
        Overwrites the json's policy type ID, attempts create and tests for 503
        """
        json['policy_type_id'] = id
        url = "/a1-p/policytypes/{0}".format(id)
        res = client.put(url, json=json)
        assert res.status_code == 503

    create_alt_id(adm_type_good, 111)
    create_alt_id(adm_type_good, 112)
    create_alt_id(adm_type_good, 113)
Exemplo n.º 4
0
def test_workflow(client, monkeypatch, adm_type_good, adm_instance_good):
    """
    test a full A1 workflow
    """

    # put type and instance
    _put_ac_type(client, adm_type_good)
    _put_ac_instance(client, monkeypatch, adm_instance_good)
    """
    we test the state transition diagram of all 5 states here;
    1. not in effect, not deleted
    2. in effect, not deleted
    3. in effect, deleted
    4. not in effect, deleted
    5. gone (timeout expires)
    """

    # try a status get but we didn't get any ACKs yet to test NOT IN EFFECT
    _verify_instance_and_status(client, adm_instance_good, "NOT IN EFFECT",
                                False)

    # now pretend we did get a good ACK
    a1rmr.replace_rcv_func(_fake_dequeue)
    _verify_instance_and_status(client, adm_instance_good, "IN EFFECT", False)

    # delete the instance
    _delete_instance(client)

    # status after a delete, but there are no messages yet, should still return
    _verify_instance_and_status(client, adm_instance_good, "IN EFFECT", True)

    # now pretend we deleted successfully
    a1rmr.replace_rcv_func(_fake_dequeue_deleted)

    # status should be reflected first (before delete triggers)
    _verify_instance_and_status(client, adm_instance_good, "NOT IN EFFECT",
                                True)

    # instance should be totally gone after a few seconds
    _instance_is_gone(client)

    # delete the type
    _delete_ac_type(client)