"""Tests for resync.resource_dump.""" from .testlib import TestCase import os.path 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 import ResourceDump from resync.sitemap import SitemapParseError class TestResourceDump(TestCase): def test01_as_xml(self): rd = ResourceDump() rd.add(Resource('a.zip', timestamp=1)) rd.add(Resource('b.zip', timestamp=2)) xml = rd.as_xml() self.assertTrue( re.search( r'a.zip1970-01-01T00:00:01Z', xml), 'XML has resource a') def test02_parse(self): xml = '\n\ \ \ http://example.com/a.zip2012-03-14T18:37:36Z\ http://example.com/b.zip2012-03-14T18:37:36Z\ ' rd = ResourceDump() rd.parse(fh=io.StringIO(xml)) self.assertEqual(len(rd.resources), 2, 'got 2 resource dumps') self.assertEqual(rd.capability, 'resourcedump', 'capability set') self.assertEqual(rd.md_at, '2013-01-01') self.assertTrue('http://example.com/a.zip' in rd.resources) self.assertTrue(rd.resources['http://example.com/a.zip'].length, 12345) self.assertTrue('http://example.com/b.zip' in rd.resources) self.assertTrue(rd.resources['http://example.com/b.zip'].length, 56789) def test03_parse_no_capability(self): # For a resource dump this should be an error xml = '\n\ \ \ http://example.com/a.zip2012-03-14T18:37:36Z\ ' rd = ResourceDump() self.assertRaises(SitemapParseError, rd.parse, fh=io.StringIO(xml)) def test04_parse_bad_capability(self): # the \n\ \ \ http://example.com/bad_res_12012-03-14T18:37:36Z\ ' rd = ResourceDump() self.assertRaises(SitemapParseError, rd.parse, fh=io.StringIO(xml)) def test05_write(self): rd = ResourceDump() rd.add(Resource('aa.zip', timestamp=1)) rd.add(Resource('bb.zip', timestamp=2)) dumpf = os.path.join(self.tmpdir, "test05_dump.xml") rd.write(basename=dumpf) self.assertTrue(os.path.exists(dumpf)) # Now read that back rd2 = ResourceDump() rd2.parse(dumpf) self.assertEqual(len(rd2), 2) self.assertEqual(rd2.uris(), ['aa.zip', 'bb.zip'])