+ # no types at all
+ res = client.get("/a1-p/policytypes")
+ assert res.status_code == 200
+ assert res.json == []
+
+ # instance 404 because type not there yet
+ res = client.get(ADM_CTRL_POLICIES)
+ assert res.status_code == 404
+
+
+def _put_ac_type(client, typedef):
+ _no_ac(client)
+
+ # put the type
+ res = client.put(ADM_CTRL_TYPE, json=typedef)
+ assert res.status_code == 201
+
+ # cant replace types
+ res = client.put(ADM_CTRL_TYPE, json=typedef)
+ assert res.status_code == 400
+
+ # type there now
+ res = client.get(ADM_CTRL_TYPE)
+ assert res.status_code == 200
+ assert res.json == typedef
+
+ # type in type list
+ res = client.get("/a1-p/policytypes")
+ assert res.status_code == 200
+ assert res.json == [ADM_CRTL_TID]
+
+ # instance 200 but empty list
+ res = client.get(ADM_CTRL_POLICIES)
+ assert res.status_code == 200
+ assert res.json == []
+
+
+def _delete_ac_type(client):
+ res = client.delete(ADM_CTRL_TYPE)
+ assert res.status_code == 204
+
+ # cant get
+ res = client.get(ADM_CTRL_TYPE)
+ assert res.status_code == 404
+
+ # cant invoke delete on it again
+ res = client.delete(ADM_CTRL_TYPE)
+ assert res.status_code == 404
+
+ _no_ac(client)
+
+
+def _put_ac_instance(client, monkeypatch, instancedef):
+ # no instance there yet
+ res = client.get(ADM_CTRL_INSTANCE)
+ assert res.status_code == 404
+ res = client.get(ADM_CTRL_INSTANCE_STATUS)
+ assert res.status_code == 404
+
+ # create a good instance
+ _test_put_patch(monkeypatch)
+ res = client.put(ADM_CTRL_INSTANCE, json=instancedef)
+ assert res.status_code == 202
+
+ # replace is allowed on instances
+ res = client.put(ADM_CTRL_INSTANCE, json=instancedef)
+ assert res.status_code == 202
+
+ # instance 200 and in list
+ res = client.get(ADM_CTRL_POLICIES)
+ assert res.status_code == 200
+ assert res.json == [ADM_CTRL_IID]
+
+
+def _delete_instance(client):
+ # cant delete type until there are no instances
+ res = client.delete(ADM_CTRL_TYPE)
+ assert res.status_code == 400
+
+ # delete it
+ res = client.delete(ADM_CTRL_INSTANCE)
+ assert res.status_code == 202
+
+ # should be able to do multiple deletes until it's actually gone
+ res = client.delete(ADM_CTRL_INSTANCE)
+ assert res.status_code == 202
+
+
+def _instance_is_gone(client, seconds_to_try=10):
+ for _ in range(seconds_to_try):
+ # idea here is that we have to wait for the seperate thread to process the event
+ try:
+ res = client.get(ADM_CTRL_INSTANCE_STATUS)
+ assert res.status_code == 404
+ except AssertionError:
+ time.sleep(1)
+
+ res = client.get(ADM_CTRL_INSTANCE_STATUS)
+ assert res.status_code == 404
+
+ # list still 200 but no instance
+ res = client.get(ADM_CTRL_POLICIES)
+ assert res.status_code == 200
+ assert res.json == []
+
+ # cant get instance
+ res = client.get(ADM_CTRL_INSTANCE)
+ assert res.status_code == 404
+
+
+def _verify_instance_and_status(client, expected_instance, expected_status, expected_deleted, seconds_to_try=5):
+ # get the instance
+ res = client.get(ADM_CTRL_INSTANCE)
+ assert res.status_code == 200
+ assert res.json == expected_instance