Example #1
0
def create_job_assignment(job, computer, project, params=None):

    assignment = JobAssignment(
        job = job.model,
        project = project,
        computer = computer,
    ).get_domain_object()
    assignment.create_config(params)
    assignment.model.version = assignment.job_version
    assignment.model.save()

    if len(ProjectClient.objects.filter(project=project, computer=computer)) == 0:
        client = ProjectClient(project=project, computer=computer)
        client.generate_password()
        client.save()

    return assignment
    def setUp(self):
        super(TestResults, self).setUp()
        self._mock_resolver()
        self.db = get_database_connection()

        self.project_name = u"project"
        self.project = Project(name=self.project_name, tracker_uri="http://example.com", repository_uri="/tmp/project")
        self.buildmaster = Buildmaster(project=self.project, buildmaster_port=0, webstatus_port=1)

        self.computer = BuildComputer(hostname="localhost")

        self.job = Job(slug='cthulhubot-sleep').get_domain_object()

        self.assignment = JobAssignment(
            job = self.job.model,
            project = self.project,
            computer = self.computer,
        ).get_domain_object()

        self.client = ProjectClient(project=self.project, computer=self.computer)
class TestResults(DatabaseTestCase):
    def setUp(self):
        super(TestResults, self).setUp()
        self._mock_resolver()
        self.db = get_database_connection()

        self.project_name = u"project"
        self.project = Project(name=self.project_name, tracker_uri="http://example.com", repository_uri="/tmp/project")
        self.buildmaster = Buildmaster(project=self.project, buildmaster_port=0, webstatus_port=1)

        self.computer = BuildComputer(hostname="localhost")

        self.job = Job(slug='cthulhubot-sleep').get_domain_object()

        self.assignment = JobAssignment(
            job = self.job.model,
            project = self.project,
            computer = self.computer,
        ).get_domain_object()

        self.client = ProjectClient(project=self.project, computer=self.computer)

    def _mock_resolver(self):
        self._original_resolver = urlresolvers.get_resolver

        resolver = Mock()
        self.prefix = get_script_prefix()
        self.mocked_uri = resolver.reverse.return_value="heureka"

        urlresolvers.get_resolver = lambda conf: resolver

    def _unmock_resolver(self):
        urlresolvers.get_resolver = self._original_resolver

    def insert_build(self, time_end=False, time_start=False):
        if not time_start:
            time_start = datetime(year=2009, month=01, day=01, hour=12, minute=00, second=00)

        if time_end is False:
            time_end = datetime(year=2009, month=01, day=01, hour=12, minute=00, second=01)

        build = {
            'builder' : str(self.assignment.get_identifier()),
            'slaves' : [self.client.get_name()],
            'number' : 1,
            'time_start' : time_start,
            'time_end' : time_end,
            'steps' : [],
        }
        self.db.builds.insert(build)

        return build

    def insert_step(self, build, result=False, successful=False, time_end=False, time_start=False):
        if result is False:
            result = FAILURE

        if time_start is False:
            time_start = datetime(year=2009, month=01, day=01, hour=12, minute=00, second=00)

        if time_end is False:
            time_end = datetime(year=2009, month=01, day=01, hour=12, minute=00, second=01)

        step = {
            'time_start' : time_start,
            'time_end' : time_end,
            'stdout' : '',
            'stderr' : '',
            'headers' : '',
            'successful' : successful,
            'result' : result,
        }
        self.db.steps.insert(step)
        build['steps'].append(step)
        self.db.builds.save(build)
        return step

    def test_build_results_before_first_run(self):
        self.assert_equals(u"No result yet", self.assignment.get_last_build_status())

    def test_build_results_before_first_run_ended(self):
        self.insert_build(time_end=None)
        self.assert_equals(u"No result yet", self.assignment.get_last_build_status())

    def test_failed_result(self):
        build = self.insert_build(time_end=datetime(year=2009, month=01, day=01, hour=12, minute=00, second=01))
        self.insert_step(build)

        self.assert_equals(u"Failure", self.assignment.get_last_build_status())

    def test_build_retrieved(self):
        build = self.insert_build()
        self.assert_equals(build, self.assignment.get_builds()[0])

    def test_failure_before_success_is_still_fails(self):
        build = self.insert_build()
        self.insert_step(build)
        self.insert_step(build, result=SUCCESS)
        self.assert_equals(u"Failure", self.assignment.get_last_build_status())

    def test_simple_success(self):
        build = self.insert_build()
        self.insert_step(build, result=SUCCESS)
        self.assert_equals(u"Success", self.assignment.get_last_build_status())

    def test_last_finished_build_used_when_last_is_not_finished_yet(self):
        build = self.insert_build(time_end=datetime(year=2009, month=01, day=01, hour=12, minute=00, second=01))
        self.insert_step(build, result=SUCCESS)

        build = self.insert_build(time_start=datetime(year=2009, month=01, day=01, hour=13, minute=00, second=00), time_end=None)
        self.insert_step(build, result=FAILURE, time_start = datetime(year=2009, month=01, day=01, hour=13, minute=00, second=00), time_end=datetime(year=2009, month=01, day=01, hour=13, minute=00, second=01))
        self.insert_step(build, result=None, time_end=None, time_start=datetime(year=2009, month=01, day=01, hour=13, minute=00, second=01))
        self.assert_equals(u"Success", self.assignment.get_last_build_status())