Exemplo n.º 1
0
    def run(self):
        """Runs the corresponding script for every Delivery which has not yet been run."""

        results = {
            AutomaticCorrectionRunner.SUCCESSFULL_RESULTS_KEY: 0,
            AutomaticCorrectionRunner.FAILED_RESULTS_KEY: 0
        }
        pending_automatic_corrections = self.selection_strategy.get_automatic_corrections(
        )
        for pending_automatic_correction in pending_automatic_corrections:

            try:
                self.setup_enviroment.run(pending_automatic_correction,
                                          AutomaticCorrectionRunner.TMP_DIR)
                self.run_script_command.set_script(
                    os.path.join(
                        AutomaticCorrectionRunner.TMP_DIR,
                        os.path.basename(pending_automatic_correction.script)))
                script_result = self.run_script_command.execute()
            except Exception, e:
                script_result = ScriptResult()
                script_result.captured_stdout = "An error has occurred when running the automatic correction process. Error information: " + str(
                    e)
                script_result.exit_value = 2

            script_result.automatic_correction = pending_automatic_correction
            for visitor in self.publish_result_visitors:
                script_result.accept(visitor)
            self.clean_up_tmp_dir()
            if (script_result.exit_value == 0):
                results[AutomaticCorrectionRunner.SUCCESSFULL_RESULTS_KEY] += 1
            else:
                results[AutomaticCorrectionRunner.FAILED_RESULTS_KEY] += 1
Exemplo n.º 2
0
 def run(self):
     """Runs the corresponding script for every Delivery which has not yet been run."""
     
     results = {AutomaticCorrectionRunner.SUCCESSFULL_RESULTS_KEY : 0, AutomaticCorrectionRunner.FAILED_RESULTS_KEY : 0}
     pending_automatic_corrections = self.selection_strategy.get_automatic_corrections()
     for pending_automatic_correction in pending_automatic_corrections:
         
         try:
             self.setup_enviroment.run(pending_automatic_correction, AutomaticCorrectionRunner.TMP_DIR)
             self.run_script_command.set_script(os.path.join(AutomaticCorrectionRunner.TMP_DIR, os.path.basename(pending_automatic_correction.script)))
             script_result = self.run_script_command.execute()
         except Exception, e:
             script_result = ScriptResult()
             script_result.captured_stdout = "An error has occurred when running the automatic correction process. Error information: " + str(e)
             script_result.exit_value = 2
             
         script_result.automatic_correction = pending_automatic_correction
         for visitor in self.publish_result_visitors:
             script_result.accept(visitor)
         self.clean_up_tmp_dir()
         if(script_result.exit_value == 0):
             results[AutomaticCorrectionRunner.SUCCESSFULL_RESULTS_KEY] += 1
         else :
             results[AutomaticCorrectionRunner.FAILED_RESULTS_KEY] += 1
