Skip to content

Cute network emulation web-app for self-education and classes (based on mininet).

License

Notifications You must be signed in to change notification settings

mimi-net/miminet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Miminet

Miminet — эмулятор компьютерных сетей на базе ОС Linux, предназначенный для образовательных целей.


📖 Содержание


💡 Требования

Перед началом работы убедитесь, что у вас установлены:

Если только начинаете знакомство с проектом, не забудьте прочитать раздел посвященный архитектуре приложения.


🛠️ Локальное развёртывание

В каталогах back и front находятся примеры файлов .env, используемых в docker-compose и Ansible.

Важно:

  • Не используйте WSL для развёртки бэкенда, оно не заработает.
  • Фронтенд можно разворачивать где угодно, в случае, если эмуляция не обязательна для разработки.
  • Для удобного запуска всех контейнеров можно воспользоваться скриптом start_all_containers.sh.

Установка:

  1. git clone git@github.com:mimi-net/miminet.git
  2. Копируем vk_auth.json из группового чата в front/src, чтобы можно было авторизоваться на сайте.
  3. Создаём файл miminet_secret.conf в front/src и пишем туда случайные буквы/цифры, чтобы не авторизовываться после каждого перезапуска докера.
  4. Запускаем приложение (например, через start_all_containers.sh).
  5. Заходим на localhost и проверяем, что всё работает.

Database migrations

Следующие действия необходимо выполнять в случае, если вы обновили модель базы данных (SQLAlchemy) и теперь хотите, чтобы изменения появились в реальной базе данных.

docker exec -it miminet bash
flask db init
flask db migrate
flask db upgrade

Vagrant (не обязательно)

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: Система обмена сообщениями, обеспечивающая взаимодействие между фронтендом и бэкендом.

Frontend (фронтенд, front)

  • Клиентская часть, предоставляющая веб-интерфейс для взаимодействия пользователей с системой (авторизация, настройка сетей и так далее).
  • Файлы, относящиеся к этой части приложения, находятся в каталоге front.
  • За эту часть приложения ответственны три контейнера: miminet (основной веб-сервис), nginx (HTTP-сервер для балансировки нагрузки) и rabbitmq.
  • В Miminet есть тесты на фронтенд, позволяющие имитировать действия реального пользователя при конфигурации сетей. Реализовано это с помощью Selenium.

Backend (бэкенд, back)

  • Серверная часть приложения, реализующая логику эмуляции сети.
  • Файлы, относящиеся к этой части приложения, находятся в каталоге back.
  • За эту часть приложения ответственнен контейнер celery, принимающий задачи от фронтенда и обрабатывающий их.
  • В Miminet есть тесты для бэкенда, проверяющие качество эмуляции заданной сети. Конфигурация тестов происходит через JSON-файлы.

☑️ Тестирование

Frontend

Тестирование фронтенда работает путем имитации действий пользователя (кликов, ввода текста, навигации) с помощью автоматизированного управления браузером. Браузер(ы) находятся в специальном докер-контейнере(ах), ими управляет другой докер-контейнер (selenium-hub).

Основное:

  • Всё, что связано с тестированием фронтенда, находится в каталоге front/tests.
  • Каталог docker хранит файлы, необходимые для запуска докер-контейнеров, которые позволяют имитировать действия пользователя на сайте.
  • В каталоге utils находятся файлы, необходимые для написания тестов:
    • checkers.py — содержит класс, сравнивающий построенную сеть с образцом по заданным параметрам.
    • locators.py — содержит специальную структуру, в которой находятся все используемые в тесах имена веб-элементов Miminet. Если хотите добавить тест на новую функцию, не забудьте обновить этот файл.
    • networks.py — содержит классы, позволяющие быстро конфигурировать сети Miminet. С примерами использования этих классов можно ознакомиться в основном каталоге front/tests.
  • Самый важный файл во всей тестирующей системе — conftest.py, в нём определены ключевые фикстуры, позволяющие писать тесты. Также функции из этого файла позволяют писать тесты быстрее и безопаснее.

Запуск:

  1. В front/.env файле должно быть выставлено: MODE=dev.
  2. Запуск контейнеров: sh front/tests/docker/run.sh
  3. Запуск тестов: pytest front/tests.

Backend

  1. Установка необходимых пакетов:
pyhton -m venv .venv
source .venv/bin/activate
pip install -r back/requirements.txt
  1. Запуск тестов:
sudo bash
source .venv/bin/activate
cd back/tests
export PYTHONPATH=$PYTHONPATH:../src
pytest .

Для mininet обязательно нужен root!