Miminet — эмулятор компьютерных сетей на базе ОС Linux, предназначенный для образовательных целей.
Перед началом работы убедитесь, что у вас установлены:
- Docker
- Docker Compose
- Vagrant (не обязательно)
- Ansible (не обязательно)
Если только начинаете знакомство с проектом, не забудьте прочитать раздел посвященный архитектуре приложения.
В каталогах back
и front
находятся примеры файлов .env
, используемых в docker-compose и Ansible.
- Не используйте WSL для развёртки бэкенда, оно не заработает.
- Фронтенд можно разворачивать где угодно, в случае, если эмуляция не обязательна для разработки.
- Для удобного запуска всех контейнеров можно воспользоваться скриптом start_all_containers.sh.
git clone git@github.com:mimi-net/miminet.git
- Копируем
vk_auth.json
из группового чата вfront/src
, чтобы можно было авторизоваться на сайте. - Создаём файл
miminet_secret.conf
вfront/src
и пишем туда случайные буквы/цифры, чтобы не авторизовываться после каждого перезапуска докера. - Запускаем приложение (например, через start_all_containers.sh).
- Заходим на localhost и проверяем, что всё работает.
Следующие действия необходимо выполнять в случае, если вы обновили модель базы данных (SQLAlchemy) и теперь хотите, чтобы изменения появились в реальной базе данных.
docker exec -it miminet bash
flask db init
flask db migrate
flask db upgrade
NFS(для полной автоматизации vagrant up):
# /etc/sudoers.d/vagrant-syncedfolders
Cmnd_Alias VAGRANT_EXPORTS_CHOWN = /bin/chown 0\:0 /tmp/vagrant-exports
Cmnd_Alias VAGRANT_EXPORTS_MV = /bin/mv -f /tmp/vagrant-exports /etc/exports
Cmnd_Alias VAGRANT_NFSD_CHECK = /etc/init.d/nfs-kernel-server status
Cmnd_Alias VAGRANT_NFSD_START = /etc/init.d/nfs-kernel-server start
Cmnd_Alias VAGRANT_NFSD_APPLY = /usr/sbin/exportfs -ar
%sudo ALL=(root) NOPASSWD: VAGRANT_EXPORTS_CHOWN, VAGRANT_EXPORTS_MV, VAGRANT_NFSD_CHECK, VAGRANT_NFSD_START, VAGRANT_NFSD_APPLY
cd back
export numberOfBoxes=N
export provider=vbox/vmware
. vagrant_vms.sh
☁️ Архитектура
- Miminet использует контейнеризацию для управления своими компонентами.
- RabbitMQ: Система обмена сообщениями, обеспечивающая взаимодействие между фронтендом и бэкендом.
- Клиентская часть, предоставляющая веб-интерфейс для взаимодействия пользователей с системой (авторизация, настройка сетей и так далее).
- Файлы, относящиеся к этой части приложения, находятся в каталоге
front
. - За эту часть приложения ответственны три контейнера: miminet (основной веб-сервис), nginx (HTTP-сервер для балансировки нагрузки) и rabbitmq.
- В Miminet есть тесты на фронтенд, позволяющие имитировать действия реального пользователя при конфигурации сетей. Реализовано это с помощью Selenium.
- Серверная часть приложения, реализующая логику эмуляции сети.
- Файлы, относящиеся к этой части приложения, находятся в каталоге
back
. - За эту часть приложения ответственнен контейнер celery, принимающий задачи от фронтенда и обрабатывающий их.
- В Miminet есть тесты для бэкенда, проверяющие качество эмуляции заданной сети. Конфигурация тестов происходит через JSON-файлы.
Тестирование фронтенда работает путем имитации действий пользователя (кликов, ввода текста, навигации) с помощью автоматизированного управления браузером. Браузер(ы) находятся в специальном докер-контейнере(ах), ими управляет другой докер-контейнер (selenium-hub).
- Всё, что связано с тестированием фронтенда, находится в каталоге
front/tests
. - Каталог
docker
хранит файлы, необходимые для запуска докер-контейнеров, которые позволяют имитировать действия пользователя на сайте. - В каталоге
utils
находятся файлы, необходимые для написания тестов:- checkers.py — содержит класс, сравнивающий построенную сеть с образцом по заданным параметрам.
- locators.py — содержит специальную структуру, в которой находятся все используемые в тесах имена веб-элементов Miminet. Если хотите добавить тест на новую функцию, не забудьте обновить этот файл.
- networks.py — содержит классы, позволяющие быстро конфигурировать сети Miminet. С примерами использования этих классов можно ознакомиться в основном каталоге
front/tests
.
- Самый важный файл во всей тестирующей системе —
conftest.py
, в нём определены ключевые фикстуры, позволяющие писать тесты. Также функции из этого файла позволяют писать тесты быстрее и безопаснее.
- В
front/.env
файле должно быть выставлено:MODE=dev
. - Запуск контейнеров:
sh front/tests/docker/run.sh
- Запуск тестов:
pytest front/tests
.
- Установка необходимых пакетов:
pyhton -m venv .venv
source .venv/bin/activate
pip install -r back/requirements.txt
- Запуск тестов:
sudo bash
source .venv/bin/activate
cd back/tests
export PYTHONPATH=$PYTHONPATH:../src
pytest .
Для mininet обязательно нужен root!