def test_burn_io(mocked_command_run, mocked_command_prepare, fetch_instances,
                 fetch_vmss):
    # arrange mocks
    mocked_command_prepare.return_value = 'RunShellScript', 'burn_io.sh'

    scale_set = vmss_provider.provide_scale_set()
    scale_sets = [scale_set]
    instance = vmss_provider.provide_instance()
    instances = [instance]
    fetch_vmss.return_value = scale_sets
    fetch_instances.return_value = instances

    config = config_provider.provide_default_config()
    secrets = secrets_provider.provide_secrets_via_service_principal()

    # act
    burn_io(filter="where name=='some_random_instance'",
            duration=60,
            configuration=config,
            secrets=secrets)

    # assert
    fetch_vmss.assert_called_with("where name=='some_random_instance'", config,
                                  secrets)
    fetch_instances.assert_called_with(scale_set, None, config, secrets)
    mocked_command_run.assert_called_with(
        scale_set['resourceGroup'], instance, 120, {
            'command_id': 'RunShellScript',
            'script': ['burn_io.sh'],
            'parameters': [{
                'name': 'duration',
                'value': 60
            }]
        }, secrets, config)
예제 #2
0
def test_succesful_fetch_instances_with_instance_criteria_for_instance0_instance_2(
        mocked_fetch_instances):
    # arrange
    instance_0 = vmss_provider.provide_instance()
    instance_0['instance_id'] = '0'
    instance_0['name'] = 'chaos-pool_0'
    instance_1 = vmss_provider.provide_instance()
    instance_1['instance_id'] = '1'
    instance_1['name'] = 'chaos-pool_1'
    instance_2 = vmss_provider.provide_instance()
    instance_2['instance_id'] = '2'
    instance_2['name'] = 'chaos-pool_2'
    instances = [instance_0, instance_1, instance_2]
    mocked_fetch_instances.return_value = instances
    scale_set = vmss_provider.provide_scale_set()

    # fire
    result = fetch_instances(scale_set, [{
        'instance_id': '0'
    }, {
        'instance_id': '2'
    }], None, None)

    # assert
    assert len(result) == 2
    assert result[0].get('name') == 'chaos-pool_0'
    assert result[0].get('instance_id') == '0'
    assert result[1].get('name') == 'chaos-pool_2'
    assert result[1].get('instance_id') == '2'
예제 #3
0
def test_empty_fetch_instances_without_instance_criteria(
        mocked_fetch_instances):
    with pytest.raises(FailedActivity) as x:
        mocked_fetch_instances.return_value = []
        scale_set = vmss_provider.provide_scale_set()

        fetch_instances(scale_set, None, None, None)

        assert "No VMSS instances" in str(x.value)
예제 #4
0
def test_succesful_fetch_vmss(mocked_fetch_vmss):
    scale_set = vmss_provider.provide_scale_set()
    scale_sets = [scale_set]
    mocked_fetch_vmss.return_value = scale_sets

    result = fetch_vmss(None, None, None)

    assert len(result) == 1
    assert result[0].get('name') == 'chaos-pool'
def test_delete_vmss(client, fetch_instances, fetch_vmss):
    scale_set = vmss_provider.provide_scale_set()
    scale_sets = [scale_set]
    instance = vmss_provider.provide_instance()
    instances = [instance]
    fetch_vmss.return_value = scale_sets
    fetch_instances.return_value = instances

    client.return_value = MockComputeManagementClient()

    delete_vmss(None, None, None)
예제 #6
0
def test_succesful_fetch_instances_without_instance_criteria(
        mocked_fetch_instances):
    instance = vmss_provider.provide_instance()
    instances = [instance]
    mocked_fetch_instances.return_value = instances

    scale_set = vmss_provider.provide_scale_set()

    result = fetch_instances(scale_set, None, None, None)

    assert len(result) == 1
    assert result[0].get('name') == 'chaos-pool_0'
    assert result[0].get('instance_id') == '0'
def test_fill_disk(mocked_command_run, mocked_command_prepare,
                   mocked_command_prepare_path, fetch_instances, fetch_vmss):
    # arrange mocks
    mocked_command_prepare.return_value = 'RunShellScript', 'fill_disk.sh'
    mocked_command_prepare_path.return_value = '/root/burn/hard'

    scale_set = vmss_provider.provide_scale_set()
    scale_sets = [scale_set]
    instance = vmss_provider.provide_instance()
    instances = [instance]
    fetch_vmss.return_value = scale_sets
    fetch_instances.return_value = instances

    config = config_provider.provide_default_config()
    secrets = secrets_provider.provide_secrets_via_service_principal()

    # act
    fill_disk(filter="where name=='some_random_instance'",
              duration=60,
              timeout=60,
              size=1000,
              path='/root/burn/hard',
              configuration=config,
              secrets=secrets)

    # assert
    fetch_vmss.assert_called_with("where name=='some_random_instance'", config,
                                  secrets)
    fetch_instances.assert_called_with(scale_set, None, config, secrets)
    mocked_command_run.assert_called_with(
        scale_set['resourceGroup'], instance, 120, {
            'command_id':
            'RunShellScript',
            'script': ['fill_disk.sh'],
            'parameters': [{
                'name': "duration",
                'value': 60
            }, {
                'name': "size",
                'value': 1000
            }, {
                'name': "path",
                'value': '/root/burn/hard'
            }]
        }, secrets, config)
def test_network_latency(mocked_command_run, mocked_command_prepare,
                         fetch_instances, fetch_vmss):
    # arrange mocks
    mocked_command_prepare.return_value = 'RunShellScript', 'network_latency.sh'

    scale_set = vmss_provider.provide_scale_set()
    scale_sets = [scale_set]
    instance = vmss_provider.provide_instance()
    instances = [instance]
    fetch_vmss.return_value = scale_sets
    fetch_instances.return_value = instances

    config = config_provider.provide_default_config()
    secrets = secrets_provider.provide_secrets_via_service_principal()

    # act
    network_latency(filter="where name=='some_random_instance'",
                    duration=60,
                    timeout=60,
                    delay=200,
                    jitter=50,
                    configuration=config,
                    secrets=secrets)

    # assert
    fetch_vmss.assert_called_with("where name=='some_random_instance'", config,
                                  secrets)
    fetch_instances.assert_called_with(scale_set, None, config, secrets)
    mocked_command_prepare.assert_called_with(instance, 'network_latency')
    mocked_command_run.assert_called_with(
        scale_set['resourceGroup'], instance, 120, {
            'command_id':
            'RunShellScript',
            'script': ['network_latency.sh'],
            'parameters': [{
                'name': "duration",
                'value': 60
            }, {
                'name': "delay",
                'value': 200
            }, {
                'name': "jitter",
                'value': 50
            }]
        }, secrets, config)
예제 #9
0
def test_empty_fetch_instances_with_instance_criteria(mocked_fetch_instances):
    # arrange
    instance_0 = vmss_provider.provide_instance()
    instance_0['instance_id'] = '0'
    instance_1 = vmss_provider.provide_instance()
    instance_1['instance_id'] = '1'
    instance_2 = vmss_provider.provide_instance()
    instance_2['instance_id'] = '2'
    instances = [instance_0, instance_1, instance_2]
    mocked_fetch_instances.return_value = instances
    scale_set = vmss_provider.provide_scale_set()

    # fire
    with pytest.raises(FailedActivity) as x:
        fetch_instances(scale_set, [{
            'instance_id': '99'
        }, {
            'instance_id': '100'
        }, {
            'instance_id': '101'
        }], None, None)

        assert "No VMSS instance" in x.value