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_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_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_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