示例#1
0
def transfer_job(env, kind, source_code):
    """"Sends the job to Zeus for given ``kind``.

        Used ``env`` keys:
          * ``submission_id``
          * ``language``
          * ``saved_environ_id``
          * ``zeus_problem_id``
          * ``zeus_id``
    """
    # Env is already saved in evalmgr, use saved_environ_id to
    # identify results.
    zeus = get_zeus_server(env['zeus_id'])
    saved_environ_id = env['saved_environ_id']

    return_url = settings.ZEUS_PUSH_GRADE_CALLBACK_URL + reverse(
        'zeus_push_grade_callback',
        kwargs={
            'saved_environ_id': saved_environ_id,
            'signature': zeus_url_signature(saved_environ_id)
        })

    zeus.send_regular(kind=kind,
                      return_url=return_url,
                      source_code=source_code,
                      zeus_problem_id=env['zeus_problem_id'],
                      language=env['language'],
                      submission_id=['submission_id'])
示例#2
0
def submit_job(env, kind=None, **kwargs):
    """Submits the job to Zeus for given ``kind``.

       Used ``environ`` keys:
         * ``contest_id``
         * ``submission_id``
         * ``language``
         * ``zeus_id``
         * ``zeus_problem_id``

       Altered ``environ`` keys:
          * ``zeus_check_uids`` - dictionary mapping grading kind to
                                 Zeus's ``check_uid``
    """
    zeus = get_zeus_server(env['zeus_id'])
    ps = ProgramSubmission.objects.get(id=env['submission_id'])
    check_uid = get_random_string(length=16)

    return_url = settings.ZEUS_PUSH_GRADE_CALLBACK_URL + reverse(
        'zeus_push_grade_callback',
        kwargs={
            'check_uid': check_uid,
            'signature': zeus_url_signature(check_uid)
        })
    zeus_submission_id = zeus.send_regular(
        kind=kind,
        source_file=ps.source_file,
        zeus_problem_id=env['zeus_problem_id'],
        language=env['language'],
        submission_id=env['submission_id'],
        return_url=return_url)
    env.setdefault('zeus_submission_ids', {})[kind] = zeus_submission_id
    env.setdefault('zeus_check_uids', {})[kind] = check_uid
    return env
示例#3
0
    def test_push_grade(self):
        submission = ProgramSubmission.objects.get()
        problem = Problem.objects.get(id=1)
        problem.controller_name = \
                'oioioi.zeus.tests.ZeusProblemController'
        problem.save()
        ZeusProblemController(problem).judge(submission)
        self.assertEqual(SavedEnviron.objects.count(), 1)

        saved_environ = SavedEnviron.objects.get()
        saved_environ_id = saved_environ.id
        signature = zeus_url_signature(saved_environ_id)

        url = reverse('oioioi.zeus.views.push_grade',
                      kwargs={
                          'saved_environ_id': saved_environ_id,
                          'signature': signature
                      })
        data = {u'compilation_output': Base64String("CE")}
        response = self.client.post(url,
                                    _json_base64_encode(data),
                                    follow=True,
                                    content_type="application/json")
        self.assertEqual(response.status_code, 200)
        submission = ProgramSubmission.objects.get()
        self.assertEqual(submission.status, 'CE')
示例#4
0
def transfer_job(env, kind, source_code):
    """"Sends the job to Zeus for given ``kind``.

        Used ``env`` keys:
          * ``submission_id``
          * ``language``
          * ``saved_environ_id``
          * ``zeus_problem_id``
          * ``zeus_id``
    """
    # Env is already saved in evalmgr, use saved_environ_id to
    # identify results.
    zeus = get_zeus_server(env['zeus_id'])
    saved_environ_id = env['saved_environ_id']

    return_url = settings.ZEUS_PUSH_GRADE_CALLBACK_URL + reverse(
        'zeus_push_grade_callback',
        kwargs={
            'saved_environ_id': saved_environ_id,
            'signature': zeus_url_signature(saved_environ_id)
        }
    )

    zeus.send_regular(kind=kind,
            return_url=return_url,
            source_code=source_code,
            zeus_problem_id=env['zeus_problem_id'],
            language=env['language'],
            submission_id=['submission_id'])
示例#5
0
    def test_push_grade(self):
        submission = ProgramSubmission.objects.get()
        problem = Problem.objects.get(id=1)
        problem.controller_name = \
                'oioioi.zeus.controllers.ZeusProblemController'
        problem.save()
        ZeusProblemController(problem).judge(submission)
        self.assertEqual(ZeusAsyncJob.objects.count(), 1)

        job = ZeusAsyncJob.objects.get()
        env = json.loads(job.environ)
        check_uid = env['zeus_check_uids']['INITIAL']
        signature = zeus_url_signature(check_uid)

        url = reverse('oioioi.zeus.views.push_grade',
                      kwargs={
                          'check_uid': check_uid,
                          'signature': signature
                      })
        data = {u'compilation_output': Base64String("CE")}
        response = self.client.post(url,
                                    _json_base64_encode(data),
                                    follow=True,
                                    content_type="application/json")
        self.assertEqual(response.status_code, 200)
        submission = ProgramSubmission.objects.get()
        self.assertEqual(submission.status, 'CE')
示例#6
0
    def test_push_grade(self):
        submission = ProgramSubmission.objects.get()
        problem = Problem.objects.get(id=1)
        problem.controller_name = \
                'oioioi.zeus.tests.ZeusProblemController'
        problem.save()
        ZeusProblemController(problem).judge(submission)
        self.assertEqual(SavedEnviron.objects.count(), 1)

        saved_environ = SavedEnviron.objects.get()
        saved_environ_id = saved_environ.id
        signature = zeus_url_signature(saved_environ_id)

        url = reverse('zeus_push_grade_callback',
                      kwargs={
                        'saved_environ_id': saved_environ_id,
                        'signature': signature})
        data = {u'compilation_output': Base64String("CE")}
        response = self.client.post(url, _json_base64_encode(data),
                follow=True, content_type="application/json")
        self.assertEqual(response.status_code, 200)
        submission = ProgramSubmission.objects.get()
        self.assertEqual(submission.status, 'CE')
示例#7
0
 def test_incorrect_signature(self):
     check_uid = 'ZeusSubmissionIdIsARandomString'
     signature = zeus_url_signature('Blah')
     self.assertFalse(verify_zeus_url_signature(check_uid, signature))
示例#8
0
 def test_correct_signature(self):
     check_uid = 'ZeusSubmissionIdIsARandomString'
     signature = zeus_url_signature(check_uid)
     self.assertTrue(verify_zeus_url_signature(check_uid, signature))
示例#9
0
 def test_incorrect_signature(self):
     check_uid = 'ZeusSubmissionIdIsARandomString'
     signature = zeus_url_signature('Blah')
     self.assertFalse(verify_zeus_url_signature(check_uid, signature))
示例#10
0
 def test_correct_signature(self):
     check_uid = 'ZeusSubmissionIdIsARandomString'
     signature = zeus_url_signature(check_uid)
     self.assertTrue(verify_zeus_url_signature(check_uid, signature))