Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Внутри процесса
С фичей testing подключённый брокер может работать с файлом потока или каналом в памяти, и
тестовая обвязка запускает на нём рабочее приложение без изменений.
Схема текстом
- ConnectedFileBroker ConnectedStdioBroker → Клиент: файл .ss или каналы процесса: connect
- ConnectedFileBroker ConnectedStdioBroker → Файл или канал в памяти: connect_in_process
- Файл или канал в памяти → Обвязка считает доставки в работе для settle()
- Только вживую: байты файла .ss, маяки, перезапуск, два брокера на одном файле, строки без ключа, завершение работы всего процесса
- В памяти: журнал на ключ с номера один, конец, воспроизведение, перемотки и отказы, метка конца, loopback, конверт
- Без фичи testing связь - это только клиент: тот же размер и никакой второй ветви
TestApp::start подключает каждый брокер через connect_in_process вместо connect. Подключённый
брокер, его подписки, издатели и доставки - те же типы, а транспорт в памяти у каждого из них -
собственный вариант. Поэтому дескрипторы сервиса, политики публикации и обработчики с
перемоткой работают без изменений.
Внутрипроцессный транспорт читает настройки рабочего брокера, и своих настроек у него нет. Сообщение проходит через те же шаги, что и настоящее: проверку ключа потока, конверт и отказ от пустой строки в канале. Поэтому он отвергает то же, что отвергают файл потока и канал.
Файл в памяти хранит журнал на каждый ключ потока с нумерацией от единицы. Живая подписка
начинает с конца журнала, воспроизведение читает журнал и завершается на его конце, а перемотка
разрешается по журналу с теми же отказами, что и на файле. Все клоны брокера делят один файл, а
новый брокер начинает с пустого. Канал в памяти принимает то, что подаёт тест, как строки
стандартного ввода, и записывает то, что пишет сервис. Строка возвращается к собственным
подпискам сервиса только при loopback.
Обвязка считает доставки в работе на каждом транспорте, поэтому tb.settle() возвращается, когда
каждая подписка обработала всё, что до неё дошло. То, что относится к настоящему транспорту,
проверяется вживую: на файле потока во временном каталоге или со
ступенью, запущенной дочерним процессом.
Без фичи testing у связи один вариант. Компилятор проверяет, что её размер в точности равен
размеру дескрипторов клиента, которые она оборачивает. Поэтому в рабочей сборке нет ни второго
транспорта, ни ветви к нему.