def test_cmp_smaller(self): a = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 2)]) b = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 1)]) c = BuildStatus([("CONFIGURE", 2), ("TEST", 3)]) d = BuildStatus([], set(["super error"])) e = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 1)], set(["super error"])) # less stage means smaller, more error/higher error code means smaller as well self.assertEquals(cmp(a, b), -1) self.assertEquals(cmp(c, b), -1) self.assertEquals(cmp(d, c), -1) self.assertEquals(cmp(e, c), -1)
def get_summary_builds(self, min_age=0): """Return last build age, status for each tree/host/compiler. :param min_age: Minimum timestamp of builds to report :return: iterator over tree, status """ store = self._get_store() return ((tree, BuildStatus.__deserialize__(status_str)) for (tree, status_str) in store.execute(""" SELECT obd.tree, obd.status AS status_str FROM build obd INNER JOIN( SELECT MAX(age) age, tree, host, compiler FROM build WHERE age > ? GROUP BY tree, host, compiler ) ibd ON obd.age = ibd.age AND obd.tree = ibd.tree AND obd.host = ibd.host AND obd.compiler = ibd.compiler; """, (min_age, )))
def get_summary_builds(self, min_age=0): """Return last build age, status for each tree/host/compiler. :param min_age: Minimum timestamp of builds to report :return: iterator over tree, status """ store = self._get_store() return ((tree, BuildStatus.__deserialize__(status_str)) for (tree, status_str) in store.execute( """ SELECT obd.tree, obd.status AS status_str FROM build obd INNER JOIN( SELECT MAX(age) age, tree, host, compiler FROM build WHERE age > ? GROUP BY tree, host, compiler ) ibd ON obd.age = ibd.age AND obd.tree = ibd.tree AND obd.host = ibd.host AND obd.compiler = ibd.compiler; """, (min_age, )))
def test_disk_full(self): status = BuildStatus([("CONFIGURE", 0), ("BUILD", 4)], set(["timeout"])) self.assertEquals( '<span class="status passed">ok</span>/<span class="status failed">4</span>' '(<span class="status failed">timeout</span>)', html_build_status(status))
def test_failed_build(self): status = BuildStatus([("CONFIGURE", 0), ("BUILD", 4)]) self.assertEquals( '<span class="status passed">ok</span>/<span class="status failed">4</span>', html_build_status(status))
def test_empty(self): status = BuildStatus() self.assertEquals("?", html_build_status(status))
def assertRegressedSince(self, expected, old_status, new_status): (stages1, other_failures1) = old_status (stages2, other_failures2) = new_status a = BuildStatus(stages1, set(other_failures1)) b = BuildStatus(stages2, set(other_failures2)) self.assertEquals(expected, b.regressed_since(a))
def test_str_other_failures(self): a = BuildStatus([("CONFIGURE", 3), ("BUILD", 2)], set(["panic"])) self.assertEquals("panic", str(a))
def test_str(self): a = BuildStatus([("CONFIGURE", 3), ("BUILD", 2)]) self.assertEquals("3/2", str(a))
def test_cmp_with_other_failures(self): d = BuildStatus([], set(["super error"])) e = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 1)], set(["super error"])) self.assertEquals(cmp(d, e), -1)
def test_cmp_intermediate_errors(self): a = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 3)]) b = BuildStatus([("CONFIGURE", 2), ("TEST", 7), ("CC_CHECKER", 3)]) self.assertEquals(cmp(a, b), 1)
def test_cmp_other_failures(self): self.assertEquals(cmp( BuildStatus((), set(["foo"])), BuildStatus((), set(["foo"]))), 0)
def test_cmp_empty(self): self.assertEquals(cmp(BuildStatus(), BuildStatus()), 0)
def test_cmp_equal(self): a = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 2)]) b = BuildStatus([("CONFIGURE", 2), ("TEST", 3), ("CC_CHECKER", 2)]) self.assertEquals(cmp(a, b), 0)