summaryrefslogtreecommitdiff
path: root/pkg/verify_archive_test_main.py.tpl
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/verify_archive_test_main.py.tpl')
-rw-r--r--pkg/verify_archive_test_main.py.tpl106
1 files changed, 104 insertions, 2 deletions
diff --git a/pkg/verify_archive_test_main.py.tpl b/pkg/verify_archive_test_main.py.tpl
index d9b17cc..f831ecb 100644
--- a/pkg/verify_archive_test_main.py.tpl
+++ b/pkg/verify_archive_test_main.py.tpl
@@ -13,11 +13,110 @@
# limitations under the License.
"""Tests for generated content manifest."""
+import re
+import tarfile
import unittest
-from pkg import verify_archive_test_lib
+class VerifyArchiveTest(unittest.TestCase):
+ """Test harness to see if we wrote the content manifest correctly."""
-class ${TEST_NAME}(verify_archive_test_lib.VerifyArchiveTest):
+
+ def setUp(self):
+ super(VerifyArchiveTest, self).setUp()
+
+ def scan_target(self, target):
+ parts = target.split('.')
+ ext = parts[-1]
+ if ext[0] == 't' or parts[-2] == 'tar':
+ self.load_tar(target)
+ elif ext[0] == 'z':
+ self.fail('Can not process zip yet')
+ else:
+ self.fail('Can not figure out the archive type for (%s)' % target)
+
+ def load_tar(self, path):
+ self.paths = []
+ self.links = {}
+ with tarfile.open(path, 'r:*') as f:
+ i = 0
+ for info in f:
+ self.paths.append(info.name)
+ if info.linkname:
+ self.links[info.name] = info.linkname
+
+ def assertMinSize(self, min_size):
+ """Check that the archive contains at least min_size entries.
+
+ Args:
+ min_size: The minimum number of targets we expect.
+ """
+ if min_size <= 0:
+ return
+ actual_size = len(self.paths)
+ self.assertGreaterEqual(
+ len(self.paths),
+ min_size,
+ msg = "Expected at least %d files, but found only %d" % (
+ min_size, actual_size))
+
+ def assertMaxSize(self, max_size):
+ """Check that the archive contains at most max_size entries.
+
+ Args:
+ max_size: The maximum number of targets we expect.
+ """
+ if max_size <= 0:
+ return
+ actual_size = len(self.paths)
+ self.assertLessEqual(
+ len(self.paths),
+ max_size,
+ msg = "Expected at most %d files, but found %d" % (
+ max_size, actual_size))
+
+ def check_must_contain(self, must_contain):
+ plain_patterns = set(must_contain)
+ for path in self.paths:
+ if path in plain_patterns:
+ plain_patterns.remove(path)
+ if len(plain_patterns) > 0:
+ self.fail('These required paths were not found: %s' % ','.join(plain_patterns) + ' in [%s]' % ','.join(self.paths))
+
+ def check_must_not_contain(self, must_not_contain):
+ plain_patterns = set(must_not_contain)
+ for path in self.paths:
+ if path in plain_patterns:
+ self.fail('Found disallowed path (%s) in the archive' % path)
+
+ def check_must_contain_regex(self, must_contain_regex):
+ for pattern in must_contain_regex:
+ r_comp = re.compile(pattern)
+ matched = False
+ for path in self.paths:
+ if r_comp.match(path):
+ matched = True
+ break
+ if not match:
+ self.fail('Did not find pattern (%s) in the archive' % pattern)
+
+ def check_must_not_contain_regex(self, must_not_contain_regex):
+ for pattern in must_not_contain_regex:
+ r_comp = re.compile(pattern)
+ matched = False
+ for path in self.paths:
+ if r_comp.match(path):
+ self.fail('Found disallowed pattern (%s) in the archive' % pattern)
+
+ def verify_links(self, verify_links):
+ for link, target in verify_links.items():
+ if link not in self.paths:
+ self.fail('Required link (%s) is not in the archive' % link)
+ if self.links[link] != target:
+ self.fail('link (%s) points to the wrong place. Expected (%s) got (%s)' %
+ (link, target, self.links[link]))
+
+
+class ${TEST_NAME}(VerifyArchiveTest):
def setUp(self):
super(${TEST_NAME}, self).setUp()
@@ -41,6 +140,9 @@ class ${TEST_NAME}(verify_archive_test_lib.VerifyArchiveTest):
def test_must_not_contain(self):
self.check_must_not_contain_regex(${MUST_NOT_CONTAIN_REGEX})
+ def test_verify_links(self):
+ self.verify_links(${VERIFY_LINKS})
+
if __name__ == '__main__':
unittest.main()