Author: gnichols Date: 2010-01-12 16:13:59 +0000 (Tue, 12 Jan 2010) New Revision: 285
Modified: trunk/v7/hardwaretest.py Log: 488145 - FEAT: HTS should provide a run-time dependency option for installation
Modified: trunk/v7/hardwaretest.py =================================================================== --- trunk/v7/hardwaretest.py 2010-01-12 16:03:31 UTC (rev 284) +++ trunk/v7/hardwaretest.py 2010-01-12 16:13:59 UTC (rev 285) @@ -220,13 +220,18 @@ print "Hardware: %s %s %s" % (self.certification.getHardware(Tags.vendor), self.certification.getHardware(Tags.make), self.certification.getHardware(Tags.model)) - self.certification.setOS(Tags.name, self.getReleaseName()) - releaseNumber = self.getReleaseNumber() - if releaseNumber: - self.certification.setOS(Tags.release, releaseNumber) + (product, name, number) = self.getRedHatRelease() + self.certification.setOS(Tags.name, name) + if number: + self.certification.setOS(Tags.release, number) else: print "Error: could not determine OS release number" - return False + return False + if product: + self.certification.setOS(Tags.product, product) + else: + print "Error: could not determine OS product name" + return False print "OS: %s %s" % (self.certification.getOS(Tags.name), self.certification.getOS(Tags.release)) hostname = socket.gethostname() if hostname: @@ -272,6 +277,7 @@ if not self.certification: self.doDiscover() self.saveNewPlan(tests) + self.checkRequiredRPMs(tests) else: if not self.checkPlan(): return False @@ -347,6 +353,56 @@ missingTests[key].markDeleted()
return True + + def checkRequiredRPMs(self, tests): + print "Checking for additional required packages based on the test plan:" + requiredRPMs = dict() + for test in tests: + rpms = test.getRequiredRPMs() + if len(rpms) > 0: + sys.stdout.write(test.Name() + " requires ") + needComma = False + for rpm in rpms: + if needComma: + sys.stdout.write(", ") + needComma = True + sys.stdout.write(rpm) + requiredRPMs[rpm] = rpm + sys.stdout.write("\n") + + while True: + missingRPMs = list() + for rpm in requiredRPMs.keys(): + try: + rpmQ = Command("rpm -q " + rpm) + rpmQ.getString("not installed") # this should throw and exception if rpm is there + missingRPMs.append(rpm) + except V7CommandException, e: + # "not installed" not there, so we're ok + pass + if len(missingRPMs) > 0: + print "The following rpms are required for testing:" + missingRPMList = "" + for rpm in missingRPMs: + missingRPMList = "%s %s" % (missingRPMList, rpm) + print missingRPMList + if self.ui.promptConfirm("Would you like to install them now?"): + try: + yum = Command("yum install -y " + missingRPMList) + print "Running yum: --------------------------------" + yum.echo() + print "---------------------------------------------" + except V7CommandException, e: + print "Error: Could not install rpm" + print e + print "Rechecking required rpms" + else: + print "Warning: some tests may fail due to missing rpms" + return False + else: + print "All required rpms installed" + return True + print ""
def doServer(self, args): if len(args) > 1: @@ -794,24 +850,14 @@ f=open("/etc/redhat-release") line=f.readline() f.close() - return line - - def getReleaseNumber(self): - """Return the RHEL release number""" - line=self.getRedHatRelease() - # the number is the next string after "release" - lastword="" - for word in line.split(): - if lastword == "release": - return word - lastword=word - # otherwise, not found - return None - - def getReleaseName(self): - """Return the name of the RHEL release running on the system""" - line=self.getRedHatRelease() - return line[line.rindex('(')+1:line.rindex(')')] + if line: + pattern = re.compile("^(?P<product>[a-zA-Z\ ]+)release (?P<number>[1-9.]+) ((?P<name>[a-zA-Z]+))") + match = pattern.match(line) + product = None + if match.group("product"): + product = match.group("product").strip() + return (product, match.group("number"), match.group("name")) + return (None, None, None)
def makeTestRunDirectory(self): """Create a directory for the current test run"""
v7-commits@lists.stg.fedorahosted.org