Change the cache rules tests

Change-Id: Idfc281b620d59399e32791d790fb20f59ac16efd
This commit is contained in:
Sabeen Syed 2015-04-24 18:53:01 -05:00 committed by Malini Kamalambal
parent 9b1ef1ba52
commit dcd174e993
4 changed files with 71 additions and 51 deletions

View File

@ -76,8 +76,7 @@ class TestBase(fixtures.BaseTestFixture):
cls.dns_client = dnsclient.RackspaceDNSClient(
user_name=cls.auth_config.user_name,
api_key=cls.auth_config.api_key,
test_domain=cls.dns_config.test_domain,
dns_api_timeout=cls.dns_config.dns_api_timeout)
test_domain=cls.dns_config.test_domain)
cls.heat_config = config.OrchestrationConfig()
heat_url = cls.heat_config.base_url + '/' + project_id
@ -131,8 +130,6 @@ class TestBase(fixtures.BaseTestFixture):
# once the name is on the authoritative nameserver, there will still be
# a delay for the caching nameservers to pick up a change
sleep_time = self.dns_config.cname_propagation_sleep
print("waiting {0} additional seconds to propagate to caching "
"nameservers".format(sleep_time))
time.sleep(sleep_time)
return cname_rec
@ -178,34 +175,26 @@ class TestBase(fixtures.BaseTestFixture):
test_url=wpt_test_url)
return wpt_test_results
def assertCDNHit(self, cdn_url):
"""Asserts that the content is coming from a CDN Edge Node
def get_from_cdn_enabled_url(self, cdn_url, count=2):
"""GETs using the cdn enabled url for the specified number of times
:param cdn_url: CDN enabled url of the origin website
:returns: True/False
:param count: number of calls to make
"""
# GET content is done 3 times since it hits the origin server first
# and then possibly a different edge node
"""
todo: Check which node is getting hit
"""
headers = {'Pragma': 'akamai-x-cache-on'}
requests.get(cdn_url, headers=headers)
requests.get(cdn_url, headers=headers)
response = requests.get(cdn_url, headers=headers)
self.assertIn(response.headers['x-cache'].split(" ")[0],
['TCP_HIT', 'TCP_MEM_HIT'])
for _ in range(count):
requests.get(cdn_url)
def assertCDNMiss(self, cdn_url):
"""Asserts that the content is NOT coming from a CDN Edge Node
def assertCacheStatus(self, cdn_url, status_list):
"""Asserts that the content is cached or NOT
:param cdn_url: CDN enabled url of the origin website
:param status_list: list of acceptable status
eg. ['TCP_MISS', 'TCP_REFRESH_MISS']
:returns: True/False
"""
headers = {'Pragma': 'akamai-x-cache-on'}
response = requests.get(cdn_url, headers=headers)
self.assertIn(response.headers['x-cache'].split(" ")[0],
['TCP_MISS', 'TCP_REFRESH_MISS', 'TCP_REFRESH_MISS'])
self.assertIn(response.headers['x-cache'].split(" ")[0], status_list)
def wait_for_CDN_status(self, cdn_url, status):
"""Waits for a service to reach a given status.

View File

@ -183,17 +183,30 @@ class TestWebsiteCDN(base.TestBase):
self.assertSameContent(origin_url=origin_url,
cdn_url=cdn_enabled_url)
self.assertCDNHit(cdn_url=cdn_enabled_url + rule1)
time.sleep(ttlrule1)
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule1)
# Verify cdn hit on rule urls
self.get_from_cdn_enabled_url(cdn_url=cdn_enabled_url + rule1, count=2)
self.assertCacheStatus(cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_HIT', 'TCP_MEM_HIT'])
self.assertCDNHit(cdn_url=cdn_enabled_url + rule2)
time.sleep(ttlrule2)
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule2)
self.get_from_cdn_enabled_url(cdn_url=cdn_enabled_url + rule2, count=2)
self.assertCacheStatus(cdn_url=cdn_enabled_url + rule2,
status_list=['TCP_HIT', 'TCP_MEM_HIT'])
self.assertCDNHit(cdn_url=cdn_enabled_url + rule3)
time.sleep(ttlrule3)
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule3)
self.get_from_cdn_enabled_url(cdn_url=cdn_enabled_url + rule3, count=2)
self.assertCacheStatus(cdn_url=cdn_enabled_url + rule3,
status_list=['TCP_HIT', 'TCP_MEM_HIT'])
time.sleep(max(ttlrule1, ttlrule2, ttlrule3))
# Verify that content in cache is stale/removed after the ttl expires
self.assertCacheStatus(
cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_REFRESH_HIT', 'TCP_REFRESH_MISS', 'TCP_MISS'])
self.assertCacheStatus(
cdn_url=cdn_enabled_url + rule2,
status_list=['TCP_REFRESH_HIT', 'TCP_REFRESH_MISS', 'TCP_MISS'])
self.assertCacheStatus(
cdn_url=cdn_enabled_url + rule3,
status_list=['TCP_REFRESH_HIT', 'TCP_REFRESH_MISS', 'TCP_MISS'])
def test_purge(self):
@ -206,8 +219,6 @@ class TestWebsiteCDN(base.TestBase):
rule1 = self.cacherules_config.cache_rule1
ttlrule1 = self.cacherules_config.ttl_rule1
rule2 = self.cacherules_config.cache_rule2
caching_list = [{"name": "images", "ttl": ttlrule1, "rules":
[{"name": "image_rule", "request_url": rule1}]}]
self.service_name = base.random_string(prefix='testService-')
@ -238,20 +249,26 @@ class TestWebsiteCDN(base.TestBase):
cdn_url=cdn_enabled_url)
# Purge object in rule 1 and ensure it gets a TCP_MISS
self.assertCDNHit(cdn_url=cdn_enabled_url + rule1)
self.get_from_cdn_enabled_url(cdn_url=cdn_enabled_url + rule1, count=2)
self.assertCacheStatus(cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_HIT', 'TCP_MEM_HIT'])
self.poppy_client.purge_asset(location=self.service_location,
asset_url=rule1)
"""
@todo: Change the wait for CDN status to checking the real
status of purge
"""
self.wait_for_CDN_status(cdn_url=cdn_enabled_url, status='TCP_MISS')
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule1)
# Wait for purge to complete & verify that content is fetched from
# origin for subsequent call.
# @todo: Change the sleep to check the real status of purge. As is
# there is no way a poppy user can get the purge status.
time.sleep(self.purge_config.purge_wait_time)
self.assertCacheStatus(
cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_REFRESH_HIT', 'TCP_REFRESH_MISS', 'TCP_MISS'])
# Currently not supported
# Purge all content and ensure rule 2 gets a TCP_MISS
self.poppy_client.purge_asset(location=self.service_location)
self.wait_for_CDN_status(cdn_url=cdn_enabled_url, status='TCP_MISS')
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule2)
# self.poppy_client.purge_asset(location=self.service_location)
# self.wait_for_CDN_status(cdn_url=cdn_enabled_url, status='TCP_MISS')
# self.assertCDNMiss(cdn_url=cdn_enabled_url + rule2)
def test_update_cache_rules(self):
@ -290,23 +307,38 @@ class TestWebsiteCDN(base.TestBase):
self.assertSameContent(origin_url=origin_url, cdn_url=cdn_enabled_url)
self.assertCDNHit(cdn_url=cdn_enabled_url + rule1)
# Verify that content is cached after two requests
self.get_from_cdn_enabled_url(cdn_url=cdn_enabled_url + rule1, count=2)
self.assertCacheStatus(cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_HIT', 'TCP_MEM_HIT'])
# Verify that content in cache is stale/removed after the ttl expires
time.sleep(ttlrule1 + 10)
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule1)
self.assertCacheStatus(
cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_REFRESH_HIT', 'TCP_REFRESH_MISS', 'TCP_MISS'])
# Update cache rules
new_ttl = 50
test_data = [{"op": "replace",
"path": "/caching/0",
"value": {"name": "cache_name",
"ttl": 50,
"ttl": new_ttl,
"rules": [{"name": "image_rule",
"request_url": rule1}]}}]
resp = self.poppy_client.patch_service(location=self.service_location,
request_body=test_data)
self.assertCDNHit(cdn_url=cdn_enabled_url + rule1)
time.sleep(50)
self.assertCDNMiss(cdn_url=cdn_enabled_url + rule1)
# Verify that content is cached after two requests
self.get_from_cdn_enabled_url(cdn_url=cdn_enabled_url + rule1, count=2)
self.assertCacheStatus(cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_HIT', 'TCP_MEM_HIT'])
time.sleep(new_ttl)
# Verify that content in cache is stale/removed after the ttl expires
self.assertCacheStatus(
cdn_url=cdn_enabled_url + rule1,
status_list=['TCP_REFRESH_HIT', 'TCP_REFRESH_MISS', 'TCP_MISS'])
def tearDown(self):
self.poppy_client.delete_service(location=self.service_location)

View File

@ -239,5 +239,5 @@ class PurgeRulesConfig(data_interfaces.ConfigSectionInterface):
SECTION_NAME = 'purgetime'
@property
def purge_time(self):
def purge_wait_time(self):
return int(self.get('purge_wait_time'))

View File

@ -94,7 +94,6 @@ class RackspaceDNSClient(object):
end_time = time.time() + retry_timeout
while time.time() < end_time:
try:
print("dig %s" % target)
resp = resolver.query(target, 'CNAME')
if resp.response.answer:
return