Пример #1
0
class XMLCompareTestCase(unittest.TestCase):
    def setUp(self):
        self.tinfo = etree.parse(os.path.join(mydir, "worker-testinfo1.xml")).getroot()
        self.start = copy.deepcopy(self.tinfo.xpath("status[@id='start']")[0])
        del self.start.attrib['id']
        self.desired = copy.deepcopy(self.tinfo.xpath("status[@id='desired']")[0])
        del self.desired.attrib['id']
        self.xmlc = XMLCompare(self.start, self.desired)

    def test_constructor(self):
        print()
#        pprint.pprint(self.xmlc.byxpath)
        self.assertIn("/status/worker[@id='test']/orderedItems/item[@id='2']", self.xmlc.bystate['right'])

    def test_find_work(self):
        work = self.xmlc.find_work()
        print()
        pprint.pprint(self.xmlc.actions())
        self.assertIn('/status/worker[@id=\'test\']/iniFile', work)
        self.assertNotIn("/status/worker[@id='test']/orderedItems", work)

        # quick memoization test
        work2 = self.xmlc.find_work()
        self.assertEqual(work, work2)

    def test_actions(self):
        print()
        pprint.pprint(self.xmlc.actions())
Пример #2
0
class Testinfo1Case(unittest.TestCase):

    def setUp(self):
        self.wdesc = WorkerDescription('test')
        self.rng = etree.RelaxNG(self.wdesc.desc)
        self.tinfo = etree.parse(os.path.join(mydir, "worker-testinfo1.xml")).getroot()
#        self.actions = {'add': set(), 'remove': set(), 'modify': set()}
        self.start = copy.deepcopy(self.tinfo.xpath("status[@id='start']")[0])
        del self.start.attrib['id']
        self.desired = copy.deepcopy(self.tinfo.xpath("status[@id='desired']")[0])
        del self.desired.attrib['id']
        self.comp = XMLCompare(self.start, self.desired)

    def populate_todo(self, setid):
        self.todo = set()
        for i in self.tinfo.xpath("todosets[@id='%s']" % setid)[0]:
            self.todo.add(MRXpath(t.get("id")).to_xpath())

    def test_010_statuses_valid(self):
        self.rng.assertValid(self.start.xpath("worker[@id='test']")[0])
        self.rng.assertValid(self.desired.xpath("worker[@id='test']")[0])

    def test_020_wuwus_correct(self):
        self.assertFalse(self.wdesc.is_workunit("/worker"))
        self.assertTrue(self.wdesc.is_workunit("/worker/iniFile"))
        self.assertFalse(self.wdesc.is_workunit("/worker/iniFile/section"))
        self.assertFalse(self.wdesc.is_workunit("/worker/iniFile/section/keyvalue"))
#        self.assertFalse(self.wdesc.is_workunit("/worker/orderedItems"))
        self.assertTrue(self.wdesc.is_workunit("/worker/orderedItems/item"))
#        self.assertFalse(self.wdesc.is_workunit("/worker/unordered"))
        self.assertTrue(self.wdesc.is_workunit("/worker/unordered/item"))

    def test_030_generate_wus(self):
#        self.populate_actions(1)
#        start_st = Status(self.start, worker_prefix='/status')
        print()
        pprint.pprint(self.comp.actions())
        mrx = MRXpath("/status/worker[@id='test']/orderedItems/item[@id='1']")
        for k in self.comp.bystate.keys():
            if mrx.to_xpath() in self.comp.bystate[k]:
                print(k)
        wus, working = generate_wus(self.comp.find_work(), self.comp)
        for wu in wus:
            print()
            print(etree.tostring(wu))
#        print()
#        print(etree.tostring(working))

    def test_040_transform_deps(self):
        deps = self.desired.xpath('/status/deps')[0]
        wudeps = self.comp.wudeps(deps.iterchildren(etree.Element))
        print()
        pprint.pprint(wudeps)
        import topsort
        wudeps.extend([["", x] for x in self.comp.find_work()])
        i = 0
        for lev in iter(topsort.topsort_levels(wudeps)):
            if lev == ['']:
                continue
            i += 1
            wus, working = generate_wus(set(lev), self.comp)
            print("*********************************")
            print("* LEVEL: %d" % i)
            print("*********************************")
            for wu in wus:
                print(etree.tostring(wu))
Пример #3
0
from machination.xmltools import XMLCompare
from machination.xmltools import generate_wus
from machination.xmltools import mc14n
import sys
from lxml import etree
import pprint

left = mc14n(etree.parse(sys.argv[1]))
right = mc14n(etree.parse(sys.argv[2]))

# print(etree.tostring(left, pretty_print = True).decode())
# print(etree.tostring(right, pretty_print = True).decode())

deps = etree.fromstring("<status><deps/></status>")[0]
comp = XMLCompare(left, right)
wudeps = comp.wudeps(deps.iterchildren(tag=etree.Element))

pprint.pprint(comp.bystate)
pprint.pprint(comp.actions())
pprint.pprint(comp.find_work())

wus, working = generate_wus(comp.find_work(), comp)

for wu in wus:
    print(etree.tostring(wu, pretty_print=True).decode())

print(etree.tostring(working, pretty_print=True).decode())