100% coverage in functional tests

In Rally, we have functional tests that run different CLI
commands and check that the CLI output contains all the expected
data.

We need to ensure that every single subcommand of “rally task”,
“rally deployment” etc. (for example, “rally task start”, “rally
task report”) is covered in these functional test with all possible
parameters usage (e.g. the “--deployment” parameter in “rally task
start --deployment <name>” didn’t get tested, which has lead to
errors recently).

Change-Id: I654ad4317b2d061dd899f5fdfb028cda50af9b8b
This commit is contained in:
Roman Vasilets 2014-12-01 19:47:10 +02:00
parent 2205de4039
commit b836fe428f
4 changed files with 92 additions and 2 deletions

View File

@ -71,3 +71,9 @@ class DeploymentTestCase(unittest.TestCase):
self.rally("deployment create --name t_create_env --fromenv")
self.assertRaises(utils.RallyCmdError, self.rally,
("deployment check"))
def test_recreate(self):
with mock.patch.dict("os.environ", utils.TEST_ENV):
self.rally("deployment create --name t_create_env --fromenv")
self.rally("deployment recreate --deployment t_create_env")
self.assertIn("t_create_env", self.rally("deployment list"))

View File

@ -41,6 +41,5 @@ class ShowTestCase(unittest.TestCase):
res = self.rally("show secgroups")
self.assertIn("default", res)
# TODO(oanufriev): implement after bp/add-rally-create-cli-command
def test_show_keypairs(self):
pass
self.rally("show keypairs")

View File

@ -14,10 +14,12 @@
# under the License.
import os
import re
import unittest
import mock
from rally.cmd import envutils
from tests.functional import utils
@ -39,6 +41,11 @@ class TaskTestCase(unittest.TestCase):
]
}
def _get_deployment_uuid(self, output):
return re.search(
r"Using deployment: (?P<uuid>[0-9a-f\-]{36})",
output).group("uuid")
def test_status(self):
rally = utils.Rally()
cfg = self._get_sample_task_config()
@ -139,6 +146,39 @@ class TaskTestCase(unittest.TestCase):
self.assertRaises(utils.RallyCmdError,
rally, "task list --status not_existing_status")
def test_validate_is_valid(self):
rally = utils.Rally()
cfg = self._get_sample_task_config()
config = utils.TaskConfig(cfg)
output = rally("task validate --task %s" % config.filename)
self.assertIn("Task config is valid", output)
def test_validate_is_invalid(self):
rally = utils.Rally()
with mock.patch.dict("os.environ", utils.TEST_ENV):
deployment_id = envutils.get_global("RALLY_DEPLOYMENT")
cfg = {"invalid": "config"}
config = utils.TaskConfig(cfg)
output = rally(("task validate --task %(task_file)s "
"--deployment %(deployment_id)s") %
{"task_file": config.filename,
"deployment_id": deployment_id})
self.assertIn("Task config is invalid", output)
def test_start(self):
rally = utils.Rally()
with mock.patch.dict("os.environ", utils.TEST_ENV):
deployment_id = envutils.get_global("RALLY_DEPLOYMENT")
cfg = self._get_sample_task_config()
config = utils.TaskConfig(cfg)
output = rally(("task start --task %(task_file)s "
"--deployment %(deployment_id)s") %
{"task_file": config.filename,
"deployment_id": deployment_id})
result = re.search(
r"(?P<task_id>[0-9a-f\-]{36}) is started", output)
self.assertIsNotNone(result)
# NOTE(oanufriev): Not implemented
def test_abort(self):
pass

View File

@ -13,8 +13,12 @@
# License for the specific language governing permissions and limitations
# under the License.
import re
import unittest
import mock
from rally.cmd import envutils
from tests.functional import utils
@ -24,7 +28,48 @@ class CliUtilsTestCase(unittest.TestCase):
super(CliUtilsTestCase, self).setUp()
self.rally = utils.Rally()
def _get_deployment_uuid(self, output):
return re.search(
r"Using deployment: (?P<uuid>[0-9a-f\-]{36})",
output).group("uuid")
def test_missing_argument(self):
with self.assertRaises(utils.RallyCmdError) as e:
self.rally("use task")
self.assertIn("--uuid", e.exception.output)
def test_deployment(self):
with mock.patch.dict("os.environ", utils.TEST_ENV):
output = self.rally(
"deployment create --name t_create_env1 --fromenv")
uuid = self._get_deployment_uuid(output)
self.rally("deployment create --name t_create_env2 --fromenv")
self.rally("use deployment --deployment %s" % uuid)
current_deployment = envutils.get_global("RALLY_DEPLOYMENT")
self.assertEqual(uuid, current_deployment)
def test_task(self):
cfg = {
"Dummy.dummy_random_fail_in_atomic": [
{
"runner": {
"type": "constant",
"times": 100,
"concurrency": 5
}
}
]
}
with mock.patch.dict("os.environ", utils.TEST_ENV):
deployment_id = envutils.get_global("RALLY_DEPLOYMENT")
config = utils.TaskConfig(cfg)
output = self.rally(("task start --task %(task_file)s "
"--deployment %(deployment_id)s") %
{"task_file": config.filename,
"deployment_id": deployment_id})
result = re.search(
r"(?P<uuid>[0-9a-f\-]{36}) is started", output)
uuid = result.group("uuid")
self.rally("use task --uuid %s" % uuid)
current_task = envutils.get_global("RALLY_TASK")
self.assertEqual(uuid, current_task)