Жизнь в пузыре (Александр Боковой, OSSDEVCONF-2014)

Материал из 0x1.tv

Версия от 18:05, 13 ноября 2015; StasFomin (обсуждение | вклад) (Batch edit: remove <noinclude>Category:ToPublish</noinclude>)

Аннотация

Докладчик
Александр Боковой.jpg
Александр Боковой
Проект

Тестирование сложных сетевых программных комплексов требует построения воспроизводимых тестовых стендов. Тесты также представляют собой относительно простой способ знакомства с кодом проекта, вариантами его внедрения, корректностью документации и т.д.

Многие свободные проекты выиграли бы от снижения барьера для входа новых разработчиков, если бы могли предоставить тестовую среду, которая легко собирается, желательно в автоматическом режиме. К сожалению, в большинстве случаев у свободных проектов, реализующих сложные сетевые решения, если и присутствует инфраструктура для тестирования, то она недоступна новичкам или не может быть развернута локально.

  • cwrap.org – это проект, выросший из десятилетнего опыта создания средств автоматического тестирования в Samba Team. Он позволяет развернуть в рамках одного пользователя сложную сетевую инфраструктуру, включающую в себя несколько контроллеров доменов, клиентских «машин», сервер DNS, сервер Kerberos KDC, и другие компоненты, необходимые для исполнения нескольких тысяч тестируемых конфигураций Samba.

Для разработчика запуск тестовой среды выглядит как простой make test и не требует ни средств виртуализации, ни каких-либо дополнительных привилегий. Более того, средства cwrap.org позволяют проводить тестирование на разных платформах, а не только в рамках современных дистрибутивов GNU/Linux.

Для изолированного тестирования клиент-серверных приложений необходимо моделировать сетевую инфраструктуру, разрешение имен и числовых идентификаторов пользователей и групп, преобразование имен узлов в IP-адреса, сохранение прав доступа к файлам с учетом привилегий исполняемой среды и многое другое.

cwrap обеспечивает эти возможности, представляя динамические библиотеки, которые загружаются в адресное пространство приложения средствами системы, при этом корректно поддерживая и сложные многопоточные приложения.

Видео

on youtube








Расширенные тезисы

Для изолированного тестирования клиент-серверных приложений необходимо моделировать сетевую инфраструктуру, разрешение имен и числовых идентификаторов пользователей и групп, преобразование имен узлов в IP-адреса, сохранение прав доступа к файлам с учетом привилегий исполняемой среды и многое другое.

cwrap обеспечивает эти возможности, представляя динамические библиотеки, которые загружаются в адресное пространство приложения средствами системы, при этом корректно поддерживая и сложные многопоточные приложения.

На текущий момент в cwrap.org реализованы следующие «обертки»:

socket_wrapper
выполняет все сетевые операции, используя коммуникационные возможности доменных сокетов UNIX. Поддерживаются сокеты и режимы адресации семейств IPv4 и IPv6, а передаваемые по имитируемой сети сообщения автоматически записываются в формате PCAP, используемом распространенными средствами анализа сетевого трафика, например, Wireshark.
nss_wrapper
позволяет переопределить информацию о пользователях и группах, которые будут видны приложению, а также имена сетевых узлов. Помимо статических файлов пользователей и групп, nss_wrapper позволяет загружать уже имеющийся модуль интерфейса NSS в glibc и комбинировать результаты использования модуля с предопределенными данными из файлов.
uid_wrapper
переопределяет поведение системы при запросе приложением привилегированных операций. Приложение может переключать контекст исполнения, меняя пользователя, под которым выполняются действия, а uid_wrapper обеспечит

в том числе и корректную обработку прямых системных вызовов функций ядра (syscalls) в контексте конкретного потока исполнения.

resolv_wrapper
позволяет переопределить поведение сетевого стека при разрешении имен сетевых узлов, включая перенаправление запросов на другие сервера DNS, в том числе и исполняемые под контролем socket_wrapper.

В рамках проекта Samba «обертки» cwrap.org используются для полномасштабного тестирования приложений — от традиционного файл-сервера до реализации контроллера домена Active Directory, включающего в себя одновременную работу сервера samba, центра раздачи ключей Kerberos, сервера DNS, сервера LDAP и разнообразных клиентских компонент.

Каждый тестируемый сценарий получает собственную виртуальную среду исполнения и не зависит от других сценариев, что позволяет параллельное исполнение. В рамках существующей программы тестирования выполняется около 4500 разных сценариев, а общее время выполнения make test достигает двух часов. Каждое исправление, попадающее в git-репозитарий проекта Samba, обязательно проходит полный цикл тестирования.

Помимо поддержания тестовой среды, cwrap.org применяется и для решения более сложной задачи. Архитектура Active Directory подразумевает, что различные компоненты контроллера домена (сервер LDAP, сервер Kerberos KDC, сервер DNS, сервер SMB и LSA) имеют единое состояние клиентского подключения. Клиент может инициировать соединение по протоколу LSA, а затем переключиться на протокол LDAP и запросить результат исполнения одной из операций протокола LSA. Некоторые из критических для домена операций намеренно реализуются таким образом, например, установление доверительных отношений между доменами в лесу Active Directory или доверительных отношений между двумя разными лесами Active Directory.

Необходимость общего доступа к состоянию клиентского соединения вынудила в свое время Samba Team интегрировать Kerberos KDC, сервер DNS и сервер LDAP. К сожалению, одна из наиболее активно развиваемых реализаций Kerberos, от MIT Kerberos Consortium, не поддерживает режим встраивания сервера в другие приложения и использовать Samba AD DC с MIT Kerberos долгое время было невозможно. Это приводило к разного рода проблемам при интеграции Samba AD DC в дистрибутивы GNU/Linux, поскольку в рамках дистрибутива нельзя обеспечить взаимозаменяемость библиотек Kerberos — они совместимы на уровне сетевых протоколов, но не ABI, а также имеют различия в формате представления данных на диске.

В течение 2013-2014 годов компанией Red Hat в рамках интеграции Samba AD DC в дистрибутивы Fedora, Red Hat Enterprise Linux и CentOS, была выполнена фундаментальная работа над переводом Samba AD DC на использование MIT Kerberos. Ключевым компонентом этой системы является использование cwrap.org для обмена состоянием клиентских соединений между сервером KDC и остальными компонентами Samba AD DC. Принципиальная работоспособность этой архитектуры была продемонстрирована на конференции SambaXP в мае 2014 года, а в сентябре 2014 Samba Team выполнит тестирование получившегося решения в рамках Interoperability Lab, организуемого Microsoft.

Примечания и отзывы