Merge "Update: assign static IP to VM for standalone"
[yardstick.git] / yardstick / tests / unit / benchmark / scenarios / availability / test_scenario_general.py
1 ##############################################################################
2 # Copyright (c) 2016 Huan Li and others
3 # lihuansse@tongji.edu.cn
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9
10 import mock
11 import unittest
12
13 from yardstick.benchmark.scenarios.availability import scenario_general
14 from yardstick.common import exceptions as y_exc
15
16
17 class ScenarioGeneralTestCase(unittest.TestCase):
18
19     @mock.patch.object(scenario_general, 'Director')
20     def setUp(self, *args):
21         self.scenario_cfg = {
22             'type': "general_scenario",
23             'options': {
24                 'attackers': [{
25                     'fault_type': "general-attacker",
26                     'key': "kill-process"}],
27                 'monitors': [{
28                     'monitor_type': "general-monitor",
29                     'key': "service-status"}],
30                 'steps': [
31                     {
32                         'actionKey': "kill-process",
33                         'actionType': "attacker",
34                         'index': 1},
35                     {
36                         'actionKey': "service-status",
37                         'actionType': "monitor",
38                         'index': 2}]
39             }
40         }
41         self.instance = scenario_general.ScenarioGeneral(self.scenario_cfg,
42                                                          None)
43         self.instance.setup()
44         self.instance.director.verify.return_value = True
45
46     def test_scenario_general_all_successful(self):
47         ret = {}
48         self.instance.run(ret)
49         self.instance.teardown()
50         self.assertEqual(ret['sla_pass'], 1)
51
52     @mock.patch.object(scenario_general.LOG, 'exception')
53     def test_scenario_general_exception(self, *args):
54         self.instance.director.createActionPlayer.side_effect = (
55             KeyError('Wrong'))
56         self.instance.director.data = {}
57         ret = {}
58         self.instance.run(ret)
59         self.instance.teardown()
60         self.assertEqual(ret['sla_pass'], 1)
61
62     def test_scenario_general_case_fail(self):
63         self.instance.director.verify.return_value = False
64         self.instance.director.data = {}
65         ret = {}
66         self.assertRaises(y_exc.SLAValidationError, self.instance.run, ret)
67         self.instance.teardown()
68         self.assertEqual(ret['sla_pass'], 0)
69
70     def test_scenario_general_case_service_not_found_fail(self):
71         self.instance.director.verify.return_value = True
72         self.instance.director.data = {"general-attacker": 0}
73         ret = {}
74         self.assertRaises(y_exc.SLAValidationError, self.instance.run, ret)
75         self.instance.teardown()
76         self.assertEqual(ret['sla_pass'], 0)