Skip to content

Commit

Permalink
Add required_contexts validator
Browse files Browse the repository at this point in the history
Add a validator that checks if a benchmark scenario has defined in its
configuration file the context(s) that it requires to run first.

Example:
@validation.required_contexts("context1", "context2")
def benchmark_scenario():
  pass

Change-Id: Id83a6ff93acde2abbb29ec8351210e38d725ce48
  • Loading branch information
tzabal authored and boris-42 committed Aug 11, 2014
1 parent 54dbf08 commit 54d793f
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 0 deletions.
10 changes: 10 additions & 0 deletions rally/benchmark/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,3 +371,13 @@ def required_services(config, clients, task, *required_services):
if service not in available_services:
return ValidationResult(
False, _("Service is not available: %s") % service)


@validator
def required_contexts(config, clients, task, *context_names):
missing_contexts = set(context_names) - set(config.get("context", {}))
if missing_contexts:
message = (_("The following contexts are required but missing from "
"the benchmark configuration file: %s") %
", ".join(missing_contexts))
return ValidationResult(False, message)
16 changes: 16 additions & 0 deletions tests/benchmark/test_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,22 @@ def test_validator(self):
validator, = self._get_scenario_validators(func_failure, scenario)
self.assertFalse(validator(None, None, None).is_valid)

def test_required_contexts(self):
config = {"context": {"context01": {}, "context02": {}}}

required_contexts = (lambda *contexts:
validation.required_contexts(*contexts)
(lambda: None).validators.pop()
(config, None, None))

# All the required contexts are defined
result = required_contexts("context01", "context02")
self.assertTrue(result.is_valid)

# A required context is not defined
result = required_contexts("context03")
self.assertFalse(result.is_valid)

def test_required_services(self):
available_services = {
consts.ServiceType.IDENTITY: consts.Service.KEYSTONE,
Expand Down

0 comments on commit 54d793f

Please sign in to comment.