diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2008-11-05 15:24:31 -0500 |
---|---|---|
committer | Michael DeHaan <mdehaan@redhat.com> | 2008-11-05 15:24:31 -0500 |
commit | 98a54568134bd932f79b1284ac4b173d33761e48 (patch) | |
tree | fb06b36ee364362bf8df2ad338a9ac1fa4a9fc55 | |
parent | f3808df6642b7765c0babcf6a6ed9cb3c53c1f02 (diff) | |
download | cobbler-98a54568134bd932f79b1284ac4b173d33761e48.tar.gz cobbler-98a54568134bd932f79b1284ac4b173d33761e48.tar.xz cobbler-98a54568134bd932f79b1284ac4b173d33761e48.zip |
Get new XMLRPC tests into a passing state, the test process will now rewrite the user settings
during testing and restore them afterward to make sure it can log in. Some tests had to be disabled
as we need to rewrite /more/ settings to verify them, and additionally some more tests should be done
at the URL level.
-rw-r--r-- | Makefile | 5 | ||||
-rw-r--r-- | cobbler/config.py | 12 | ||||
-rw-r--r-- | cobbler/remote.py | 135 |
3 files changed, 91 insertions, 61 deletions
@@ -22,12 +22,13 @@ test: make savestate make rpms make install + make eraseconfig -(make nosetests) make restorestate nosetests: - #nosetests tests -w cobbler -d --with-coverage --cover-package=cobbler --cover-erase --quiet | tee test.log - nosetests cobbler/*.py -v -d | tee test.log + #nosetests tests -w cobbler --with-coverage --cover-package=cobbler --cover-erase --quiet | tee test.log + nosetests cobbler/*.py -v | tee test.log build: manpage updatewui python setup.py build -f diff --git a/cobbler/config.py b/cobbler/config.py index bbc78b42..3d270d82 100644 --- a/cobbler/config.py +++ b/cobbler/config.py @@ -44,8 +44,8 @@ from utils import _ class Config: - has_loaded = False - __shared_state = {} + #has_loaded = False + #__shared_state = {} def __init__(self,api): @@ -54,14 +54,14 @@ class Config: Constructor. Manages a definitive copy of all data collections with weakrefs pointing back into the class so they can understand each other's contents """ - self.__dict__ == Config.__shared_state - if not Config.has_loaded: - self.__load(api) + #self.__dict__ = Config.__shared_state + #if not Config.has_loaded: + self.__load(api) def __load(self,api): - Config.has_loaded = True + #Config.has_loaded = True self.api = api self._distros = distros.Distros(weakref.proxy(self)) diff --git a/cobbler/remote.py b/cobbler/remote.py index 83658b5d..0dfb4d31 100644 --- a/cobbler/remote.py +++ b/cobbler/remote.py @@ -1304,13 +1304,24 @@ class CobblerReadWriteXMLRPCServer(SimpleXMLRPCServer.SimpleXMLRPCServer): # ********************************************************************* # ********************************************************************* -def __test_bootstrap_start_clean(): +def __test_setup_modules(authn="authn_testing",authz="authz_allowall"): - #subprocess.call("rm -rf /var/lib/cobbler/config/distros.d/*",shell=True) - #subprocess.call("rm -rf /var/lib/cobbler/config/profiles.d/*",shell=True) - #subprocess.call("rm -rf /var/lib/cobbler/config/systems.d/*",shell=True) - #subprocess.call("rm -rf /var/lib/cobbler/config/images.d/*",shell=True) - #subprocess.call("rm -rf /var/lib/cobbler/config/repos.d/*",shell=True) + # rewrite modules.conf so we know we can use the testing module + # for xmlrpc rw testing (Makefile will put the user value back) + + import yaml + import Cheetah.Template as Template + + MODULES_TEMPLATE = "installer_templates/modules.conf.template" + DEFAULTS = "installer_templates/defaults" + data = yaml.loadFile(DEFAULTS).next() + data["authn_module"] = authn + data["authz_module"] = authz + + t = Template.Template(file=MODULES_TEMPLATE, searchList=[data]) + open("/etc/cobbler/modules.conf","w").write(t.respond()) + +def __test_bootstrap_restart(): rc1 = subprocess.call(["/sbin/service","cobblerd","restart"],shell=False) assert rc1 == 0 @@ -1321,21 +1332,31 @@ def __test_bootstrap_start_clean(): __test_remove_objects() def __test_remove_objects(): + api = cobbler_api.BootAPI() + + # from ro tests d0 = api.find_distro("distro0") i0 = api.find_image("image0") r0 = api.find_image("repo0") - if d0 is not None: - api.remove_distro(d0, recursive = True) - if i0 is not None: - api.remove_image(i0) - if r0 is not None: - api.remove_repo(r0) + + # from rw tests + d1 = api.find_distro("distro1") + i1 = api.find_image("image1") + r1 = api.find_image("repo1") + + if d0 is not None: api.remove_distro(d0, recursive = True) + if i0 is not None: api.remove_image(i0) + if r0 is not None: api.remove_repo(r0) + if d1 is not None: api.remove_distro(d1, recursive = True) + if i1 is not None: api.remove_image(i1) + if r1 is not None: api.remove_repo(r1) def test_xmlrpc_ro(): - __test_bootstrap_start_clean() + __test_bootstrap_restart() + server = xmlrpclib.Server("http://127.0.0.1/cobbler_api") time.sleep(2) @@ -1535,30 +1556,36 @@ def test_xmlrpc_ro(): if found: break - # FIXME: mac registration test code needs fixing + # FIXME: mac registration test code needs a correct settings file in order to + # be enabled. # assert found == True - system = server.get_system("system0") - assert system["netboot_enabled"] == "True" - rc = server.disable_netboot("system0") - assert rc == True - ne = server.get_system("system0")["netboot_enabled"] - assert ne == False - - data = server.get_template_file_for_profile("profile0") - assert data.find("url") != -1 - assert data.find("wget") != -1 - data = server.get_template_file_for_system("system0") - assert data.find("url") != -1 - assert data.find("wget") != -1 - - assert server.run_install_triggers(self,"pre","profile","profile0","127.0.0.1") - assert server.run_install_triggers(self,"post","profile","profile0","127.0.0.1") - assert server.run_install_triggers(self,"pre","system","system0","127.0.0.1") - assert server.run_install_triggers(self,"post","system","system0","127.0.0.1") + # FIXME: the following tests don't work if pxe_just_once is disabled in settings so we need + # to account for this by turning it on... + # basically we need to rewrite the settings file + + # system = server.get_system("system0") + # assert system["netboot_enabled"] == "True" + # rc = server.disable_netboot("system0") + # assert rc == True + # ne = server.get_system("system0")["netboot_enabled"] + # assert ne == False + + # FIXME: tests for new built-in configuration management feature + # require that --template-files attributes be set. These do not + # retrieve the kickstarts but rather config files (see Wiki topics). + # This is probably better tested at the URL level with urlgrabber, one layer + # up, in a different set of tests.. + + # FIXME: tests for rendered kickstart retrieval, same as above + + assert server.run_install_triggers("pre","profile","profile0","127.0.0.1") + assert server.run_install_triggers("post","profile","profile0","127.0.0.1") + assert server.run_install_triggers("pre","system","system0","127.0.0.1") + assert server.run_install_triggers("post","system","system0","127.0.0.1") - ver = server.get_version() - assert type(ver) == type("") + ver = server.version() + assert (str(ver)[0] == "?" or str(ver).find(".") != -1) # do removals via the API since the read-only API can't do them # and the read-write tests are seperate @@ -1569,46 +1596,46 @@ def test_xmlrpc_ro(): # not XMLRPC. Tests polluting the user config is not desirable even though # we do save/restore it. - assert len(api.get_distros() == before_distros) - assert len(api.get_profiles() == before_profiles) - assert len(api.get_systems() == before_systems) - assert len(api.get_images() == before_images) - assert len(api.get_repos() == before_repos) + # assert (len(api.distros()) == before_distros) + # assert (len(api.profiles()) == before_profiles) + # assert (len(api.systems()) == before_systems) + # assert (len(api.images()) == before_images) + # assert (len(api.repos()) == before_repos) def test_xmlrpc_rw(): # ideally we need tests for the various auth modes, not just one # and the ownership module, though this will provide decent coverage. - __test_bootstrap_start_clean() + __test_setup_modules(authn="authn_testing",authz="authz_allowall") + __test_bootstrap_restart() + server = xmlrpclib.Server("http://127.0.0.1/cobbler_api_rw") # remote api = cobbler_api.BootAPI() # local - # read our settings file to see if it looks like the "testing" mode is engaged - modules = open("/etc/cobbler/modules.conf") - data = modules.read() - modules.close() - # note if authn_testing is not engaged this will not work # test getting token, will raise remote exception on fail + token = server.login("testing","testing") # create distro - distro_id = serer.new_distro(token) + did = server.new_distro(token) server.modify_distro(did, "name", "distro1", token) - server.modify_distro(did, "kernel", "/etc/hosts", token) # not a kernel, just for testing - server.modify_distro(did, "initrd", "/etc/hosts", token) # not a kernel, just for testing + server.modify_distro(did, "kernel", "/etc/hosts", token) + server.modify_distro(did, "initrd", "/etc/hosts", token) server.modify_distro(did, "kopts", { "dog" : "fido", "cat" : "fluffy" }, token) # hash or string server.modify_distro(did, "ksmeta", "good=sg1 evil=gould", token) # hash or string server.modify_distro(did, "breed", "redhat", token) server.modify_distro(did, "os-version", "rhel5", token) server.modify_distro(did, "owners", "sam dave", token) # array or string - server.modify_distro(did, "mgmt-classes", "blip") # list or string - server.modify_distro(did, "template-files", "/etc/hosts=/tmp/a /etc/fstab=/tmp/b") # hash or string - server.server.save_distro(did) + server.modify_distro(did, "mgmt-classes", "blip", token) # list or string + server.modify_distro(did, "template-files", "/etc/hosts=/tmp/a /etc/fstab=/tmp/b",token) # hash or string + server.save_distro(did, token) - # now check via /non-xmlrpc/ API to make sure it's properly there and saved. - api.get_distro("distro1") + # use the non-XMLRPC API to check that it's added seeing we tested XMLRPC RW APIs above + # this makes extra sure it's been committed to disk. + api.deserialize() + assert api.find_distro("distro1") != None #profile_id = self.server.new_profile(token) @@ -1618,3 +1645,5 @@ def test_xmlrpc_rw(): # FIXME: cleanup routines should also remove distro1, etc + __test_remove_objects() + |