def test_events_for_deletion_via_event_type(registry): e1 = RawEvent(type=None, object=RawBody(metadata={'name': 'ns1'})) e2 = RawEvent(type='DELETED', object=RawBody(metadata={'name': 'ns1'})) insights = Insights() revise_namespaces(insights=insights, namespaces=['ns*'], raw_events=[e1]) revise_namespaces(insights=insights, namespaces=['ns*'], raw_events=[e2]) assert not insights.namespaces
def test_events_for_additional_population(registry): e1 = RawEvent(type=None, object=RawBody(metadata={'name': 'ns1'})) e2 = RawEvent(type=None, object=RawBody(metadata={'name': 'ns2'})) insights = Insights() revise_namespaces(insights=insights, namespaces=['ns*'], raw_events=[e1]) revise_namespaces(insights=insights, namespaces=['ns*'], raw_events=[e2]) assert insights.namespaces == {'ns1', 'ns2'}
def owner(request, resource): if request.param == 'state-changing-cause': cause = ResourceChangingCause( logger=logging.getLogger('kopf.test.fake.logger'), resource=resource, patch=Patch(), memo=ObjectDict(), body=Body(OWNER), initial=False, reason=Reason.NOOP, ) with context([(cause_var, cause)]): yield elif request.param == 'event-watching-cause': cause = ResourceWatchingCause( logger=logging.getLogger('kopf.test.fake.logger'), resource=resource, patch=Patch(), memo=ObjectDict(), body=Body(OWNER), type='irrelevant', raw=RawEvent(type='irrelevant', object=OWNER), ) with context([(cause_var, cause)]): yield else: raise RuntimeError( f"Wrong param for `owner` fixture: {request.param!r}")
async def test_followups_for_addition(timer, etype): insights = Insights() e1 = RawEvent(type=etype, object=RawBody(metadata={'name': 'ns1'})) async def delayed_injection(delay: float): await asyncio.sleep(delay) await process_discovered_namespace_event(insights=insights, raw_event=e1, namespaces=['ns*'], replenished=asyncio.Event()) task = asyncio.create_task(delayed_injection(0.1)) async with timer, async_timeout.timeout(1): async with insights.revised: await insights.revised.wait() await task assert 0.1 < timer.seconds < 0.11 assert insights.namespaces == {'ns1'}
async def test_backbone_is_filled(registry, core_mock, corev1_mock, timer, etype): e1 = RawEvent(type=etype, object=RawBody(spec={'group': ''})) insights = Insights() async def delayed_injection(delay: float): await asyncio.sleep(delay) await process_discovered_resource_event(insights=insights, raw_event=e1, registry=registry) task = asyncio.create_task(delayed_injection(0.1)) async with timer, async_timeout.timeout(1.0): await insights.backbone.wait_for(NAMESPACES) await task assert 0.1 < timer.seconds < 1.0 assert NAMESPACES in insights.backbone assert core_mock.called assert corev1_mock.called
async def test_initial_listing_is_ignored(): insights = Insights() e1 = RawEvent(type=None, object=RawBody(metadata={'name': 'ns1'})) async def delayed_injection(delay: float): await asyncio.sleep(delay) await process_discovered_namespace_event(insights=insights, raw_event=e1, namespaces=['ns*'], replenished=asyncio.Event()) task = asyncio.create_task(delayed_injection(0)) with pytest.raises(asyncio.TimeoutError): async with async_timeout.timeout(0.1) as timeout: async with insights.revised: await insights.revised.wait() await task assert timeout.expired assert not insights.namespaces
async def test_initial_listing_is_ignored(registry, apis_mock, group1_mock): insights = Insights() e1 = RawEvent(type=None, object=RawBody(spec={'group': 'group1'})) async def delayed_injection(delay: float): await asyncio.sleep(delay) await process_discovered_resource_event(insights=insights, raw_event=e1, registry=registry) task = asyncio.create_task(delayed_injection(0)) with pytest.raises(asyncio.TimeoutError): async with async_timeout.timeout(0.1) as timeout: async with insights.revised: await insights.revised.wait() await task assert timeout.expired assert not insights.resources assert not apis_mock.called assert not group1_mock.called
async def test_followups_for_addition(registry, apis_mock, group1_mock, timer, etype): e1 = RawEvent(type=etype, object=RawBody(spec={'group': 'group1'})) r1 = Resource(group='group1', version='version1', plural='plural1') insights = Insights() async def delayed_injection(delay: float): await asyncio.sleep(delay) await process_discovered_resource_event(insights=insights, raw_event=e1, registry=registry) task = asyncio.create_task(delayed_injection(0.1)) async with timer, async_timeout.timeout(1.0): async with insights.revised: await insights.revised.wait() await task assert 0.1 < timer.seconds < 1.0 assert insights.resources == {r1} assert apis_mock.called assert group1_mock.called
def test_events_ignored_for_mismatching(registry): e1 = RawEvent(type=None, object=RawBody(metadata={'name': 'def1'})) insights = Insights() revise_namespaces(insights=insights, namespaces=['ns*'], raw_events=[e1]) assert not insights.namespaces