Change the cache rules tests
Change-Id: Idfc281b620d59399e32791d790fb20f59ac16efd
This commit is contained in:
parent
9b1ef1ba52
commit
dcd174e993
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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'))
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue