import unittest try: # python2 # Must try this first as io also exists in python2 # but in the wrong one! import StringIO as io except ImportError: # python3 import io import re from resync.resource import Resource from resync.resource_dump_manifest import ResourceDumpManifest from resync.sitemap import SitemapParseError class TestResourceDumpManifest(unittest.TestCase): def test01_as_xml(self): rdm = ResourceDumpManifest() rdm.add(Resource('a.zip', timestamp=1)) rdm.add(Resource('b.zip', timestamp=2)) xml = rdm.as_xml() self.assertTrue(re.search( r'a.zip1970-01-01T00:00:01Z', xml), 'XML has resource a') def test10_parse(self): xml = '\n\ \ \ http://example.com/res12012-03-14T18:37:36Z\ http://example.com/res22012-03-14T18:37:36Z\ ' rdm = ResourceDumpManifest() rdm.parse(fh=io.StringIO(xml)) self.assertEqual(len(rdm.resources), 2, 'got 2 resource dumps') self.assertEqual( rdm.capability, 'resourcedump-manifest', 'capability set') self.assertEqual(rdm.md_at, '2013-08-08') self.assertTrue('http://example.com/res1' in rdm.resources) self.assertTrue(rdm.resources['http://example.com/res1'].length, 12) self.assertTrue(rdm.resources['http://example.com/res1'].path, '/res1') self.assertTrue('http://example.com/res2' in rdm.resources) self.assertTrue(rdm.resources['http://example.com/res2'].path, '/res2') def test11_parse_no_capability(self): # For a resource dump this should be an error xml = '\n\ \ \ http://example.com/res12012-03-14T18:37:36Z\ http://example.com/res22012-03-14T18:37:36Z\ ' rdm = ResourceDumpManifest() self.assertRaises(SitemapParseError, rdm.parse, fh=io.StringIO(xml)) def test12_parse_bad_capability(self): # the \n\ \ \ http://example.com/a.zip2012-03-14T18:37:36Z\ ' rdm = ResourceDumpManifest() self.assertRaises(SitemapParseError, rdm.parse, fh=io.StringIO(xml))