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'])
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
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')
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'])
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')
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')
def test_incorrect_signature(self): check_uid = 'ZeusSubmissionIdIsARandomString' signature = zeus_url_signature('Blah') self.assertFalse(verify_zeus_url_signature(check_uid, signature))
def test_correct_signature(self): check_uid = 'ZeusSubmissionIdIsARandomString' signature = zeus_url_signature(check_uid) self.assertTrue(verify_zeus_url_signature(check_uid, signature))