コード例 #1
0
    def test_path_info_stripped_from_new_name(self):
        name_with_path = '../../hack/you'
        self.instructor_file.rename(name_with_path)

        self.instructor_file.refresh_from_db()

        expected_new_name = 'you'
        self.assertEqual(expected_new_name, self.instructor_file.name)
        with utils.ChangeDirectory(core_ut.get_project_files_dir(self.project)):
            self.assertTrue(os.path.isfile(expected_new_name))
コード例 #2
0
ファイル: tests.py プロジェクト: neiljohari/autograder-server
    def test_change_directory(self):
        new_dirname = 'my_dir'
        os.mkdir('my_dir')

        self.assertEqual(os.getcwd(), settings.MEDIA_ROOT)

        with utils.ChangeDirectory(new_dirname):
            self.assertEqual(os.path.join(settings.MEDIA_ROOT, new_dirname),
                             os.getcwd())

        self.assertEqual(os.getcwd(), settings.MEDIA_ROOT)
コード例 #3
0
    def test_valid_rename(self):
        original_last_modified = self.instructor_file.last_modified
        new_name = 'new_filename'
        self.instructor_file.rename(new_name)

        self.instructor_file.refresh_from_db()

        self.assertNotEqual(original_last_modified, self.instructor_file.last_modified)
        self.assertEqual(new_name, self.instructor_file.name)
        with utils.ChangeDirectory(core_ut.get_project_files_dir(self.project)):
            self.assertTrue(os.path.isfile(new_name))
コード例 #4
0
    def test_extra_files_discarded(self):
        files = [
            SimpleUploadedFile('spam.cpp', b'blah'),
            SimpleUploadedFile('eggs.cpp', b'merp'),
            SimpleUploadedFile('test_spam.cpp', b'cheeese'),
        ]
        extra_files = [
            SimpleUploadedFile('extra.cpp', b'merp'),
            SimpleUploadedFile('extra_extra.cpp', b'spam')
        ]

        submission = self._do_files_discarded_test(files, extra_files)

        with utils.ChangeDirectory(core_ut.get_submission_dir(submission)):
            for file_ in extra_files:
                self.assertFalse(os.path.exists(file_.name))
コード例 #5
0
    def test_valid_create(self):
        instructor_file = InstructorFile.objects.validate_and_create(
            project=self.project,
            file_obj=self.file_obj)

        self.assertEqual(self.file_obj.name, instructor_file.name)
        expected_abspath = os.path.join(
            core_ut.get_project_files_dir(self.project), self.file_obj.name)
        self.assertEqual(expected_abspath, instructor_file.abspath)
        self.assertEqual(self.file_obj.size, instructor_file.size)

        self.file_obj.seek(0)
        self.assertEqual(self.file_obj.read(), instructor_file.file_obj.read())

        with utils.ChangeDirectory(core_ut.get_project_files_dir(self.project)):
            self.assertTrue(os.path.isfile(self.file_obj.name))
コード例 #6
0
def _make_submission_archive(
        task: ag_models.DownloadTask,
        submission_fdbks: Iterator[SubmissionResultFeedback], num_submissions,
        dest_filename):
    with open(dest_filename, 'wb') as archive:
        with zipfile.ZipFile(archive, 'w') as z:
            for index, fdbk in enumerate(submission_fdbks):
                submission = fdbk.submission
                archive_dirname = ('_'.join(submission.group.member_names) +
                                   '-' + submission.timestamp.isoformat())
                with utils.ChangeDirectory(
                        core_ut.get_submission_dir(submission)):
                    for filename in submission.submitted_filenames:
                        target_name = os.path.join(
                            '{}_{}'.format(task.project.course.name,
                                           task.project.name), archive_dirname,
                            filename)
                        z.write(filename, arcname=target_name)

                if index % _PROGRESS_UPDATE_FREQUENCY == 0:
                    task.progress = (index / num_submissions) * 100
                    task.save()
                    print('Updated task {} progress: {}'.format(
                        task.pk, task.progress))
コード例 #7
0
    def test_valid_init(self):
        SimpleFileTuple = namedtuple('SimpleFileTuple', ['name', 'content'])

        files_to_submit = sorted([
            SimpleFileTuple('spam.cpp', b'blah'),
            SimpleFileTuple('eggs.cpp', b'merp'),
            SimpleFileTuple('test_spam.cpp', b'cheeese')
        ])

        now = timezone.now()

        submitter = 'steve'
        submission: ag_models.Submission = ag_models.Submission.objects.validate_and_create(
            group=self.group,
            submitted_files=[
                SimpleUploadedFile(name, content)
                for name, content in files_to_submit
            ],
            submitter=submitter)

        submission.refresh_from_db()

        self.assertEqual(submitter, submission.submitter)
        self.assertEqual(submission.status,
                         ag_models.Submission.GradingStatus.received)
        self.assertEqual(submission.error_msg, '')
        self.assertCountEqual(submission.missing_files, [])
        self.assertCountEqual((file_.name for file_ in files_to_submit),
                              submission.submitted_filenames)

        self.assertTrue(submission.count_towards_daily_limit)
        self.assertFalse(submission.is_past_daily_limit)

        self.assertTrue(submission.count_towards_total_limit)

        self.assertFalse(submission.is_bonus_submission)

        self.assertEqual([], submission.does_not_count_for)

        self.assertLess(submission.timestamp - now,
                        timezone.timedelta(seconds=2))

        # Check file contents in the filesystem
        self.assertTrue(os.path.isdir(core_ut.get_submission_dir(submission)))
        with utils.ChangeDirectory(core_ut.get_submission_dir(submission)):
            self.assertTrue(
                os.path.isdir(constants.FILESYSTEM_RESULT_OUTPUT_DIRNAME))
            for name, content in files_to_submit:
                self.assertEqual(name, submission.get_file(name).name)
                self.assertEqual(content, submission.get_file(name).read())

                self.assertTrue(os.path.isfile(os.path.basename(name)))
                with open(name, 'rb') as f:
                    self.assertEqual(content, f.read())

        # Check submitted files using member accessors
        expected = sorted(files_to_submit)
        actual = sorted(submission.submitted_files,
                        key=lambda file_: file_.name)
        for expected_file, loaded_file in zip(expected, actual):
            self.assertEqual(expected_file.name,
                             os.path.basename(loaded_file.name))
            self.assertEqual(expected_file.content, loaded_file.read())