Проект простой проверялки Д/З
Концепция
- вся информация хранится в Moin, код просто вставляется в страницу
- вставка специально оформляется (например, вход и выход в тесте)
запуск тестов в статически развёрнутом Hasher-е (без сети) с переписыванием только тестирующей и пользовательской частей
Можно ли сделать из страницы «форму», т. е. проверять исходник на наличие каких-то обязательных частей и вообще синтаксическую правильность, и не давать записывать, если испорчено?
Интерфейс/база на основе MoinMoin
Одна страничка вида Contests/Name на каждое тестирование
Подстраничка вида /TaskName для задачи
Недоступна пользователям на запись
Подстранички вида /TaskName/TestName для тестов
недоступны пользователям
как задаётся тестирующая программа?
- {1) Запускающая программа
Компилирующая программа
- Индивидуальные странички пользователей
Подстранички UserName/ContestName/TaskName для решений
недоступные другим пользователям
- Кнопка «проверить»
Сгенерированная тестером страница отчёта UserName/ContestName/TaskName/Report
неизменяемая
с подсчётом количества запусков
Какой-нибудь Atom Editor для редактирования кода
Сводная страница со всеми Report-ами UserName/ContestName/Reports
Удобно отформатированная
пользователь в группе ContestName
- Макросы:
- Создание тестирования
- Создание задачи
- Создание теста
не забыть про указание/задание тестирующей программы
- Волшебный макрос, показывающий, каких решений ещё нет, и позволяющий создать страничку с решением по шаблону
- Страшная кнопка «Проверить»:
- Состояние «Не проверено» (отчёт отсутствуют, или решение новее отчёта и в очереди тестера его нет)
- Сформировать задание-архив:
- Выковырять исходник
Исходники
Определить запускающую программу
Определить тип исходника и компилирующий набор
- Определить тестирующую программу
- Выковырять все тесты
- Выковырять исходник
- Поставить архив в очередь тестеру
- Сформировать задание-архив:
- Состояние «Проверяется» (решение новее отчёта и ждёт очереди тестера)
- Состояние «Проверено» (решение новее отчёта и проверено в очереди тестера)
- Сформировать отчёт
- Состояние «Готово» (отчёт новее решения)
- Состояние «Не проверено» (отчёт отсутствуют, или решение новее отчёта и в очереди тестера его нет)
Тестер на другой машине (передача по ssh?)
Тестер в чруте без сети (hasher)
Первичное развёртывание Hasher, один раз на запуск системы
тип окружения (что ставить в Hasher)
- Очередь заданий-архивов
- Управление очередью заданий:
- поставить → ID
- получить список ID
- посмотреть статус ID (нету, не готово, готово, готово с ошибками)
- снять ID
устаревание неснятых заданий
- Каждое задание — с перезатиранием $TEST, по всем тестам
- Каждый тест — с перезатиранием $HOME
Пользовательские файлы копируются в $HOME от builder
Это вынутое содержимое UserName/ContestName/TaskName
Тесты и тестирующие программы копируются в $TEST от rooter
Это вынутое содержимое Contests/Name/TaskName/*
+запускающая программа
- Стадии теста:
Компиляция исходника (с ограничением по времени)
- Запуск тестирующей программы, на входе — первый тест (с ограничением по времени и памяти)
- Второй…
- …
- Генерация отчёта
- Управление очередью заданий:
Дерево страниц
UserName0
ContestName0
TaskName0
Report
TaskName1
- …
Reports
ContestName1
- …
UserName1
- …
Contest
Name0
TaskName0
TestName0
TestName1
- …
TaskName1
- …
Name1
- …