Exemplo n.º 3
0
class PublishResultVisitorTest(TestCase):

    student = None
    practice = None
    course = None
    script = None
    delivery = None
    automatic_correction = None

    course_name = "2012-2"
    student_name = "student"
    student_email = "*****@*****.**"
    practice_deadline = '2012-12-31'
    practice_filepath = "practice_filepath"
    practice_uid = "practice_uid"
    script_file = "/home/anibal/workspace/python-aptana-wkspace/seal/daemon/feature_test/data/successfull_test_script.sh"
    delivery_filepath = "/home/anibal/workspace/python-aptana-wkspace/seal/daemon/feature_test/data/delivery.zip"
    delivery_date = '2012-12-15'
    stdout = "some generated stdout"
    exit_value = 0
    status = 0

    def setUp(self):
        self.automatic_correction = Mock(spec=AutomaticCorrection)
        self.script_result = ScriptResult()
        self.script_result.automatic_correction = self.automatic_correction
        self.script_result.exit_value = self.exit_value
        self.script_result.captured_stdout = self.stdout

    def tearDown(self):
        pass

    def testTheVisitorShouldSaveTheModificationsToTheDatabaseSoThatTheResultsWillBeReflectedOnTheWebsite(
            self):
        user = Mock()
        password = Mock()
        publish_result_visitor_web = PublishResultsVisitorWeb(user, password)
        rest_api_helper = Mock()
        publish_result_visitor_web.rest_api_helper = rest_api_helper

        self.script_result.accept(publish_result_visitor_web)

        self.assertEqual(self.automatic_correction.exit_value, 0)
        self.assertEqual(self.automatic_correction.captured_stdout,
                         self.stdout)
        self.assertEqual(self.automatic_correction.status, 1)
        self.automatic_correction.save.assert_called()
        rest_api_helper.save_automatic_correction.assert_called_with(
            self.automatic_correction)

    def testTheVisitorShouldInvokeTheEmailSendingProcessForTheVisitedResult(
            self):
        user = Mock()
        password = Mock()
        publish_result_visitor_mail = PublishResultsVisitorMail(user, password)
        rest_api_helper = Mock()
        publish_result_visitor_mail.rest_api_helper = rest_api_helper

        self.script_result.accept(publish_result_visitor_mail)

        rest_api_helper.save_mail.assert_called()

    def testTheVisitorShouldConvertTheStatusCodeToTheCorrectString(self):
        auth_user = Mock()
        auth_pass = Mock()

        visitor_mail = PublishResultsVisitorMail(auth_user=auth_user,
                                                 auth_pass=auth_pass)
        string_status = visitor_mail.get_status(0)
        self.assertEqual("pending", string_status)

        string_status = visitor_mail.get_status(1)
        self.assertEqual("successfull", string_status)

        string_status = visitor_mail.get_status(-1)
        self.assertEqual("failed", string_status)

        string_status = visitor_mail.get_status()
        self.assertEquals("unknown status", string_status)

    def testTheVisitorShouldBuildTheSuccessMailToSendProperly(self):
        result = Mock()
        result.automatic_correction = Mock()
        result.automatic_correction.user_mail = "mail"
        result.exit_value = 0
        auth_user = Mock()
        auth_pass = Mock()

        visitor_mail = PublishResultsVisitorMail(auth_user=auth_user,
                                                 auth_pass=auth_pass)
        mail = visitor_mail.build_mail(result)

        self.assertEquals("Resultado de la correccion automatica",
                          mail.subject)
        self.assertEquals(result.automatic_correction.user_mail,
                          mail.recipient)
        self.assertEquals("Ejecucion exitosa, trabajo aprobado.\n\n",
                          mail.body)

    def testTheVisitorShouldBuildTheFailureMailToSendProperly(self):
        result = Mock()
        result.automatic_correction = Mock()
        result.automatic_correction.user_mail = "mail"
        result.exit_value = 1
        auth_user = Mock()
        auth_pass = Mock()

        visitor_mail = PublishResultsVisitorMail(auth_user=auth_user,
                                                 auth_pass=auth_pass)
        mail = visitor_mail.build_mail(result)

        self.assertEquals("Resultado de la correccion automatica",
                          mail.subject)
        self.assertEquals(result.automatic_correction.user_mail,
                          mail.recipient)
        self.assertEquals(
            "Ejecucion fallida, trabajo no aprobado. Puede corregirlo y volver a intentarlo.\n\n",
            mail.body)
