def test_parse_deltametadata_01(self):
        path = os.path.join(self.tmpdir, "01.xml")
        open(path, "w").write(XML_01)

        dm = DeltaMetadata()
        dm.load(path)

        self.assertEqual(dm.revision_src, "123")
        self.assertEqual(dm.revision_dst, "456")
        self.assertEqual(dm.contenthash_src, "abc")
        self.assertEqual(dm.contenthash_dst, "bcd")
        self.assertEqual(dm.contenthash_type, "foobar")
        self.assertEqual(dm.timestamp_src, 120)
        self.assertEqual(dm.timestamp_dst, 450)

        self.assertEqual(len(dm.usedplugins), 1)

        bp = dm.usedplugins["FooBarPlugin"]
        self.assertEqual(bp.name, "FooBarPlugin")
        self.assertEqual(bp.version, 1)
        self.assertEqual(bp.get("database"), "1")
        self.assertEqual(bp.get("origincompression"), "gz")
        self.assertEqual(bp.get_list("removedpackage"),
                         [{"href": "Pacakges/foo.rpm", "base": "ftp://foobaar/"},
                          {"href": "Packages/bar.rpm"}])
        self.assertEqual(bp.get_list("emptylist"), [{}])
    def test_parse_empty_deltametadata(self):
        path = os.path.join(self.tmpdir, "empty.xml")
        open(path, "w").write(XML_EMPTY)

        dm = DeltaMetadata()
        dm.load(path)

        self.assertEqual(len(dm.usedplugins), 0)
    def test_dump_deltametadata_01(self):
        plugin = PluginBundle("FooBarPlugin", 1)
        plugin.set("database", "1")
        plugin.set("origincompression", "gz")
        plugin.append("removedpackage", {"href": "Pacakges/foo.rpm",
                                         "base": "ftp://foobaar/"})
        plugin.append("removedpackage", {"href": "Packages/bar.rpm"})
        plugin.append("emptylist", {})

        dm = DeltaMetadata()
        dm.revision_src = "123"
        dm.revision_dst = "456"
        dm.contenthash_src = "abc"
        dm.contenthash_dst = "bcd"
        dm.contenthash_type = "foobar"
        dm.timestamp_src = 120
        dm.timestamp_dst = 450
        dm.add_pluginbundle(plugin)
        content = dm.dumps()

        path = os.path.join(self.tmpdir, "01.xml")
        open(path, "w").write(content)

        dm_loaded = DeltaMetadata()
        dm_loaded.load(path)

        self.assertEqual(dm.revision_src, dm_loaded.revision_src)
        self.assertEqual(dm.revision_dst, dm_loaded.revision_dst)
        self.assertEqual(dm.contenthash_src, dm_loaded.contenthash_src)
        self.assertEqual(dm.contenthash_dst, dm_loaded.contenthash_dst)
        self.assertEqual(dm.contenthash_type, dm_loaded.contenthash_type)
        self.assertEqual(dm.timestamp_src, dm_loaded.timestamp_src)
        self.assertEqual(dm.timestamp_dst, dm_loaded.timestamp_dst)
        self.assertEqual(len(dm.usedplugins), len(dm_loaded.usedplugins))
        self.assertEqual(dm.usedplugins["FooBarPlugin"].__dict__,
                         dm_loaded.usedplugins["FooBarPlugin"].__dict__)