def test_removal_identifies_by_uid(): owner1 = copy.deepcopy(OWNER) owner2 = copy.deepcopy(OWNER) owner3 = copy.deepcopy(OWNER) owner1['kind'] = 'KindA' owner2['kind'] = 'KindA' owner3['kind'] = 'KindB' owner1['metadata']['name'] = 'name-a' owner2['metadata']['name'] = 'name-b' owner3['metadata']['name'] = 'name-b' owner1['metadata']['uid'] = 'uid-0' owner2['metadata']['uid'] = 'uid-0' owner3['metadata']['uid'] = 'uid-0' obj = {} # Three different owners added, but all have the same uid. # One is removed and only once, all must be gone (due to same uids). kopf.append_owner_reference(obj, owner=owner1) # assumed to work, tested above kopf.append_owner_reference(obj, owner=owner2) # assumed to work, tested above kopf.append_owner_reference(obj, owner=owner3) # assumed to work, tested above kopf.remove_owner_reference(obj, owner=owner1) # this one is being tested here assert len(obj['metadata']['ownerReferences']) == 0
def test_removal_from_kubernetes_model(kubernetes_model): kubernetes_model.metadata = None kopf.append_owner_reference(kubernetes_model, owner=Body(OWNER)) kopf.remove_owner_reference(kubernetes_model, owner=Body(OWNER)) assert kubernetes_model.metadata is not None assert kubernetes_model.metadata.owner_references is not None assert isinstance(kubernetes_model.metadata.owner_references, list) assert len(kubernetes_model.metadata.owner_references) == 0
def test_removal_from_pykube_object(pykube_object): del pykube_object.obj['metadata'] kopf.append_owner_reference(pykube_object, owner=Body(OWNER)) kopf.remove_owner_reference(pykube_object, owner=Body(OWNER)) assert 'metadata' in pykube_object.obj assert 'ownerReferences' in pykube_object.obj['metadata'] assert isinstance(pykube_object.obj['metadata']['ownerReferences'], list) assert len(pykube_object.obj['metadata']['ownerReferences']) == 0
def test_removal_from_dict(): obj = {} kopf.append_owner_reference(obj, owner=Body(OWNER)) # assumed to work, tested above kopf.remove_owner_reference(obj, owner=Body(OWNER)) # this one is being tested here assert 'metadata' in obj assert 'ownerReferences' in obj['metadata'] assert isinstance(obj['metadata']['ownerReferences'], list) assert len(obj['metadata']['ownerReferences']) == 0
def test_removal_from_multiple_objects(multicls): obj1 = {} obj2 = {} objs = multicls([obj1, obj2]) kopf.append_owner_reference(objs, owner=Body(OWNER)) # assumed to work, tested above kopf.remove_owner_reference(objs, owner=Body(OWNER)) # this one is being tested here assert 'metadata' in obj1 assert 'ownerReferences' in obj1['metadata'] assert isinstance(obj1['metadata']['ownerReferences'], list) assert len(obj1['metadata']['ownerReferences']) == 0 assert 'metadata' in obj2 assert 'ownerReferences' in obj2['metadata'] assert isinstance(obj2['metadata']['ownerReferences'], list) assert len(obj2['metadata']['ownerReferences']) == 0
def test_removal_distinguishes_by_uid(): owner1 = copy.deepcopy(OWNER) owner2 = copy.deepcopy(OWNER) owner3 = copy.deepcopy(OWNER) owner1['metadata']['uid'] = 'uid-a' owner2['metadata']['uid'] = 'uid-b' owner3['metadata']['uid'] = 'uid-c' obj = {} # Three very similar owners added, different only by uid. # One is removed, others must stay (even if kinds/names are the same). kopf.append_owner_reference(obj, owner=Body(owner1)) # assumed to work, tested above kopf.append_owner_reference(obj, owner=Body(owner2)) # assumed to work, tested above kopf.append_owner_reference(obj, owner=Body(owner3)) # assumed to work, tested above kopf.remove_owner_reference(obj, owner=Body(owner1)) # this one is being tested here uids = {ref['uid'] for ref in obj['metadata']['ownerReferences']} assert uids == {'uid-b', 'uid-c'}
def test_when_unset_for_owner_references_removal(): with pytest.raises(LookupError) as e: kopf.remove_owner_reference([]) assert 'Owner must be set explicitly' in str(e.value)
def test_when_set_for_owner_references_removal(owner): obj = {} kopf.append_owner_reference(obj) # assumed to work, tested above kopf.remove_owner_reference(obj) # this one is being tested here assert not obj['metadata']['ownerReferences']
def test_in_owner_reference_removal(): with pytest.raises(TypeError) as e: kopf.remove_owner_reference(object(), Body({})) assert "K8s object class is not supported" in str(e.value)