def testSkipNonExec(self): """Test that non executable files are skipped""" fname = os.path.join(self.rundir, "00test") utils.WriteFile(fname, data="") relname = os.path.basename(fname) self.failUnlessEqual(utils.RunParts(self.rundir, reset_env=True), [(relname, constants.RUNPARTS_SKIP, None)])
def RunWatcherHooks(): """Run the watcher hooks. """ hooks_dir = utils.PathJoin(pathutils.HOOKS_BASE_DIR, constants.HOOKS_NAME_WATCHER) if not os.path.isdir(hooks_dir): return try: results = utils.RunParts(hooks_dir) except Exception as err: # pylint: disable=W0703 logging.exception("RunParts %s failed: %s", hooks_dir, err) return for (relname, status, runresult) in results: if status == constants.RUNPARTS_SKIP: logging.debug("Watcher hook %s: skipped", relname) elif status == constants.RUNPARTS_ERR: logging.warning("Watcher hook %s: error (%s)", relname, runresult) elif status == constants.RUNPARTS_RUN: if runresult.failed: logging.warning( "Watcher hook %s: failed (exit: %d) (output: %s)", relname, runresult.exit_code, runresult.output) else: logging.debug("Watcher hook %s: success (output: %s)", relname, runresult.output) else: raise errors.ProgrammerError( "Unknown status %s returned by RunParts", status)
def testSkipWrongName(self): """Test that wrong files are skipped""" fname = os.path.join(self.rundir, "00test.dot") utils.WriteFile(fname, data="") os.chmod(fname, stat.S_IREAD | stat.S_IEXEC) relname = os.path.basename(fname) self.failUnlessEqual(utils.RunParts(self.rundir, reset_env=True), [(relname, constants.RUNPARTS_SKIP, None)])
def testError(self): """Test error on a broken executable""" fname = os.path.join(self.rundir, "00test") utils.WriteFile(fname, data="") os.chmod(fname, stat.S_IREAD | stat.S_IEXEC) (relname, status, error) = utils.RunParts(self.rundir, reset_env=True)[0] self.failUnlessEqual(relname, os.path.basename(fname)) self.failUnlessEqual(status, constants.RUNPARTS_ERR) self.failUnless(error)
def testOk(self): """Test correct execution""" fname = os.path.join(self.rundir, "00test") utils.WriteFile(fname, data="#!/bin/sh\n\necho -n ciao") os.chmod(fname, stat.S_IREAD | stat.S_IEXEC) (relname, status, runresult) = \ utils.RunParts(self.rundir, reset_env=True)[0] self.failUnlessEqual(relname, os.path.basename(fname)) self.failUnlessEqual(status, constants.RUNPARTS_RUN) self.failUnlessEqual(runresult.stdout, "ciao")
def testRunFail(self): """Test correct execution, with run failure""" fname = os.path.join(self.rundir, "00test") utils.WriteFile(fname, data="#!/bin/sh\n\nexit 1") os.chmod(fname, stat.S_IREAD | stat.S_IEXEC) (relname, status, runresult) = \ utils.RunParts(self.rundir, reset_env=True)[0] self.failUnlessEqual(relname, os.path.basename(fname)) self.failUnlessEqual(status, constants.RUNPARTS_RUN) self.failUnlessEqual(runresult.exit_code, 1) self.failUnless(runresult.failed)
def testSorted(self): """Test executions are sorted""" files = [] files.append(os.path.join(self.rundir, "64test")) files.append(os.path.join(self.rundir, "00test")) files.append(os.path.join(self.rundir, "42test")) for fname in files: utils.WriteFile(fname, data="") results = utils.RunParts(self.rundir, reset_env=True) for fname in sorted(files): self.failUnlessEqual(os.path.basename(fname), results.pop(0)[0])
def RunWatcherHooks(): """Run the watcher hooks. """ hooks_dir = utils.PathJoin(pathutils.HOOKS_BASE_DIR, constants.HOOKS_NAME_WATCHER) if not os.path.isdir(hooks_dir): return try: results = utils.RunParts(hooks_dir) except Exception, err: # pylint: disable=W0703 logging.exception("RunParts %s failed: %s", hooks_dir, err) return
def testRunMix(self): files = [] files.append(os.path.join(self.rundir, "00test")) files.append(os.path.join(self.rundir, "42test")) files.append(os.path.join(self.rundir, "64test")) files.append(os.path.join(self.rundir, "99test")) files.sort() # 1st has errors in execution utils.WriteFile(files[0], data="#!/bin/sh\n\nexit 1") os.chmod(files[0], stat.S_IREAD | stat.S_IEXEC) # 2nd is skipped utils.WriteFile(files[1], data="") # 3rd cannot execute properly utils.WriteFile(files[2], data="") os.chmod(files[2], stat.S_IREAD | stat.S_IEXEC) # 4th execs utils.WriteFile(files[3], data="#!/bin/sh\n\necho -n ciao") os.chmod(files[3], stat.S_IREAD | stat.S_IEXEC) results = utils.RunParts(self.rundir, reset_env=True) (relname, status, runresult) = results[0] self.failUnlessEqual(relname, os.path.basename(files[0])) self.failUnlessEqual(status, constants.RUNPARTS_RUN) self.failUnlessEqual(runresult.exit_code, 1) self.failUnless(runresult.failed) (relname, status, runresult) = results[1] self.failUnlessEqual(relname, os.path.basename(files[1])) self.failUnlessEqual(status, constants.RUNPARTS_SKIP) self.failUnlessEqual(runresult, None) (relname, status, runresult) = results[2] self.failUnlessEqual(relname, os.path.basename(files[2])) self.failUnlessEqual(status, constants.RUNPARTS_ERR) self.failUnless(runresult) (relname, status, runresult) = results[3] self.failUnlessEqual(relname, os.path.basename(files[3])) self.failUnlessEqual(status, constants.RUNPARTS_RUN) self.failUnlessEqual(runresult.output, "ciao") self.failUnlessEqual(runresult.exit_code, 0) self.failUnless(not runresult.failed)
def testMissingDirectory(self): nosuchdir = utils.PathJoin(self.rundir, "no/such/directory") self.assertEqual(utils.RunParts(nosuchdir), [])
def testEmpty(self): """Test on an empty dir""" self.failUnlessEqual(utils.RunParts(self.rundir, reset_env=True), [])