From c40339b63dcbda97f5c8f121816fe38a9d67d537 Mon Sep 17 00:00:00 2001 From: Narayan Desai Date: Fri, 21 Mar 2008 00:32:57 +0000 Subject: Implement EntrySet and basic testing for it (mainly from ritcey) git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4427 ce84e21b-d406-0410-9b95-82705330c041 --- testsuite/TestPlugin.py | 122 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 testsuite/TestPlugin.py (limited to 'testsuite/TestPlugin.py') diff --git a/testsuite/TestPlugin.py b/testsuite/TestPlugin.py new file mode 100644 index 000000000..66d51a694 --- /dev/null +++ b/testsuite/TestPlugin.py @@ -0,0 +1,122 @@ +import os, Bcfg2.Server.Core, gamin, lxml.etree +from Bcfg2.Server.Plugin import EntrySet + +class es_testtype(object): + def __init__(self, name, properties, specific): + self.name = name + self.properties = properties + self.specific = specific + self.handled = 0 + self.built = 0 + + def handle_event(self, event): + self.handled += 1 + + def bind_entry(self, entry, metadata): + entry.set('bound', '1') + entry.set('name', self.name) + self.built += 1 + +class metadata(object): + def __init__(self, hostname): + self.hostname = hostname + self.groups = ['base', 'debian'] + +#FIXME add test_specific + +class test_entry_set(object): + def __init__(self): + self.dirname = '/tmp/estest-%d' % os.getpid() + os.path.isdir(self.dirname) or os.mkdir(self.dirname) + self.metadata = metadata('testhost') + self.es = EntrySet('template', self.dirname, None, es_testtype) + self.e = Bcfg2.Server.Core.GaminEvent(1, 'template', + gamin.GAMExists) + def test_init(self): + es = self.es + e = self.e + e.action = 'exists' + es.handle_event(e) + es.handle_event(e) + assert len(es.entries) == 1 + assert es.entries.values()[0].handled == 2 + e.action = 'changed' + es.handle_event(e) + assert es.entries.values()[0].handled == 3 + + + def test_info(self): + '''test info and info.xml handling''' + es = self.es + e = self.e + dirname = self.dirname + metadata = self.metadata + + # test 'info' handling + assert es.metadata['group'] == 'root' + self.mk_info(dirname) + e.filename = 'info' + e.action = 'exists' + es.handle_event(e) + assert es.metadata['group'] == 'sys' + e.action = 'deleted' + es.handle_event(e) + assert es.metadata['group'] == 'root' + + # test 'info.xml' handling + assert es.infoxml == None + self.mk_info_xml(dirname) + e.filename = 'info.xml' + e.action = 'exists' + es.handle_event(e) + assert es.infoxml + e.action = 'deleted' + es.handle_event(e) + assert es.infoxml == None + + + def test_file_building(self): + '''test file building''' + self.test_init() + ent = lxml.etree.Element('foo') + self.es.bind_entry(ent, self.metadata) + print self.es.entries.values()[0] + assert self.es.entries.values()[0].built == 1 + + + def test_host_specific_file_building(self): + '''add a host-specific template and build it''' + self.e.filename = 'template.H_%s' % self.metadata.hostname + self.e.action = 'exists' + self.es.handle_event(self.e) + assert len(self.es.entries) == 1 + ent = lxml.etree.Element('foo') + self.es.bind_entry(ent, self.metadata) + # FIXME need to test that it built the _right_ file here + + + + def test_deletion(self): + '''test deletion of files''' + self.test_init() + self.e.filename = 'template' + self.e.action = 'deleted' + self.es.handle_event(self.e) + assert len(self.es.entries) == 0 + + # TODO - how to clean up the temp dir & files after tests done? + + def mk_info(self, dir): + i = open("%s/info" % dir, 'w') + i.write('owner: root\n') + i.write('group: sys\n') + i.write('perms: 0600\n') + i.close + + def mk_info_xml(self, dir): + i = open("%s/info.xml" % dir, 'w') + i.write('\n') + i.close + + + -- cgit v1.2.3-1-g7c22