Добрый день!
Встала задача о тестировании решений на Си сразу под несколько платформ: грубо говоря, код должен быть таким, чтобы корректно проходить тесты сразу в нескольких окружениях (sparc, sparc64, mips, arm, ..., и всё это под разными ОС).
Часть решения уже есть -- сделаны QEMU-образы под все необходимые платформы и есть возможность устанавливать на них нужный софт и предоставлять им доступ к материнской (реальной) файловой системе или подключаться к ним по ssh чтобы что-то выполнить и прочитать результат.
Однако есть две проблемы.
Во-первых, код под целевую платформу нужно как-то скомпилировать. Здесь я пока что вижу только две опции: либо заставлять материнскую систему заниматься кросс-компиляцией и порождать сразу много исполняемых файлов (solution_sparc, solution_mips, ...), либо во избежание проблем с libc и прочими библиотеками -- подключаться в процессе сборки мейкфайлом по ssh к виртуальной машине и компилировать код прямо там.
Здесь же возникает и второй вопрос, гораздо более сложный: как запустить тестирование так, чтобы оно не пропустило программу, которая не выполняет тесты на одном из окружений? Если программа одна -- тут всё понятно, запустил на всех тестах и проверил, но если их несколько на один набор тестов -- не очень.
Какие есть способы найти решение для возникшей задачи, особенно в части её множественности?
Тестирование под несколько платформ через QEMU
Re: Тестирование под несколько платформ через QEMU
Казалось бы, запустил программу на каждой платформе и проверил результат.
-
- Posts:2
- Joined:29 December 2015, 13:53
Re: Тестирование под несколько платформ через QEMU
Без ejudge понятно, что можно сделать так. А как сделать это через ejudge таким образом, что сохранить все его фишки?
Ведь насколько я понимаю, ejudge-execute запускает ровно одну программу, которая предварительно собирается тоже с использованием ejudge (и на этом этапе собрать сразу несколько программ -- это не проблема, а вот потом их запустить...).
Вероятно, вопрос глупый, но я пока что не очень понимаю как это можно сделать.
Ведь насколько я понимаю, ejudge-execute запускает ровно одну программу, которая предварительно собирается тоже с использованием ejudge (и на этом этапе собрать сразу несколько программ -- это не проблема, а вот потом их запустить...).
Вероятно, вопрос глупый, но я пока что не очень понимаю как это можно сделать.