r1189 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:52:03 +0000 (Fri, 02 Mar 2012)
New Revision: 1189
Modified:
trunk/v7/report.py
Log:
799118 - FEAT: v7 should preserve SUT hardware information when results are removed
Modified: trunk/v7/report.py
===================================================================
--- trunk/v7/report.py 2012-03-02 13:51:34 UTC (rev 1188)
+++ trunk/v7/report.py 2012-03-02 13:52:03 UTC (rev 1189)
@@ -23,7 +23,7 @@
from v7.controller import Controller
from v7.command import Command, V7CommandException
from v7.hash import hashModule
-from v7.certificationtest import CertificationDocument
+from v7.certificationtest import ResultsDocument
from v7.environment import Environment
class Report(Controller):
@@ -204,7 +204,7 @@
# write the test plan and results xml to etc/v7
etcDirectory = submissionDirectory + "/etc/v7"
self.makeDirectoryPath(etcDirectory)
- resultsXML = CertificationDocument()
+ resultsXML = ResultsDocument()
resultsXML.load(os.path.join(self.options.data, self.environment.getResultsFileName()))
resultsXML.compressToFile(os.path.join(etcDirectory, self.environment.getResultsFileName()))
shutil.copy("/etc/v7.xml", os.path.join(etcDirectory, "v7.xml")) # save v7 environment settings
12 years, 2 months
r1188 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:51:34 +0000 (Fri, 02 Mar 2012)
New Revision: 1188
Modified:
trunk/v7/rundocument.py
Log:
799118 - FEAT: v7 should preserve SUT hardware information when results are removed
Modified: trunk/v7/rundocument.py
===================================================================
--- trunk/v7/rundocument.py 2012-03-02 13:50:53 UTC (rev 1187)
+++ trunk/v7/rundocument.py 2012-03-02 13:51:34 UTC (rev 1188)
@@ -285,7 +285,7 @@
def getSubCertification(self):
subCertificationElement = self.getChildElement(Tags.certification_test)
if subCertificationElement:
- subCertification = certificationtest.CertificationDocument()
+ subCertification = certificationtest.ResultsDocument()
subCertification.importElement(subCertificationElement)
return subCertification
# otherwise
12 years, 2 months
r1187 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:50:53 +0000 (Fri, 02 Mar 2012)
New Revision: 1187
Modified:
trunk/v7/device.py
Log:
hal replacement
Modified: trunk/v7/device.py
===================================================================
--- trunk/v7/device.py 2012-03-02 13:49:56 UTC (rev 1186)
+++ trunk/v7/device.py 2012-03-02 13:50:53 UTC (rev 1187)
@@ -22,6 +22,7 @@
class Device:
def __init__(self, udiSynonym=None, properties=None):
+ self.udi = None
if properties:
self.properties = properties
try:
12 years, 2 months
r1186 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:49:56 +0000 (Fri, 02 Mar 2012)
New Revision: 1186
Modified:
trunk/v7/fvtest.py
Log:
799118 - FEAT: v7 should preserve SUT hardware information when results are removed
Modified: trunk/v7/fvtest.py
===================================================================
--- trunk/v7/fvtest.py 2012-03-02 13:49:00 UTC (rev 1185)
+++ trunk/v7/fvtest.py 2012-03-02 13:49:56 UTC (rev 1186)
@@ -32,7 +32,7 @@
from v7.device import Device
from v7.command import Command, V7CommandException, V7CommandError, V7CommandErrorOutput
from v7.environment import Environment
-from v7.certificationtest import CertificationDocument
+from v7.certificationtest import ResultsDocument
from v7.redhatrelease import RedHatRelease
from v7.image import Image
@@ -510,7 +510,7 @@
def getGuestTestRunResult(self):
# open the test results, and look for the run
- results = CertificationDocument()
+ results = ResultsDocument()
results.load(os.path.join(self.getOutputDirectory(), self.environment.getResultsFileName()))
test = results.getTest(self.testToRun)
if not test:
12 years, 2 months
r1185 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:49:00 +0000 (Fri, 02 Mar 2012)
New Revision: 1185
Modified:
trunk/v7/redhatrelease.py
Log:
532557 - test suite should alarm operator and fail test runs on non GA kernel
Modified: trunk/v7/redhatrelease.py
===================================================================
--- trunk/v7/redhatrelease.py 2012-03-02 13:47:46 UTC (rev 1184)
+++ trunk/v7/redhatrelease.py 2012-03-02 13:49:00 UTC (rev 1185)
@@ -87,6 +87,7 @@
self.kernelRPMName = None
self.kernelDevelRPMName = "kernel-devel"
+ self.kernelVersionRelease = None
if "Red Hat" in self.getProduct() and self.getVersion() == 4:
pattern = re.compile("(?P<versionRelease>[^a-z]*)(?P<name>smp|hugemem|largesmp)?$")
match = pattern.search(unameOutput)
@@ -96,6 +97,7 @@
self.kernelRPMName = "kernel-%s-%s" % (match.group("name"), match.group("versionRelease"))
else:
self.kernelRPMName = "kernel-%s" % match.group("versionRelease")
+ self.kernelVersionRelease = match.group("versionRelease")
elif "Red Hat" in self.getProduct() and self.getVersion() >= 5:
pattern = re.compile("(?P<versionRelease>.*)(?P<product>el[0-9]+)(?P<flavor>xen|PAE|rt)?(?P<arch>.*)$")
@@ -110,12 +112,15 @@
# RT kernel tags rt on the end of el5
if match.group("flavor") == "rt":
self.kernelRPMName = self.kernelRPMName + "rt"
+
+ self.kernelVersionRelease = match.group("versionRelease")
elif 'Fedora' in self.getProduct():
pattern = re.compile("(?P<versionRelease>.*)(?P<product>fc[0-9]+)(?P<arch>.*)$")
match = pattern.search(unameOutput)
if match:
self.kernelRPMName = "kernel-%s%s%s" % (match.group("versionRelease"), match.group("product"), match.group("arch"))
+ self.kernelVersionRelease = match.group("versionRelease")
if not self.kernelRPMName:
print "Error: could not determine kernel RPM name"
@@ -152,6 +157,7 @@
def getKernelRPMName(self): return self.kernelRPMName
def getKernelDevelRPMName(self): return self.kernelDevelRPMName
def getKernel(self): return self.kernel
+ def getKernelVersionRelease(self): return self.kernelVersionRelease
def getArch(self): return self.arch
def getKernelFlavor(self): return self.kernelFlavor
12 years, 2 months
r1184 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:47:46 +0000 (Fri, 02 Mar 2012)
New Revision: 1184
Modified:
trunk/v7/certificationtest.py
trunk/v7/environment.py
trunk/v7/hardwaretest.py
Log:
799118 - FEAT: v7 should preserve SUT hardware information when results are removed
Modified: trunk/v7/certificationtest.py
===================================================================
--- trunk/v7/certificationtest.py 2012-03-02 13:44:03 UTC (rev 1183)
+++ trunk/v7/certificationtest.py 2012-03-02 13:47:46 UTC (rev 1184)
@@ -24,16 +24,98 @@
import deviceclassdocument
import version
+class CertificationDocument(DocumentBase):
+ """ CertificationDocument represents the certification in progress on the SUT """
-class CertificationDocument(DocumentBase):
-
def __init__(self, topElement=None, document=None, debugging=False):
DocumentBase.__init__(self)
self.element = topElement
self.document = document
+ self.Debugging = debugging
+
+ def new(self):
+ self._new(topElement=Tags.certification_test, stylesheet="/v7/css/results.css")
+ hardwareElement = self.findOrCreateElement(self.document.documentElement, Tags.hardware)
+ certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
+
+ def copy(self, original):
+ self._new(topElement=Tags.certification_test, stylesheet="/v7/css/results.css")
+ self.element = self.findOrCreateElement(self.document, Tags.certification_test)
+ hardware = self.document.importNode(original.findOrCreateElement(original.document.documentElement, Tags.hardware), True)
+ self.element.appendChild(hardware)
+ certification = self.document.importNode(original.findOrCreateElement(original.document.documentElement, Tags.certification), True)
+ self.element.appendChild(certification)
+
+
+ def setHardware(self, tag, value):
+ hardwareElement = self.findOrCreateElement(self.document.documentElement, Tags.hardware)
+ element = self.findOrCreateElement(hardwareElement, tag)
+ self.setTextNode(element, value)
+
+ def getHardware(self, tag):
+ hardwareElement = self.findOrCreateElement(self.document.documentElement, Tags.hardware)
+ element = self.findOrCreateElement(hardwareElement, tag)
+ textNode = self.getTextNode(element)
+ # YK: return "unknown" if can not find such hardware info
+ if textNode:
+ if textNode.data:
+ if textNode.data.isspace():
+ return "unknown"
+ else:
+ return textNode.data
+ else:
+ return "unknown"
+ else:
+ return "unknown"
+
+
+
+ def setOS(self, tag, value):
+ certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
+ osElement = self.findOrCreateElement(certificationElement, Tags.os)
+ element = self.findOrCreateElement(osElement, tag)
+ self.setTextNode(element, value)
+
+ def getOS(self, tag):
+ certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
+ osElement = self.findOrCreateElement(certificationElement, Tags.os)
+ element = self.findOrCreateElement(osElement, tag)
+ return self.getTextNode(element).data
+
+ def setCertificationID(self, id):
+ certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
+ certificationElement.setAttribute(Attributes.id, id)
+
+ def getCertificationID(self):
+ certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
+ return certificationElement.getAttribute(Attributes.id)
+
+ def getOSProductShortName(self):
+ longName = self.getOS(Tags.product)
+ if "Red Hat Enterprise Linux" in longName:
+ return "RHEL"
+
+ #otherwise
+ return longName
+
+ def getName(self):
+ # name is: v7-<vendor>-<model>-<os><release>_<arch>
+ name = "v7-%s-%s-%s%s_%s" % (self.getHardware(Tags.vendor), self.getHardware(Tags.model), self.getOS(Tags.name), self.getOS(Tags.release), self.getHardware(Tags.arch))
+ return name.replace(" ", "_")
+
+ def getVersion(self):
+ return self.document.documentElement.getAttribute(Attributes.v7_version)
+ def getRelease(self):
+ return self.document.documentElement.getAttribute(Attributes.v7_release)
+
+
+class ResultsDocument(CertificationDocument):
+ """ ResultsDocument represents the certification test results """
+
+ def __init__(self, topElement=None, document=None, debugging=False):
+ CertificationDocument.__init__(self, topElement, document, debugging)
self.currentTestElement = None
- self.Debugging = debugging
if self.element and self.document:
self._wrap()
@@ -49,6 +131,10 @@
certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
self.deviceClasses = deviceclassdocument.InitDeviceClasses(self.element, self.document)
+ def copy(self, orginal):
+ CertificationDocument.copy(self, orginal)
+ self.deviceClasses = deviceclassdocument.BuildDeviceClasses(self.document)
+
def load(self, filename):
DocumentBase.load(self, filename)
self.deviceClasses = dict()
@@ -102,29 +188,8 @@
def getTestServer(self):
return self.getHardware(Tags.test_server)
-
-
- def setHardware(self, tag, value):
- hardwareElement = self.findOrCreateElement(self.document.documentElement, Tags.hardware)
- element = self.findOrCreateElement(hardwareElement, tag)
- self.setTextNode(element, value)
+
- def getHardware(self, tag):
- hardwareElement = self.findOrCreateElement(self.document.documentElement, Tags.hardware)
- element = self.findOrCreateElement(hardwareElement, tag)
- textNode = self.getTextNode(element)
- # YK: return "unknown" if can not find such hardware info
- if textNode:
- if textNode.data:
- if textNode.data.isspace():
- return "unknown"
- else:
- return textNode.data
- else:
- return "unknown"
- else:
- return "unknown"
-
def getDeviceClass(self, deviceClassName):
return self.deviceClasses[deviceClassName]
@@ -137,26 +202,8 @@
print "%s registered device %s" % (name, device.getUDI())
pass
- def setOS(self, tag, value):
- certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
- osElement = self.findOrCreateElement(certificationElement, Tags.os)
- element = self.findOrCreateElement(osElement, tag)
- self.setTextNode(element, value)
+
- def getOS(self, tag):
- certificationElement = self.findOrCreateElement(self.document.documentElement, Tags.certification)
- osElement = self.findOrCreateElement(certificationElement, Tags.os)
- element = self.findOrCreateElement(osElement, tag)
- return self.getTextNode(element).data
-
- def getOSProductShortName(self):
- longName = self.getOS(Tags.product)
- if "Red Hat Enterprise Linux" in longName:
- return "RHEL"
-
- #otherwise
- return longName
-
def appendTest(self, test):
try:
deviceClass = self.deviceClasses[test.getDeviceClass()].appendTest(test)
@@ -286,10 +333,7 @@
tests.append(test)
return tests
- def getVersion(self):
- return self.document.documentElement.getAttribute(Attributes.v7_version)
- def getRelease(self):
- return self.document.documentElement.getAttribute(Attributes.v7_release)
+
def getTest(self, testName, udi = None, recursive=False):
if recursive:
@@ -370,10 +414,7 @@
return {'count':count,'run':runCount, 'neverPassed':neverPassedCount, 'neverFailed':neverFailedCount, 'start':start}
- def getName(self):
- # name is: v7-<vendor>-<model>-<os><release>_<arch>
- name = "v7-%s-%s-%s%s_%s" % (self.getHardware(Tags.vendor), self.getHardware(Tags.model), self.getOS(Tags.name), self.getOS(Tags.release), self.getHardware(Tags.arch))
- return name.replace(" ", "_")
+
def getSubTestsGroupedByNameAndParent(self):
subTestsByNameAndParent = list()
@@ -387,7 +428,7 @@
def getSubCertifications(self, run):
subCertifications = list()
for subCertificationElement in run.getChildElements(Tags.certification_test):
- subCertifications.append(CertificationDocument(subCertificationElement, run.document))
+ subCertifications.append(ResultsDocument(subCertificationElement, run.document))
return subCertifications
def getSubTests(self, subCertifications):
@@ -411,7 +452,7 @@
attachmentElement.parentNode.removeChild(attachmentElement)
if __name__ == "__main__":
- doc = CertificationDocument()
+ doc = ResultsDocument()
doc.load("/var/v7/results.xml")
doc.deleteAttachments()
doc.save("test.xml")
Modified: trunk/v7/environment.py
===================================================================
--- trunk/v7/environment.py 2012-03-02 13:44:03 UTC (rev 1183)
+++ trunk/v7/environment.py 2012-03-02 13:47:46 UTC (rev 1184)
@@ -30,6 +30,7 @@
self.defaultServerDirectory = "/var/www/v7"
self.defaultExport = "export"
self.defaultDatabaseName = "results.xml"
+ self.defaultCertificationName = "certification.xml"
self.defaultTaskFile = "tasks"
self.defaultLockFile = "/var/lock/subsys/v7"
self.defaultStoreDirectory = "/var/v7/store"
@@ -68,6 +69,7 @@
element = self.findOrCreateElement(filesystemElement, Tags.data_directory)
self.setTextNode(element, self.defaultDataDirectory)
element.setAttribute(Attributes.database_name, self.defaultDatabaseName)
+ element.setAttribute(Attributes.certification_name, self.defaultCertificationName)
element.setAttribute(Attributes.task_file, self.defaultTaskFile)
element.setAttribute(Attributes.lock_file, self.defaultLockFile)
@@ -181,6 +183,10 @@
dataDirectoryElement = self.findOrCreateElement(self._getFilesystemElement(), Tags.data_directory)
return dataDirectoryElement.getAttribute(Attributes.database_name)
+ def getCertificationFileName(self):
+ dataDirectoryElement = self.findOrCreateElement(self._getFilesystemElement(), Tags.data_directory)
+ return dataDirectoryElement.getAttribute(Attributes.certification_name)
+
def getLockFile(self):
dataDirectoryElement = self.findOrCreateElement(self._getFilesystemElement(), Tags.data_directory)
return dataDirectoryElement.getAttribute(Attributes.lock_file)
@@ -192,6 +198,9 @@
def getResultsPath(self):
return "%s/%s" % (self.getDataDirectory(), self.getResultsFileName())
+ def getCertificationPath(self):
+ return "%s/%s" % (self.getDataDirectory(), self.getCertificationFileName())
+
def getTaskFilePath(self):
return "%s/%s" % (self.getDataDirectory(), self.getTaskFile())
Modified: trunk/v7/hardwaretest.py
===================================================================
--- trunk/v7/hardwaretest.py 2012-03-02 13:44:03 UTC (rev 1183)
+++ trunk/v7/hardwaretest.py 2012-03-02 13:47:46 UTC (rev 1184)
@@ -31,7 +31,7 @@
from v7.controller import Controller
from v7.tags import Tags, Attributes, Constants, TestTag
from v7.environment import Environment
-from v7.certificationtest import CertificationDocument
+from v7.certificationtest import ResultsDocument, CertificationDocument
from v7.testdocument import TestDocument
from v7.test import TestParameters
from v7.report import Report
@@ -85,7 +85,7 @@
"\tcertify - execute the remaining tests from the certification test plan\n"\
"\tprint \t- print certification test results\n"\
"\tsubmit \t- submit certification test results\n"\
- "\tclean \t- remove all results and temporary files\n"\
+ "\tclean [results | all] \t- remove all results and temporary files\n"\
"\trun \t- run specific certification tests\n"\
"\tcontinue \t- continue a test run\n"\
"\tversion\t- prints the version of v7\n"\
@@ -114,11 +114,11 @@
action="store_true", dest="enable", default=False,
help="Re-enable a test")
parser.add_option("-d", "--model",
- action="store_true", dest="model", default=False,
- help="Edit model and vendor information")
- parser.add_option("-s", "--rhts",
- action="store_true", dest="rhts", default=False,
- help="report test results to RHTS")
+ action="store_true", dest="certification", default=False,
+ help="Edit model and vendor information (deprecated)")
+ parser.add_option("-c", "--certification",
+ action="store_true", dest="certification", default=False,
+ help="Edit certification, model and vendor information")
parser.add_option("-a", "--add",
action="store_true", dest="add", default=False,
help="Add a test")
@@ -131,9 +131,6 @@
parser.add_option("-l", "--last",
action="store_true", dest="latest", default=False,
help="Show only the latest test run")
- parser.add_option("-k", "--kudzu",
- action="store_true", dest="kudzu", default=False,
- help="Use kudzu to discover additional devices for plan")
parser.add_option("-v", "--device",
action="store", type="string", dest="device",
help="The logical device to be tested.")
@@ -151,7 +148,8 @@
self.options.tag = [TestTag.certification]
if len(self.args) > 2 or (len(self.args) == 2
- and not (self.args[0] == "server" and self.args[1] in ["start", "stop", "status", "daemon"])):
+ and not (self.args[0] == "server" and self.args[1] in ["start", "stop", "status", "daemon"])
+ and not (self.args[0] == Constants.clean and self.args[1] in [Constants.results, Constants.all])):
parser.error("Invalid command")
exit(1)
@@ -222,7 +220,7 @@
def load(self, silent=False):
try:
- self.certification = CertificationDocument(self.Debugging)
+ self.certification = ResultsDocument(self.Debugging)
self.certification.load(self.environment.getResultsPath())
except IOError:
self.certification = None
@@ -231,16 +229,36 @@
print "loaded results %s" % self.environment.getResultsPath()
def doDiscover(self):
- self.certification = CertificationDocument(self.Debugging)
- self.certification.new()
+ self.certification = ResultsDocument(self.Debugging)
+
+ # try and recover old hardware and os info
+ if os.path.exists(self.environment.getCertificationPath()):
+ certificationDocument = CertificationDocument()
+ certificationDocument.load(self.environment.getCertificationPath())
+ self.certification.copy(certificationDocument)
+ else:
+ self.certification.new()
+ self.getBiosInfo()
+ print "Hardware: %s %s %s" % (self.certification.getHardware(Tags.vendor),
+ self.certification.getHardware(Tags.make),
+ self.certification.getHardware(Tags.model))
+ self.getOSInfo()
+
+ # save the certification info off to certification.xml
+ certificationDocument = CertificationDocument()
+ certificationDocument.copy(self.certification)
+ certificationDocument.save(self.environment.getCertificationPath())
+
if self.testServer:
self.checkTestServer(self.testServer)
self.certification.setTestServer(self.testServer)
- self.getBiosInfo()
- print "Hardware: %s %s %s" % (self.certification.getHardware(Tags.vendor),
- self.certification.getHardware(Tags.make),
- self.certification.getHardware(Tags.model))
+ self.certification.setDiscoverTime(self.getCurrentUTCTime())
+ self.certification.save(self.environment.getResultsPath())
+
+ return True
+
+ def getOSInfo(self):
self.certification.setOS(Tags.name, self.redHatRelease.getCodeName())
if self.redHatRelease.getVersionPointUpdate():
self.certification.setOS(Tags.release, self.redHatRelease.getVersionPointUpdate())
@@ -256,10 +274,9 @@
hostname = socket.gethostname()
if hostname:
self.certification.setOS(Tags.hostname, hostname)
- self.certification.setDiscoverTime(self.getCurrentUTCTime())
- self.certification.save(self.environment.getResultsPath())
- print "saved configuration to %s" % self.environment.getResultsPath()
- return True
+
+ # set the certification id to blank for now
+ self.certification.setCertificationID(0)
def checkVirtualization(self):
# use the method introduced in
@@ -321,8 +338,8 @@
self.checkTestServer(self.options.server)
self.setServerOnTests()
- if self.options.model:
- self.editModel()
+ if self.options.certification:
+ self.editCertification()
self.certification.save(self.environment.getResultsPath())
print "saved test plan to %s" % self.environment.getResultsPath()
@@ -763,10 +780,6 @@
run.setSummary(summary)
run.getResultsAttachments(self.environment, outputFilePath)
-
-
- if self.options.rhts:
- self.reportToRHTS(test, run.getSummary(), outputFilePath)
except OSError, e:
print "Test error: %s" % e
@@ -1054,8 +1067,20 @@
return False
def doClean(self):
+ subcommand = Constants.results
+ try:
+ subcommand = self.args[1]
+ except IndexError:
+ pass
+ if subcommand not in [Constants.results, Constants.all]:
+ print "Error: invalid option %s, should be %s or %s" % (subcommand, Constants.results, Constants.all)
+ return False
+
+
if self.ui.promptConfirm("Are you sure you want to delete all test results?"):
self.removeLogFiles()
+ if subcommand == Constants.all and self.ui.promptConfirm("Also remove certification data?"):
+ self.removeCertificationFiles()
return True
@@ -1329,19 +1354,8 @@
print "removing V7 results..."
os.system("rm -f %s" % self.environment.getResultsPath())
- def reportToRHTS(self, test, result, outputFilePath):
- try:
- rhtsTestName = os.environ["TEST"]
- except KeyError:
- rhtsTestName = "v7"
- returnCode = 2 # 0 = PASS, 1 = WARN, 2 = FAIL
- if result == Constants.PASS:
- returnCode = 0
- elif result == Constants.WARN:
- returnCode = 1
- rhtsCommand = "rhts-report-result %s/%s %u %s" % (rhtsTestName, test.getName(), returnCode, outputFilePath)
- print rhtsCommand
- os.system(rhtsCommand)
+ def removeCertificationFiles(self):
+ os.system("rm -f %s" % self.environment.getCertificationPath())
def getLock(self):
if os.path.exists(self.environment.getLockFile()):
@@ -1369,7 +1383,7 @@
print "Error: HAL daemons \"%s\" is not running - please start it." % daemon
print e
- def editModel(self):
+ def editCertification(self):
editable = [Tags.vendor, Tags.make, Tags.model]
for tag in editable:
value = self.certification.getHardware(tag)
@@ -1378,5 +1392,19 @@
value = self.ui.prompt("Please enter the %s:" % tag, answers)
if len(value) > 0:
self.certification.setHardware(tag, value)
+
+ certificationID = self.certification.getCertificationID()
+ answers = None
+ if certificationID:
+ answers = list()
+ answers.append(certificationID)
+ value = self.ui.prompt("Please enter the certification ID:", answers)
+ if len(value) > 0:
+ self.certification.setCertificationID(value)
+
+ # copy over to certification.xml
+ certificationDocument = CertificationDocument()
+ certificationDocument.copy(self.certification)
+ certificationDocument.save(self.environment.getCertificationPath())
12 years, 2 months
r1183 - trunk/tests/fencing
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:44:03 +0000 (Fri, 02 Mar 2012)
New Revision: 1183
Modified:
trunk/tests/fencing/fencing.py
Log:
702168 - RedHat v7-1.3-35 Hardware Test Suite: v7 server requires fence-agents rpm
Modified: trunk/tests/fencing/fencing.py
===================================================================
--- trunk/tests/fencing/fencing.py 2012-03-02 13:42:05 UTC (rev 1182)
+++ trunk/tests/fencing/fencing.py 2012-03-02 13:44:03 UTC (rev 1183)
@@ -70,8 +70,11 @@
def sendFencingRequest(self, subtest):
self.waitForLull()
request = self.url + self.getAgentParameters()
- print "Sending Request:"
- print request
+ if self.debug == Constants.high:
+ print "Sending Request:"
+ print request
+ else:
+ print "Sending Request..."
sys.stdout.flush()
try:
request = urllib2.Request('http://%s%s' % (self.getTestServer(), request))
@@ -85,6 +88,12 @@
print "%s response: --------------------------------------------" % self.getTestServer()
for line in response: sys.stdout.write(line)
print "---------------------------------------------------------"
+
+ # check if our request was well-received
+ if not self.getResults():
+ print "Error: request to server for fencing failed."
+ return False
+
print "Please wait for test to continue"
sys.stdout.flush()
@@ -99,8 +108,11 @@
def getResults(self):
request = self.url + self.getAgentParameters() + "&results=1"
- print "Sending Request:"
- print request
+ if self.debug == Constants.high:
+ print "Sending Request:"
+ print request
+ else:
+ print "Sending Request..."
try:
request = urllib2.Request('http://%s%s' % (self.getTestServer(), request))
opener = urllib2.build_opener()
@@ -175,6 +187,19 @@
print "Server side test for %s\n" % self.Name()
outFile.write("Server side test for %s\n" % self.Name())
+ # make sure fence-agents rpm is install (server-side)
+ rpm = "fence-agents"
+ try:
+ rpmQ = Command("rpm -q " + rpm)
+ rpmQ.echo()
+ except V7CommandException, e:
+ errorMessage = "Error: The %s rpm is not installed on the test server." % rpm
+ print errorMessage
+ outFile.write(errorMessage + "\n")
+ sys.stdout.flush()
+ outFile.flush()
+ return False
+
try:
if args["subtest"] == "reboot":
fenceCommand = Command(self.getAgentCommand(args) + " -o reboot ")
@@ -208,6 +233,8 @@
if fenceCommand.errors:
for line in fenceCommand.errors:
outFile.write(line)
+ sys.stdout.flush()
+ outFile.flush()
return False
return True
12 years, 2 months
r1182 - trunk/tests/info
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:42:05 +0000 (Fri, 02 Mar 2012)
New Revision: 1182
Modified:
trunk/tests/info/info.py
Log:
532557 - test suite should alarm operator and fail test runs on non GA kernel
Modified: trunk/tests/info/info.py
===================================================================
--- trunk/tests/info/info.py 2012-03-02 13:39:02 UTC (rev 1181)
+++ trunk/tests/info/info.py 2012-03-02 13:42:05 UTC (rev 1182)
@@ -14,13 +14,15 @@
#
# Author: Greg Nichols
#
-import os, sys, string, shutil, re
+import os, sys, string, shutil, re, urllib2
import v7.version
from v7.test import Test
from v7.tags import Constants, DeviceClass, TestTag
from v7.command import Command, V7CommandException
from v7.redhatrelease import RedHatRelease
+from v7.environment import Environment
+from v7.kernelInfo import KernelInfo
class InfoTest(Test):
@@ -35,6 +37,8 @@
self.techPreviewModuleWhitelist = ["fscache"]
+ self.environment = Environment()
+
def tags(self):
return [TestTag.noninteractive, TestTag.certification]
@@ -52,7 +56,8 @@
# this is kind of weird - is this what the hardware catalog expects?
print "+ rpm -ql %s" % self.redHatRelease.getKernelRPMName()
- success = True
+ success = self.checkKernelIsGA()
+
#is the kernel tainted?
try:
taintedFile = open("/proc/sys/kernel/tainted", "r")
@@ -112,6 +117,58 @@
success = False
return success
+
+ def checkKernelIsGA(self):
+
+ if "Red Hat"not in self.redHatRelease.getProduct() or self.redHatRelease.getVersion() < 5:
+ print "Warning: could not check kernel GA status for %s version %s" % (self.redHatRelease.getProduct(), self.redHatRelease.getVersion())
+ # return True
+
+ kernelInfo = None
+ kernelInfoFile = "kernelInfo.xml"
+ #try to download the kernel info file
+ fileURL = self.environment.getPartnerServerURL() + kernelInfoFile
+ response = None
+ if self.debug is not Constants.off:
+ print "Getting kernel information file %s " % fileURL
+ sys.stdout.flush()
+ try:
+ request = urllib2.Request(fileURL)
+ opener = urllib2.build_opener()
+ response = opener.open(request).read()
+ if response:
+ # save it locally - renamed with a tmp prefix
+ kernelInfoFile = "tmp-" + kernelInfoFile
+ file = open(kernelInfoFile, "w")
+ file.write(response)
+ file.close()
+ if self.debug is not Constants.off:
+ print "saved kernel info to " + kernelInfoFile
+ else:
+ print "Warning: Could not download kernel info file - kernel information may be out-of-date."
+ except Exception, e:
+ response = None
+ if self.debug != Constants.off:
+ print "Warning: could not download kernel information file:"
+ print e
+
+
+ try:
+ if self.debug is not Constants.off:
+ print "reading kernel info file " + kernelInfoFile
+ kernelInfo = KernelInfo(kernelInfoFile)
+ RHELGAKernel = kernelInfo.getGAKernel(self.redHatRelease.getVersion(), self.redHatRelease.getUpdate())
+ if RHELGAKernel == self.redHatRelease.getKernelVersionRelease():
+ print "Kernel is RHEL %s.%s GA: %s" % (self.redHatRelease.getVersion(), self.redHatRelease.getUpdate(), RHELGAKernel)
+ return True
+ else:
+ print "Kernel is %s and not RHEL %s.%s GA (%s)" % (self.redHatRelease.getKernelVersionRelease(), self.redHatRelease.getVersion(), self.redHatRelease.getUpdate(), RHELGAKernel)
+ return False
+ except IOError:
+ print "Error: could not open kernel info file " + kernelInfoFile
+ return False
+
+
def checkSELinux(self):
errors = list()
@@ -174,6 +231,10 @@
print "Saving modified source files:"
print tokens[1]
shutil.copy(tokens[1], self.getOutputDirectory())
+
+ print "Checking v7 configuration."
+ if not self.environment.showChangesFromDefault():
+ print " Using defaults."
return verified
@@ -311,13 +372,18 @@
return self.readSymbols(symbols)
def getModuleFile(self, module):
- modInfoSrcVersion = Command("modinfo -F srcversion %s" % module).getString()
- sysSrcVersion = open("/sys/module/%s/srcversion" % module).readline().strip()
- if sysSrcVersion == modInfoSrcVersion:
- moduleFile =Command("modinfo -F filename %s" % module).getString()
- if os.path.islink(moduleFile):
- moduleFile = os.readlink(moduleFile)
- return moduleFile
+ try:
+ modInfoSrcVersion = Command("modinfo -F srcversion %s" % module).getString()
+ sysSrcVersion = open("/sys/module/%s/srcversion" % module).readline().strip()
+ if sysSrcVersion == modInfoSrcVersion:
+ moduleFile =Command("modinfo -F filename %s" % module).getString()
+ if os.path.islink(moduleFile):
+ moduleFile = os.readlink(moduleFile)
+ return moduleFile
+ except V7CommandException, e:
+ print "Error: could no find module file:"
+ print e
+ e.command.printErrors()
return None
12 years, 2 months
r1181 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:39:02 +0000 (Fri, 02 Mar 2012)
New Revision: 1181
Modified:
trunk/v7/tags.py
Log:
532557 - test suite should alarm operator and fail test runs on non GA kernel
Modified: trunk/v7/tags.py
===================================================================
--- trunk/v7/tags.py 2012-03-02 13:38:33 UTC (rev 1180)
+++ trunk/v7/tags.py 2012-03-02 13:39:02 UTC (rev 1181)
@@ -21,6 +21,7 @@
type="type"
os="os"
release="release"
+ update="update"
kernel="kernel"
name="name"
version="version"
@@ -67,6 +68,7 @@
host="host"
v7_image="v7-image"
time_limits="time-limits"
+ v7_kernel_info="v7-kernel-info"
class Attributes:
@@ -109,6 +111,9 @@
results_warning_size="results-warning-size"
export="export"
transfer="transfer"
+ kernel="kernel"
+ certification_name="certification-name"
+ id="id"
class Constants:
PASS="PASS"
@@ -191,6 +196,9 @@
local="local"
nfs="nfs"
rcp="rcp"
+ results="results"
+ all="all"
+ clean="clean"
class SystemFunction:
system = "system"
12 years, 2 months
r1180 - trunk/v7
by gnichols@fedoraproject.org
Author: gnichols
Date: 2012-03-02 13:38:33 +0000 (Fri, 02 Mar 2012)
New Revision: 1180
Added:
trunk/v7/kernelInfo.py
trunk/v7/kernelInfo.xml
Log:
532557 - test suite should alarm operator and fail test runs on non GA kernel
Added: trunk/v7/kernelInfo.py
===================================================================
--- trunk/v7/kernelInfo.py (rev 0)
+++ trunk/v7/kernelInfo.py 2012-03-02 13:38:33 UTC (rev 1180)
@@ -0,0 +1,58 @@
+# Copyright (c) 2012 Red Hat, Inc. All rights reserved. This copyrighted material
+# is made available to anyone wishing to use, modify, copy, or
+# redistribute it subject to the terms and conditions of the GNU General
+# Public License v.2.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# Author: Greg Nichols
+
+
+from certificationtest import DocumentBase
+from tags import Tags, Attributes
+
+class KernelInfo(DocumentBase):
+
+
+ def __init__(self, file):
+ DocumentBase.__init__(self)
+ try:
+ self.load(file)
+ self.element = self.document.documentElement
+ except IOError:
+ print "Error: could not open file " + file
+
+ def getRelease(self, release):
+ for releaseElement in self.getChildElements(Tags.release):
+ if releaseElement.getAttribute(Attributes.number) == release:
+ return releaseElement
+ return None
+
+
+ def getGAKernel(self, release, update):
+ releaseElement = self.getRelease(release)
+ if releaseElement:
+ for element in releaseElement.childNodes:
+ if element.nodeName == Tags.update and element.getAttribute(Attributes.number) == update:
+ return element.getAttribute(Attributes.kernel)
+ return None
+
+if __name__ == "__main__":
+
+ info = KernelInfo("kernelInfo.xml")
+ for release in ['5', '6']:
+ update = 0
+ while True:
+ kernel = info.getGAKernel(release, "%s" % update)
+ if not kernel:
+ break
+ print "RHEL %s.%s: %s" % (release, update, kernel)
+ update += 1
+
+
Added: trunk/v7/kernelInfo.xml
===================================================================
--- trunk/v7/kernelInfo.xml (rev 0)
+++ trunk/v7/kernelInfo.xml 2012-03-02 13:38:33 UTC (rev 1180)
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<?xml-stylesheet href="/v7/css/kernel.css" type="text/css"?>
+<v7-kernel-info v7-version='1.5' v7-release='2'>
+ <release number='5'>
+ <update number='0' kernel='2.6.18-8'/>
+ <update number='1' kernel='2.6.18-53'/>
+ <update number='2' kernel='2.6.18-92'/>
+ <update number='3' kernel='2.6.18-128'/>
+ <update number='4' kernel='2.6.18-164'/>
+ <update number='5' kernel='2.6.18-194'/>
+ <update number='6' kernel='2.6.18-238'/>
+ <update number='7' kernel='2.6.18-274'/>
+ </release>
+ <release number='6'>
+ <update number='0' kernel='2.6.32-71'/>
+ <update number='1' kernel='2.6.32-131.0.15'/>
+ <update number='2' kernel='2.6.32-220'/>
+ </release>
+</v7-kernel-info>
\ No newline at end of file
12 years, 2 months