Ejemplo n.º 1
0
def test_count_instances_for_two_sets(mocked_client, mocked_fetch_vmss,
                                      mocked_all_vmss_instances):

    # Arrange
    scale_sets = []
    scale_sets.append(vmss_provider.provide_scale_set())
    scale_sets.append(vmss_provider.provide_scale_set())
    mocked_fetch_vmss.return_value = scale_sets
    mocked_all_vmss_instances.return_value = [vmss_provider.provide_instance()]

    mocked_client.return_value = MockComputeManagementClient()

    count = count_instances(None, None)

    assert count == 2
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
def test_happily_fetch_empty_list_instances_with_empty_instance_filter(
        mocked_fetch_instances):
    mocked_fetch_instances.return_value = []
    scale_set = vmss_provider.provide_scale_set()

    result = fetch_instances(scale_set, None, None)
    assert len(result) == 0
Ejemplo n.º 4
0
def test_unhappily_fill_disk(mocked_command_run, mocked_command_prepare_path,
                             mocked_init_client, fetch_instances, fetch_vmss):
    # arrange mocks
    mocked_command_prepare_path.return_value = '/root/burn/hard'

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

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

    mocked_client = MockComputeManagementClient()
    mocked_init_client.return_value = mocked_client

    # act
    with pytest.raises(FailedActivity):
        fill_disk(vmss_filter="where name=='some_random_instance'",
                  duration=60,
                  size=1000,
                  path='/root/burn/hard',
                  configuration=configuration,
                  secrets=secrets)

    # assert
    fetch_vmss.assert_called_with("where name=='some_random_instance'",
                                  configuration, secrets)
    fetch_instances.assert_called_with(scale_set, None,
                                       mocked_init_client.return_value)
Ejemplo n.º 5
0
def test_stress_cpu(mocked_command_run, mocked_init_client, mocked_instances,
                    mocked_vmss):
    # arrange mocks
    scale_set = vmss_provider.provide_scale_set()
    scale_sets = [scale_set]
    instance = vmss_provider.provide_instance()
    instances = [instance]
    mocked_vmss.return_value = scale_sets
    mocked_instances.return_value = instances

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

    duration = 60

    client = MockComputeManagementClient()
    mocked_init_client.return_value = client

    # act
    stress_cpu(vmss_filter="where name=='some_random_instance'",
               duration=duration,
               configuration=configuration,
               secrets=secrets)

    # assert
    mocked_vmss.assert_called_with("where name=='some_random_instance'",
                                   configuration, secrets)
    mocked_instances.assert_called_with(scale_set, None,
                                        mocked_init_client.return_value)
    mocked_command_run.assert_called_with(scale_set['resourceGroup'],
                                          instance,
                                          parameters=ANY,
                                          client=client)
Ejemplo n.º 6
0
def test_fill_disk(mocked_command_run, mocked_command_prepare_path,
                   mocked_init_client, fetch_instances, fetch_vmss):
    # arrange mocks
    mocked_command_prepare_path.return_value = '/root/burn/hard'

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

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

    mocked_client = MockComputeManagementClient()
    mocked_init_client.return_value = mocked_client

    duration = 60

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

    # assert
    fetch_vmss.assert_called_with("where name=='some_random_instance'",
                                  configuration, secrets)
    fetch_instances.assert_called_with(scale_set, None,
                                       mocked_init_client.return_value)
    mocked_command_run.assert_called_with(scale_set['resourceGroup'],
                                          instance,
                                          parameters=ANY,
                                          client=mocked_client)
Ejemplo n.º 7
0
def test_network_latency(mocked_command_run, mocked_init_client,
                         mocked_fetch_instances, mocked_fetch_vmss):
    # arrange mocks
    scale_set = vmss_provider.provide_scale_set()
    instance = vmss_provider.provide_instance()
    mocked_fetch_vmss.return_value = [scale_set]
    mocked_fetch_instances.return_value = [instance]

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

    duration = 60

    mocked_client = MockComputeManagementClient()
    mocked_init_client.return_value = mocked_client

    # act
    network_latency(vmss_filter="where name=='some_random_instance'",
                    duration=duration,
                    delay=200,
                    jitter=50,
                    configuration=configuration,
                    secrets=secrets)

    # assert
    mocked_fetch_vmss.assert_called_with("where name=='some_random_instance'",
                                         configuration, secrets)
    mocked_fetch_instances.assert_called_with(scale_set, None,
                                              mocked_init_client.return_value)
    mocked_command_run.assert_called_with(scale_set['resourceGroup'],
                                          instance,
                                          parameters=ANY,
                                          client=mocked_client)
Ejemplo n.º 8
0
def test_happily_fetch_instances_with_instance_filter_for_instance0_or_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,
                             "where instance_id=='0' or instance_id=='2'",
                             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'
Ejemplo n.º 9
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'
Ejemplo n.º 10
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)
Ejemplo n.º 11
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'
Ejemplo n.º 12
0
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)
Ejemplo n.º 13
0
def test_count_instances(mocked_client, mocked_fetch_vmss,
                         mocked_all_vmss_instances):

    # Arrange
    mocked_fetch_vmss.return_value = [vmss_provider.provide_scale_set()]
    mocked_all_vmss_instances.return_value = [vmss_provider.provide_instance()]

    mocked_client.return_value = MockComputeManagementClient()

    count = count_instances(None, None)

    assert count == 1
Ejemplo n.º 14
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'
Ejemplo n.º 15
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)
Ejemplo n.º 16
0
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)
Ejemplo n.º 17
0
def test_sadly_fetch_instances_with_invalid_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(InterruptExecution) as x:
        fetch_instances(scale_set, "invalid filter query syntax", None)

        assert "invalid query" in x.value
Ejemplo n.º 18
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