Жизнь в пузыре (Александр Боковой, OSSDEVCONF-2014) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) (→Видео) |
||
== Видео ==
{{vimeoembed|106435698|800|450}}
{{youtubelink|LovzoUxwb6w}}
<poll>
ALTERNATIVE
REVOTE
UNIQUE
Оцените доклад «{{PAGENAME}}»:
Отлично!
Хорошо.
Нормально…
Не очень :(
Просто хочу узнать результаты. |
Версия 23:13, 25 октября 2014
Аннотация
- Докладчик
- Александр Боковой
- Проект
Тестирование сложных сетевых программных комплексов требует построения воспроизводимых тестовых стендов. Тесты также представляют собой относительно простой способ знакомства с кодом проекта, вариантами его внедрения, корректностью документации и т.д.
Многие свободные проекты выиграли бы от снижения барьера для входа новых разработчиков, если бы могли предоставить тестовую среду, которая легко собирается, желательно в автоматическом режиме. К сожалению, в большинстве случаев у свободных проектов, реализующих сложные сетевые решения, если и присутствует инфраструктура для тестирования, то она недоступна новичкам или не может быть развернута локально.
- cwrap.org – это проект, выросший из десятилетнего опыта создания средств автоматического тестирования в Samba Team. Он позволяет развернуть в рамках одного пользователя сложную сетевую инфраструктуру, включающую в себя несколько контроллеров доменов, клиентских «машин», сервер DNS, сервер Kerberos KDC, и другие компоненты, необходимые для исполнения нескольких тысяч тестируемых конфигураций Samba.
Для разработчика запуск тестовой среды выглядит как простой make test и не требует ни средств виртуализации, ни каких-либо дополнительных привилегий. Более того, средства cwrap.org позволяют проводить тестирование на разных платформах, а не только в рамках современных дистрибутивов GNU/Linux.
Для изолированного тестирования клиент-серверных приложений необходимо моделировать сетевую инфраструктуру, разрешение имен и числовых идентификаторов пользователей и групп, преобразование имен узлов в IP-адреса, сохранение прав доступа к файлам с учетом привилегий исполняемой среды и многое другое.
cwrap обеспечивает эти возможности, представляя динамические библиотеки, которые загружаются в адресное пространство приложения средствами системы, при этом корректно поддерживая и сложные многопоточные приложения.
Видео
Оцените доклад «Жизнь в пузыре (Александр Боковой, OSSDEVCONF-2014)»:
Расширенные тезисы
Для изолированного тестирования клиент-серверных приложений необходимо моделировать сетевую инфраструктуру, разрешение имен и числовых идентификаторов пользователей и групп, преобразование имен узлов в 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.