diff options
| -rw-r--r-- | tests/deploy_replicaset.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/deploy_replicaset.py b/tests/deploy_replicaset.py index 9506407..6fa0290 100644 --- a/tests/deploy_replicaset.py +++ b/tests/deploy_replicaset.py @@ -1,6 +1,8 @@ #!/usr/bin/env python3 import amulet +import logging +import re import sys import time import traceback @@ -12,6 +14,7 @@ from base_deploy import BasicMongo # max amount of time to wait before testing for replicaset status wait_for_replicaset = 600 +logger = logging.getLogger(__name__) class Replicaset(BasicMongo): @@ -109,6 +112,34 @@ class Replicaset(BasicMongo): def validate_running_services(self): super(Replicaset, self).validate_running_services() + def validate_workload_status(self): + primaries = 0 + secondaries = 0 + regex = re.compile('^Unit is ready as (PRIMARY|SECONDARY)$') + self.d.sentry.wait_for_messages({'mongodb': regex}) + + # count how many primaries and secondaries were reported in the + # workload status + for unit_name, unit in self.d.sentry.get_status()['mongodb'].items(): + workload_msg = unit['workload-status']['message'] + matched = re.match(regex, workload_msg) + + if not matched: + msg = "'{}' does not match '{}'".format(workload_msg, regex) + amulet.raise_status(amulet.FAIL, msg=msg) + elif matched.group(1) == 'PRIMARY': + primaries += 1 + elif matched.group(1) == 'SECONDARY': + secondaries += 1 + else: + amulet.raise_status(amulet.FAIL, + msg='Unknown state: %s' % matched.group(1)) + + logger.debug('Secondary units found: %d' % secondaries) + if primaries > 1: + msg = "Found %d primaries, expected 1" % primaries + amulet.raise_status(amulet.FAIL, msg=msg) + def run(self): self.deploy() self.validate_status_interface() @@ -116,3 +147,4 @@ class Replicaset(BasicMongo): self.validate_replicaset_setup() self.validate_replicaset_relation_joined() self.validate_world_connectivity() + self.validate_workload_status() |
