output = None
re_action = re.compile("^ACTION (PASSED|FAILED):\s+(.*)$")
for l in f:
- if l.startwith("Running action "):
+ if l.startswith("Running action "):
name = l[len("Running action "):].strip()
output = []
continue
m = re_action.match(l)
if m:
- assert name == m.group(1)
+ assert name == m.group(2).strip(), "%r != %r" % (name, m.group(2))
yield name, output
name = None
output = []
for name, output in extract_phase_output(f):
if name == "test":
return output
- return None
+ raise NoTestOutput()
def build_status_from_logs(log, err):
self.rev = rev
+class NoTestOutput(Exception):
+ """The build did not have any associated test output."""
+
+
class Build(object):
"""A single build of a tree on a particular host using a particular compiler.
"""
from cStringIO import StringIO
import os
import testtools
-import unittest
from buildfarm.build import (
Build,
- BuildResultStore,
BuildStatus,
NoSuchBuildError,
+ NoTestOutput,
UploadBuildResultStore,
build_status_from_logs,
+ extract_test_output,
)
from buildfarm import BuildFarm
self.x = UploadBuildResultStore(
os.path.join(self.path, "data", "upload"))
+
+
+class ExtractSubunitTests(testtools.TestCase):
+
+ def extract_test_output(self, log):
+ try:
+ return "".join(extract_test_output(StringIO(log)))
+ except NoTestOutput:
+ return None
+
+ def test_not_present(self):
+ self.assertEquals(None, self.extract_test_output(""))
+
+ def test_simple(self):
+ self.assertEquals("FOO\n", self.extract_test_output("""
+
+Running action test
+FOO
+ACTION PASSED: test
+
+"""))
build_status_from_logs,
LogFileMissing,
MissingRevisionInfo,
+ NoTestOutput,
revision_from_log,
+ extract_test_output,
)
from buildfarm.hostdb import NoSuchHost
-from buildfarm.sqldb import BuildFarm, StormBuild
+from buildfarm import BuildFarm, StormBuild
buildfarm = BuildFarm()
except NoSuchHost, e:
print "Unable to find host %s" % e.name
+
+for build in store.find(StormBuild, StormBuild.basename != None):
+ subunit_path = build.basename + ".subunit"
+ if os.path.exists(subunit_path):
+ continue
+ try:
+ test_output = "".join(extract_test_output(build.read_log()))
+ except (LogFileMissing, NoTestOutput):
+ continue
+ f = open(subunit_path, 'w')
+ try:
+ f.write(test_output)
+ finally:
+ f.close()
+
buildfarm.commit()