Ejemplo n.º 1
0
def test_fixed_provider_picker(MockSiteSettingsCls):
    site_provider_id = bson.ObjectId()

    container = {
        '_id': 'test',
        'parents': {
            'group': bson.ObjectId(),
            'project': bson.ObjectId()
        }
    }

    # Mock site settings & container storage
    MockSiteSettings = Mock()
    MockSiteSettingsCls.return_value = MockSiteSettings

    picker = multiproject.create_provider_picker(False)

    # == No providers configured ==
    MockSiteSettings.get.return_value = None

    is_site, provider_id = picker.get_provider_id_for_container(
        container, 'compute')
    assert is_site == False
    assert provider_id is None

    assert picker.get_compute_provider_id_for_job({}, {}, []) == None

    # == Default provider configured ==
    MockSiteSettings.get.return_value = models.SiteSettings(
        center_gears=None, providers={'compute': site_provider_id})
    is_site, provider_id = picker.get_provider_id_for_container(
        container, 'compute')
    assert is_site == True
    assert provider_id == site_provider_id

    assert picker.get_compute_provider_id_for_job({}, {},
                                                  []) == site_provider_id
Ejemplo n.º 2
0
def test_multiproject_get_compute_provider_id_for_job(mock_cs_factory,
                                                      MockSiteSettingsCls):
    cls = models.ProviderClass.compute

    site_provider_id = bson.ObjectId()
    group_provider_id = bson.ObjectId()

    gear = {'gear': {'name': 'demo-gear'}}
    destination = {
        '_id': 'test',
        'parents': {
            'group': bson.ObjectId(),
            'project': bson.ObjectId()
        }
    }
    inputs = [{}, {'origin': {'type': 'device'}}]

    # Mock site settings & container storage
    MockSiteSettings = Mock()
    MockSiteSettingsCls.return_value = MockSiteSettings
    MockContainerStorage = Mock()
    mock_cs_factory.return_value = MockContainerStorage

    picker = multiproject.create_provider_picker(True)

    MockSiteSettings.get.return_value = None
    # == Invalid gear doc ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    with pytest.raises(errors.APIValidationException):
        picker.get_compute_provider_id_for_job({}, destination, [])

    # == Nothing configured ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  []) == None

    MockSiteSettings.get.return_value = models.SiteSettings(
        center_gears=None, providers={'compute': site_provider_id})
    # == Non-Center Gear, No Device, No Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  []) == None

    # == Non-Center Gear, With Device, No Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  inputs) == None

    # == Non-Center Gear, No Device, With Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group',
        'providers': {
            'compute': group_provider_id
        }
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  []) == group_provider_id

    # == Non-Center Gear, With Device, With Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group',
        'providers': {
            'compute': group_provider_id
        }
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  inputs) == group_provider_id

    MockSiteSettings.get.return_value = models.SiteSettings(
        center_gears=['demo-gear'], providers={'compute': site_provider_id})
    # == Center Gear, No Device, No Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  []) == None

    # == Center Gear, With Device, No Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  inputs) == site_provider_id

    # == Center Gear, No Device, With Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group',
        'providers': {
            'compute': group_provider_id
        }
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  []) == group_provider_id

    # == Center Gear, With Device, With Group Provider ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group',
        'providers': {
            'compute': group_provider_id
        }
    })
    assert picker.get_compute_provider_id_for_job(gear, destination,
                                                  inputs) == site_provider_id
Ejemplo n.º 3
0
def test_multiproject_get_provider_id_for_container(mock_cs_factory,
                                                    MockSiteSettingsCls):
    cls = models.ProviderClass.compute

    site_provider_id = bson.ObjectId()
    group_provider_id = bson.ObjectId()
    project_provider_id = bson.ObjectId()

    container = {
        '_id': 'test',
        'parents': {
            'group': bson.ObjectId(),
            'project': bson.ObjectId()
        }
    }

    # Mock site settings & container storage
    MockSiteSettings = Mock()
    MockSiteSettingsCls.return_value = MockSiteSettings
    MockContainerStorage = Mock()
    mock_cs_factory.return_value = MockContainerStorage

    picker = multiproject.create_provider_picker(True)

    # == No providers configured ==
    MockSiteSettings.get.return_value = None
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    is_site, provider_id = picker.get_provider_id_for_container(container, cls)
    assert is_site == False
    assert provider_id is None

    # == Site only ==
    MockSiteSettings.get.return_value = models.SiteSettings(
        center_gears=[], providers={'compute': site_provider_id})
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group'
    })
    is_site, provider_id = picker.get_provider_id_for_container(container, cls)
    assert is_site == True
    assert provider_id == site_provider_id

    # == Group ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project'
    }, {
        '_id': 'group',
        'providers': {
            'compute': group_provider_id
        }
    })
    is_site, provider_id = picker.get_provider_id_for_container(container, cls)
    assert is_site == False
    assert provider_id == group_provider_id

    # == Project ==
    MockContainerStorage.get_el.side_effect = ({
        '_id': 'project',
        'providers': {
            'compute': project_provider_id
        }
    }, {
        '_id': 'group',
        'providers': {
            'compute': group_provider_id
        }
    })
    is_site, provider_id = picker.get_provider_id_for_container(container, cls)
    assert is_site == False
    assert provider_id == project_provider_id