Exemple #1
0
async def test_new_resources_and_namespaces_spawn_new_tasks(
        settings, ensemble: Ensemble, insights: Insights, peering_resource):
    settings.peering.namespaced = peering_resource.namespaced

    r1 = Resource(group='group1',
                  version='version1',
                  plural='plural1',
                  namespaced=True)
    r2 = Resource(group='group2',
                  version='version2',
                  plural='plural2',
                  namespaced=True)
    insights.resources.add(r1)
    insights.resources.add(r2)
    insights.namespaces.add('ns1')
    insights.namespaces.add('ns2')
    r1ns1 = EnsembleKey(resource=r1, namespace='ns1')
    r1ns2 = EnsembleKey(resource=r1, namespace='ns2')
    r2ns1 = EnsembleKey(resource=r2, namespace='ns1')
    r2ns2 = EnsembleKey(resource=r2, namespace='ns2')
    peer1 = EnsembleKey(resource=peering_resource, namespace='ns1')
    peer2 = EnsembleKey(resource=peering_resource, namespace='ns2')

    await adjust_tasks(
        processor=processor,
        identity=Identity('...'),
        settings=settings,
        insights=insights,
        ensemble=ensemble,
    )

    assert set(ensemble.watcher_tasks) == {r1ns1, r1ns2, r2ns1, r2ns2}
    assert set(ensemble.peering_tasks) == {peer1, peer2}
    assert set(ensemble.pinging_tasks) == {peer1, peer2}
    assert set(ensemble.freeze_toggles) == {peer1, peer2}
Exemple #2
0
async def test_discovery_is_cached_per_session(resp_mocker, aresponses,
                                               hostname):

    res1info = {'name': 'someresources1', 'namespaced': True}
    res2info = {'name': 'someresources2', 'namespaced': True}

    result = {'resources': [res1info]}
    list_mock = resp_mocker(return_value=aiohttp.web.json_response(result))
    aresponses.add(hostname, '/apis/some-group.org/someversion', 'get',
                   list_mock)

    result = {'resources': [res2info]}
    list_mock = resp_mocker(return_value=aiohttp.web.json_response(result))
    aresponses.add(hostname, '/apis/some-group.org/someversion', 'get',
                   list_mock)

    resource = Resource('some-group.org', 'someversion', 'someresources1')
    info = await discover(resource=resource)
    assert info == res1info

    resource = Resource('some-group.org', 'someversion', 'someresources2')
    info = await discover(resource=resource)
    assert info is None  # cached as absent on the 1st call.

    resource = Resource('some-group.org', 'someversion', 'someresources1')
    info = await discover(resource=resource)
    assert info == res1info
Exemple #3
0
async def insights(settings, resource):
    val_resource = Resource('admissionregistration.k8s.io', 'v1',
                            'validatingwebhookconfigurations')
    mut_resource = Resource('admissionregistration.k8s.io', 'v1',
                            'mutatingwebhookconfigurations')
    insights = Insights()
    insights.resources.add(resource)
    await insights.backbone.fill(resources=[val_resource, mut_resource])
    insights.ready_resources.set()
    return insights