Exemplo n.º 4
0
class PublishResultVisitorTest(TestCase):

    student = None
    practice = None
    course = None
    script = None
    delivery = None
    automatic_correction = None

    course_name = "2012-2"
    student_name = "student"
    student_email = "*****@*****.**"
    practice_deadline = "2012-12-31"
    practice_filepath = "practice_filepath"
    practice_uid = "practice_uid"
    script_file = (
        "/home/anibal/workspace/python-aptana-wkspace/seal/daemon/feature_test/data/successfull_test_script.sh"
    )
    delivery_filepath = "/home/anibal/workspace/python-aptana-wkspace/seal/daemon/feature_test/data/delivery.zip"
    delivery_date = "2012-12-15"
    stdout = "some generated stdout"
    exit_value = 0
    status = 0

    def setUp(self):
        self.automatic_correction = Mock(spec=AutomaticCorrection)
        self.script_result = ScriptResult()
        self.script_result.automatic_correction = self.automatic_correction
        self.script_result.exit_value = self.exit_value
        self.script_result.captured_stdout = self.stdout

    def tearDown(self):
        pass

    def testTheVisitorShouldSaveTheModificationsToTheDatabaseSoThatTheResultsWillBeReflectedOnTheWebsite(self):
        user = Mock()
        password = Mock()
        publish_result_visitor_web = PublishResultsVisitorWeb(user, password)
        rest_api_helper = Mock()
        publish_result_visitor_web.rest_api_helper = rest_api_helper

        self.script_result.accept(publish_result_visitor_web)

        self.assertEqual(self.automatic_correction.exit_value, 0)
        self.assertEqual(self.automatic_correction.captured_stdout, self.stdout)
        self.assertEqual(self.automatic_correction.status, 1)
        self.automatic_correction.save.assert_called()
        rest_api_helper.save_automatic_correction.assert_called_with(self.automatic_correction)

    def testTheVisitorShouldInvokeTheEmailSendingProcessForTheVisitedResult(self):
        user = Mock()
        password = Mock()
        publish_result_visitor_mail = PublishResultsVisitorMail(user, password)
        rest_api_helper = Mock()
        publish_result_visitor_mail.rest_api_helper = rest_api_helper

        self.script_result.accept(publish_result_visitor_mail)

        rest_api_helper.save_mail.assert_called()

    def testTheVisitorShouldConvertTheStatusCodeToTheCorrectString(self):
        auth_user = Mock()
        auth_pass = Mock()

        visitor_mail = PublishResultsVisitorMail(auth_user=auth_user, auth_pass=auth_pass)
        string_status = visitor_mail.get_status(0)
        self.assertEqual("pending", string_status)

        string_status = visitor_mail.get_status(1)
        self.assertEqual("successfull", string_status)

        string_status = visitor_mail.get_status(-1)
        self.assertEqual("failed", string_status)

        string_status = visitor_mail.get_status()
        self.assertEquals("unknown status", string_status)

    def testTheVisitorShouldBuildTheSuccessMailToSendProperly(self):
        result = Mock()
        result.automatic_correction = Mock()
        result.automatic_correction.user_mail = "mail"
        result.exit_value = 0
        auth_user = Mock()
        auth_pass = Mock()

        visitor_mail = PublishResultsVisitorMail(auth_user=auth_user, auth_pass=auth_pass)
        mail = visitor_mail.build_mail(result)

        self.assertEquals("Resultado de la correccion automatica", mail.subject)
        self.assertEquals(result.automatic_correction.user_mail, mail.recipient)
        self.assertEquals("Ejecucion exitosa, trabajo aprobado.\n\n", mail.body)

    def testTheVisitorShouldBuildTheFailureMailToSendProperly(self):
        result = Mock()
        result.automatic_correction = Mock()
        result.automatic_correction.user_mail = "mail"
        result.exit_value = 1
        auth_user = Mock()
        auth_pass = Mock()

        visitor_mail = PublishResultsVisitorMail(auth_user=auth_user, auth_pass=auth_pass)
        mail = visitor_mail.build_mail(result)

        self.assertEquals("Resultado de la correccion automatica", mail.subject)
        self.assertEquals(result.automatic_correction.user_mail, mail.recipient)
        self.assertEquals(
            "Ejecucion fallida, trabajo no aprobado. Puede corregirlo y volver a intentarlo.\n\n", mail.body
        )