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
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)
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
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)
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)
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)
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)
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'
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'
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)
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)
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
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)
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
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