trove-integration/tests/integration/tests/dns/dns.py

105 lines
3.1 KiB
Python

import time
import unittest
from proboscis import test
from proboscis.decorators import time_out
from troveclient import Dbaas
from trove.tests.api.instances import instance_info
from trove.tests.api.instances import GROUP_START as INSTANCE_START
from trove.tests.api.instances import GROUP_TEST
from trove.tests.api.instances import GROUP_STOP as INSTANCE_STOP
from tests import WHITE_BOX
if WHITE_BOX:
# TODO(tim.simpson): Restore this once white box functionality can be
# added back to this test module.
pass
# import rsdns
# from nova import flags
# from nova import utils
# from trove import exception
# from trove.utils import poll_until
# FLAGS = flags.FLAGS
dns_driver = None
GROUP = "dbaas.guest.dns"
@test(groups=[GROUP, GROUP_TEST])
class Setup(unittest.TestCase):
"""Creates the DNS Driver and entry factory used in subsequent tests."""
def test_create_rs_dns_driver(self):
global dns_driver
dns_driver = utils.import_object(FLAGS.dns_driver)
def expected_dns_entry():
"""Returns expected DNS entry for this instance.
:rtype: Instance of :class:`DnsEntry`.
"""
return create_dns_entry(instance_info.local_id, instance_info.id)
@test(depends_on_classes=[Setup],
depends_on_groups=[INSTANCE_START],
groups=[GROUP, GROUP_TEST])
class WhenInstanceIsCreated(unittest.TestCase):
"""Make sure the DNS name was provisioned.
This class actually calls the DNS driver to confirm the entry that should
exist for the given instance does exist.
"""
def test_dns_entry_should_exist(self):
entry = expected_dns_entry()
if entry:
def get_entries():
return dns_driver.get_entries_by_name(entry.name)
try:
poll_until(get_entries, lambda entries: len(entries) > 0,
sleep_time=2, time_out=60)
except exception.PollTimeOut:
self.fail("Did not find name " + entry.name + \
" in the entries, which were as follows:"
+ str(dns_driver.get_entries()))
@test(depends_on_classes=[Setup, WhenInstanceIsCreated],
depends_on_groups=[INSTANCE_STOP],
groups=[GROUP])
class AfterInstanceIsDestroyed(unittest.TestCase):
"""Make sure the DNS name is removed along with an instance.
Because the compute manager calls the DNS manager with RPC cast, it can
take awhile. So we wait for 30 seconds for it to disappear.
"""
def test_dns_entry_exist_should_be_removed_shortly_thereafter(self):
entry = expected_dns_entry()
if not entry:
return
def get_entries():
return dns_driver.get_entries_by_name(entry.name)
try:
poll_until(get_entries, lambda entries: len(entries) == 0,
sleep_time=2, time_out=60)
except exception.PollTimeOut:
# Manually delete the rogue item
dns_driver.delete_entry(entry.name, entry.type, entry.dns_zone)
self.fail("The DNS entry was never deleted when the instance "
"was destroyed.")