Exemple #4
0
async def test_gone_resources_and_namespaces_stop_running_tasks(
        settings, ensemble: Ensemble, insights: Insights, peering_resource):
    settings.peering.namespaced = peering_resource.namespaced

    r1 = Resource(group='group1',
                  version='version1',
                  plural='plural1',
                  namespaced=True)
    r2 = Resource(group='group2',
                  version='version2',
                  plural='plural2',
                  namespaced=True)
    insights.resources.add(r1)
    insights.resources.add(r2)
    insights.namespaces.add('ns1')
    insights.namespaces.add('ns2')
    r1ns1 = EnsembleKey(resource=r1, namespace='ns1')
    r1ns2 = EnsembleKey(resource=r1, namespace='ns2')
    r2ns1 = EnsembleKey(resource=r2, namespace='ns1')
    r2ns2 = EnsembleKey(resource=r2, namespace='ns2')
    peer1 = EnsembleKey(resource=peering_resource, namespace='ns1')

    await adjust_tasks(  # initialisation
        processor=processor,
        identity=Identity('...'),
        settings=settings,
        insights=insights,
        ensemble=ensemble)

    r1ns2_task = ensemble.watcher_tasks[r1ns2]
    r2ns1_task = ensemble.watcher_tasks[r2ns1]
    r2ns2_task = ensemble.watcher_tasks[r2ns2]

    insights.resources.discard(r2)
    insights.namespaces.discard('ns2')

    await adjust_tasks(  # action-under-test
        processor=processor,
        identity=Identity('...'),
        settings=settings,
        insights=insights,
        ensemble=ensemble,
    )

    assert set(ensemble.watcher_tasks) == {r1ns1}
    assert set(ensemble.peering_tasks) == {peer1}
    assert set(ensemble.pinging_tasks) == {peer1}
    assert set(ensemble.freeze_toggles) == {peer1}
    assert r1ns2_task.cancelled()
    assert r2ns1_task.cancelled()
    assert r2ns2_task.cancelled()
Exemple #5
0
async def test_cluster_tasks_continue_running_on_namespace_deletion(
        settings, ensemble: Ensemble, insights: Insights, peering_resource):
    settings.peering.namespaced = peering_resource.namespaced

    r1 = Resource(group='group1',
                  version='version1',
                  plural='plural1',
                  namespaced=True)
    r2 = Resource(group='group2',
                  version='version2',
                  plural='plural2',
                  namespaced=True)
    insights.resources.add(r1)
    insights.resources.add(r2)
    insights.namespaces.add(None)
    r1nsN = EnsembleKey(resource=r1, namespace=None)
    r2nsN = EnsembleKey(resource=r2, namespace=None)
    peerN = EnsembleKey(resource=peering_resource, namespace=None)

    await adjust_tasks(  # initialisation
        processor=processor,
        identity=Identity('...'),
        settings=settings,
        insights=insights,
        ensemble=ensemble)

    r1nsN_task = ensemble.watcher_tasks[r1nsN]
    r2nsN_task = ensemble.watcher_tasks[r2nsN]

    insights.namespaces.discard(None)

    await adjust_tasks(  # action-under-test
        processor=processor,
        identity=Identity('...'),
        settings=settings,
        insights=insights,
        ensemble=ensemble,
    )

    assert set(ensemble.watcher_tasks) == {r1nsN, r2nsN}
    assert set(ensemble.peering_tasks) == {peerN}
    assert set(ensemble.pinging_tasks) == {peerN}
    assert set(ensemble.freeze_toggles) == {peerN}
    assert not r1nsN_task.cancelled()
    assert not r2nsN_task.cancelled()
    assert not r1nsN_task.done()
    assert not r2nsN_task.done()
Exemple #6
0
def test_creation_with_all_kwargs():
    resource = Resource(
        group='group',
        version='version',
        plural='plural',
    )
    assert resource.group == 'group'
    assert resource.version == 'version'
    assert resource.plural == 'plural'
Exemple #7
0
async def test_discovery_of_unexisting_group_or_version(
        resp_mocker, aresponses, hostname, status):

    list_mock = resp_mocker(return_value=aresponses.Response(status=status))
    aresponses.add(hostname, '/apis/some-group.org/someversion', 'get',
                   list_mock)

    resource = Resource('some-group.org', 'someversion', 'someresources')
    info = await discover(resource=resource)

    assert info is None
def resource():
    return Resource(
        group='group1',
        version='version1',
        preferred=True,
        plural='plural1',
        singular='singular1',
        kind='kind1',
        shortcuts=['shortcut1', 'shortcut2'],
        categories=['category1', 'category2'],
    )