Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1131)

Unified Diff: third_party/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py

Issue 12317103: Added gsutil to depot tools (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/depot_tools.git@master
Patch Set: added readme Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py
diff --git a/third_party/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py b/third_party/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py
new file mode 100644
index 0000000000000000000000000000000000000000..2801178c500a5779dd2d6355361ed7c5341c4302
--- /dev/null
+++ b/third_party/gsutil/boto/tests/unit/cloudfront/test_invalidation_list.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python
+import random
+import string
+from tests.unit import unittest
+
+import mock
+import boto
+
+
+RESPONSE_TEMPLATE = r"""
+<InvalidationList>
+ <Marker/>
+ <NextMarker>%(next_marker)s</NextMarker>
+ <MaxItems>%(max_items)s</MaxItems>
+ <IsTruncated>%(is_truncated)s</IsTruncated>
+ %(inval_summaries)s
+</InvalidationList>
+"""
+
+INVAL_SUMMARY_TEMPLATE = r"""
+ <InvalidationSummary>
+ <Id>%(cfid)s</Id>
+ <Status>%(status)s</Status>
+ </InvalidationSummary>
+"""
+
+
+class CFInvalidationListTest(unittest.TestCase):
+
+ cloudfront = True
+
+ def setUp(self):
+ self.cf = boto.connect_cloudfront('aws.aws_access_key_id',
+ 'aws.aws_secret_access_key')
+
+ def _get_random_id(self, length=14):
+ return ''.join([random.choice(string.ascii_letters) for i in
+ range(length)])
+
+ def _group_iter(self, iterator, n):
+ accumulator = []
+ for item in iterator:
+ accumulator.append(item)
+ if len(accumulator) == n:
+ yield accumulator
+ accumulator = []
+ if len(accumulator) != 0:
+ yield accumulator
+
+ def _get_mock_responses(self, num, max_items):
+ max_items = min(max_items, 100)
+ cfid_groups = list(self._group_iter([self._get_random_id() for i in
+ range(num)], max_items))
+ cfg = dict(status='Completed', max_items=max_items, next_marker='')
+ responses = []
+ is_truncated = 'true'
+ for i, group in enumerate(cfid_groups):
+ next_marker = group[-1]
+ if (i + 1) == len(cfid_groups):
+ is_truncated = 'false'
+ next_marker = ''
+ invals = ''
+ cfg.update(dict(next_marker=next_marker,
+ is_truncated=is_truncated))
+ for cfid in group:
+ cfg.update(dict(cfid=cfid))
+ invals += INVAL_SUMMARY_TEMPLATE % cfg
+ cfg.update(dict(inval_summaries=invals))
+ mock_response = mock.Mock()
+ mock_response.read.return_value = RESPONSE_TEMPLATE % cfg
+ mock_response.status = 200
+ responses.append(mock_response)
+ return responses
+
+ def test_manual_pagination(self, num_invals=30, max_items=4):
+ """
+ Test that paginating manually works properly
+ """
+ self.assertGreater(num_invals, max_items)
+ responses = self._get_mock_responses(num=num_invals,
+ max_items=max_items)
+ self.cf.make_request = mock.Mock(side_effect=responses)
+ ir = self.cf.get_invalidation_requests('dist-id-here',
+ max_items=max_items)
+ all_invals = list(ir)
+ self.assertEqual(len(all_invals), max_items)
+ while ir.is_truncated:
+ ir = self.cf.get_invalidation_requests('dist-id-here',
+ marker=ir.next_marker,
+ max_items=max_items)
+ invals = list(ir)
+ self.assertLessEqual(len(invals), max_items)
+ all_invals.extend(invals)
+ remainder = num_invals % max_items
+ if remainder != 0:
+ self.assertEqual(len(invals), remainder)
+ self.assertEqual(len(all_invals), num_invals)
+
+ def test_auto_pagination(self, num_invals=1024):
+ """
+ Test that auto-pagination works properly
+ """
+ max_items = 100
+ self.assertGreaterEqual(num_invals, max_items)
+ responses = self._get_mock_responses(num=num_invals,
+ max_items=max_items)
+ self.cf.make_request = mock.Mock(side_effect=responses)
+ ir = self.cf.get_invalidation_requests('dist-id-here')
+ self.assertEqual(len(ir._inval_cache), max_items)
+ self.assertEqual(len(list(ir)), num_invals)
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698