Загрузка данных


В новой ветке логики необходимо полностью пересмотреть подход к setup:
раньше у нас был критикал стоп тест на basic info - это была своеобразная тестовая проверка которая чекала что стенд живой, бэк запустился и работает.
Теперь мы его заменяем на большой сценарий настройки и проверки работоспособности стенда в виде теста критикал стоп со следующим алоу в setup части автотестов:
1) из датасета берется название ТУ - это будет tuName в ответе на GetBasicInfoAdminRequest
2) выполняется запрос [1, {}, '13', 'GetBasicInfoAdminRequest', [[]]] (сделать чтобы было 3 попытки получить список ТУ).
Далее получаем список всех добавленных ТУ с их параметрами из ответа GetBasicInfoAdminResponse, из него извлекаем tu_id по tuName по ТУ заданному в датасете текущего набора
Раньше у нас было захардкожено в class TU(Enum), теперь нам нужно хранить только tuName и file_name(пока мы оставляем обратную совместимость), tu_id мы будем извлекать из GetBasicInfoAdminResponse и использовать в тестах (во всех тестах сценариях переключить на использование нового ТУ)
В структуре
            {
                'tuId': 231,
                'tuName': 'Тихорецк-Новороссийск-3-Автотест',
                'mnId': 118,
                'mnName': '',
                'ostId': 0,
                'ostName': '',
                'configurationVersion': 1,
                'status': 1
            },
проверяем не пустые айдишники и 
'status': 1 - это выключена, 2 - это включена
На проверке статуса сохраняем текущий статус sou_status и идем проверять другую DTO - проваливаемся в пункт 3)
3) далее идем в subscribeMainPageInfoRequest с нашим tu_id, в ответе MainPageInfoContent проверяем что в replyContent есть объект с нашим tu_id и попадаем в развилку:
Перед развилкой фиксируем время проверки в константу для будущих действий
а. Наш tu_id уже есть среди запущенных (он должен совпадать с sou_status, если не совпадает делаем критикал стоп с ошибкой что разных подписках разный статус запущена/незапущена СОУ), значит СОУ может быть запущена на старой конфигурации и нужно ее перезапустить, переходим к следующему пункту 4)
б. Нашего tu_id нет в ответе MainPageInfoContent в replyContent (он должен совпадать с sou_status, если не совпадает делаем критикал стоп с ошибкой что разных подписках разный статус запущена/незапущена СОУ). В этом случае нужно "Запустить СОУ" - идем в пункт 5)
По своей сути с помощью условия "(он должен совпадать с sou_status, если не совпадает делаем критикал стоп с ошибкой что разных подписках разный статус запущена/незапущена СОУ)" мы синхронизируем ответы дву DTO о статусе СОУ запущена или нет, если ответы ручек изначально не синхронизированы то это тоже критическая проблема, а вот далее мы уже будем поступать проще - просто проверяя две ручки последовательно. 
4) Если соу неожиданно уже находится в запущенном состоянии - мы должны ее остановить StopLdsRequest по tu_id (дожидаясь ответа об успехе по invocation_id)
4.0) лонг полим в течение двух минут GetBasicInfoAdminRequest - в ответе для нашего tu_id должен быть статус 'status': 1 - ждем что обновится в течение двух минут
4.1) далее снова идем в subscribeMainPageInfoRequest с нашим tu_id и в течении 2 минут смотрим в ответ по этой подписке, как только в ответе MainPageInfoContent в replyContent пропадает наш tu_id - делаем вывод что ТУ остановлена фиксируя степом это. Если за 2 минуты соу не остановилась, прерываем запуск, с комментарием, что не удалось перезапустить соу перед холодным стартом.
5) Когда мы убедились что соу выключена - идем и делаем уже "чистый" холодный запуск СОУ методом LaunchLdsRequest (дожидаясь ответа об успехе по invocation_id)
5.1) лонг полим в течение двух минут GetBasicInfoAdminRequest - в ответе для нашего tu_id должен быть статус 'status': 2 - ждем что обновится в течение двух минут
6) Далее снова идем в subscribeMainPageInfoRequest и в ответе MainPageInfoContent в replyContent смотрим что в течение 2 минут появился наш tu_id (если не появился - критикал стоп и говорим что не удалось запустить СОУ)
7) Выполняем запрос GetTusInformationRequest по нашему tu_id и убеждаемся что время запуска launchedAt больше зафиксированного времени перед запуском СОУ.
В этот момент, когда все прошло успешно, мы можем считать что СОУ запущена на нашей конфигурации и все работает как надо, завершая критикал стоп сценарий.



После завершения всех тестов наши академично написанные автотесты должны все за собой прибрать в teardown:
1) делаем запрос GetBasicInfoAdminRequest и попадаем в развилку:
 - в ответе для нашего tu_id должен быть статус 'status': 2 - СОУ включена, в таком случае переходим к пункту 2)
 - если вдруг статус другой, то выключать СОУ уже не надо, но нужно придумать алерт при этом не делая прогон красным или желтым, алерт должно быть видно в allure-report
2) остановить СОУ - StopLdsRequest по tu_id (дожидаясь ответа об успехе по invocation_id)
3) лонг полим в течение двух минут GetBasicInfoAdminRequest - в ответе для нашего tu_id должен быть статус 'status': 1 - выключено, ждем что обновится в течение двух минут, если не обновилось то не фейлим тесты, а просто делаем алерт в allure-report что не в течение 2 минут СОУ не выключилась, проверить вручную все ли в порядке.


При разработке сценария нужно будет составить модели данных как в папке models на основе реальных запросов-ответов фронт бэк.
Реальные запрос-ответы смотреть в файлах
StopLds
LaunchLds
GetTusInformation
MainPageInfoContent
GetBasicInfoAdmin

















GetBasicInfoAdmin

[1, {}, '13', 'GetBasicInfoAdminRequest', [[]]]



[3, {}, '13', 3, {'replyStatus': 200, 'replyErrors': None, 'replyContent':
{'basicInfo':
    {'tus':
        [
            {
                'tuId': 231,
                'tuName': 'Лопатино-Клин',
                'mnId': 118,
                'mnName': '',
                'ostId': 0,
                'ostName': '',
                'configurationVersion': 1,
                'status': 1
            },
                {'tuId': 213, 'tuName': 'СИКН', 'mnId': 103, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 236, 'tuName': 'ЛТ-3', 'mnId': 121, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 226, 'tuName': 'ТН-3 ЕГС', 'mnId': 114, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 237, 'tuName': 'ТН-3 тест УВП', 'mnId': 122, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 220, 'tuName': 'сикн', 'mnId': 108, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 3, 'status': 1}, {'tuId': 232, 'tuName': 'Авто ТН-3', 'mnId': 101, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 206, 'tuName': 'ТН2', 'mnId': 97, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 228, 'tuName': 'ТН-3 демо v3', 'mnId': 116, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 215, 'tuName': 'СИКН 3', 'mnId': 105, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 235, 'tuName': 'Конфа-спецверсия-12564', 'mnId': 120, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 227, 'tuName': 'TN-3 девелоп', 'mnId': 115, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 229, 'tuName': 'ТН-3 демо v4', 'mnId': 117, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 214, 'tuName': 'СИКН 2', 'mnId': 104, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 230, 'tuName': 'Тихорецк-Новороссийск-3', 'mnId': 91, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 2}, {'tuId': 233, 'tuName': 'АВТО ТН-3 ОТБРАКОВКА', 'mnId': 119, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 207, 'tuName': 'ТН4', 'mnId': 98, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 2, 'status': 1}, {'tuId': 204, 'tuName': '12906', 'mnId': 96, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 58, 'status': 1}, {'tuId': 146, 'tuName': 'Название ТУ', 'mnId': 73, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 36, 'status': 1}, {'tuId': 221, 'tuName': 'Тихорецк-Новороссийск-4', 'mnId': 109, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 222, 'tuName': 'Т-Н-3', 'mnId': 110, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 219, 'tuName': 'СИКН демо', 'mnId': 106, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 211, 'tuName': 'ТН-3', 'mnId': 101, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 224, 'tuName': 'ТН-3 демо', 'mnId': 112, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 225, 'tuName': 'ТН-3 демо v2', 'mnId': 113, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}, {'tuId': 223, 'tuName': 'ППН', 'mnId': 111, 'mnName': '', 'ostId': 0, 'ostName': '', 'configurationVersion': 1, 'status': 1}], 'appVersion': '1.54.0', 'appUpdatedAt': [Timestamp(seconds=1782345600, nanoseconds=0), 180]}}}]










MainPageInfoContent

[1, {}, '13', 'subscribeMainPageInfoRequest', [{'tuIds': [230, 231, 233, 235], 'additionalProperties': None}]]


[1, {}, None, 'MainPageInfoContent', [{'replyStatus': 200, 'replyErrors': None, 'replyContent': {'tuId': 231, 'tuInfo': {'tuId': 231, 'stationaryStatus': 2, 'ldsStatus': {'numberOfOkControlledSites': 0, 'numberOfInitializingControlledSites': 0, 'numberOfFaultyControlledSites': 6, 'numberOfDegradedControlledSites': 60, 'numberOfMaskedLps': 0, 'maskedLps': None}, 'freeFlows': [{'freeFlowStartCoordinate': 168750.0, 'freeFlowStartHeight': 164.05, 'freeFlowEndHeight': 162.93}, {'freeFlowStartCoordinate': 169051.0, 'freeFlowStartHeight': 162.65, 'freeFlowEndHeight': 161.85}], 'leaksInfo': None}}}], []]















GetTusInformation


[1, {}, '16', 'GetTusInformationRequest', [{'tuIds': [146, 204, 206, 207, 211, 213, 214, 215, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 235, 236, 237]}]]



[3, {}, '16', 3, {'replyStatus': 200, 'replyErrors': None, 'replyContent': {'tusInfo': [{'tuId': 231, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1781699576, nanoseconds=684815000), 0], 'actualConfigurationExists': True}, {'tuId': 213, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1778758289, nanoseconds=597172000), 0], 'actualConfigurationExists': True}, {'tuId': 236, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1781868827, nanoseconds=898680000), 0], 'actualConfigurationExists': True}, {'tuId': 226, 'launchedBy': 'Силаков Алексей ', 'launchedAt': [Timestamp(seconds=1780387731, nanoseconds=824773000), 0], 'actualConfigurationExists': True}, {'tuId': 237, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1781870687, nanoseconds=714294000), 0], 'actualConfigurationExists': True}, {'tuId': 220, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1778844292, nanoseconds=557246000), 0], 'actualConfigurationExists': True}, {'tuId': 232, 'launchedBy': 'Владимиров Никита ', 'launchedAt': [Timestamp(seconds=1781787844, nanoseconds=83324000), 0], 'actualConfigurationExists': True}, {'tuId': 206, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1778525344, nanoseconds=109139000), 0], 'actualConfigurationExists': True}, {'tuId': 228, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1780487006, nanoseconds=549498000), 0], 'actualConfigurationExists': True}, {'tuId': 215, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1778763267, nanoseconds=879931000), 0], 'actualConfigurationExists': True}, {'tuId': 235, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1781788040, nanoseconds=641915000), 0], 'actualConfigurationExists': True}, {'tuId': 227, 'launchedBy': 'Силаков Алексей ', 'launchedAt': [Timestamp(seconds=1780472081, nanoseconds=482456000), 0], 'actualConfigurationExists': True}, {'tuId': 229, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1780492384, nanoseconds=651462000), 0], 'actualConfigurationExists': True}, {'tuId': 214, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1778814444, nanoseconds=617048000), 0], 'actualConfigurationExists': True}, {'tuId': 230, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1781853931, nanoseconds=507072000), 0], 'actualConfigurationExists': True}, {'tuId': 233, 'launchedBy': 'Владимиров Никита ', 'launchedAt': [Timestamp(seconds=1781788447, nanoseconds=809073000), 0], 'actualConfigurationExists': True}, {'tuId': 207, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1778525346, nanoseconds=967992000), 0], 'actualConfigurationExists': True}, {'tuId': 204, 'launchedBy': None, 'launchedAt': None, 'actualConfigurationExists': True}, {'tuId': 146, 'launchedBy': 'Жилина София ', 'launchedAt': [Timestamp(seconds=1773998491, nanoseconds=485888000), 0], 'actualConfigurationExists': True}, {'tuId': 221, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1779104576, nanoseconds=932020000), 0], 'actualConfigurationExists': True}, {'tuId': 222, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1779122227, nanoseconds=569045000), 0], 'actualConfigurationExists': True}, {'tuId': 219, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1778844115, nanoseconds=429964000), 0], 'actualConfigurationExists': True}, {'tuId': 211, 'launchedBy': 'Садовников Александр ', 'launchedAt': [Timestamp(seconds=1781604000, nanoseconds=374383000), 0], 'actualConfigurationExists': True}, {'tuId': 224, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1780032175, nanoseconds=929075000), 0], 'actualConfigurationExists': True}, {'tuId': 225, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1780045862, nanoseconds=135315000), 0], 'actualConfigurationExists': True}, {'tuId': 223, 'launchedBy': 'Лайщук Андрей ', 'launchedAt': [Timestamp(seconds=1779979299, nanoseconds=575281000), 0], 'actualConfigurationExists': True}]}}]















LaunchLds


[1, {}, '71', 'LaunchLdsRequest', [{'tuId': 233}]]


[3, {}, '40', 3, {'replyStatus': 200, 'replyErrors': None}]







StopLds
[1, {}, '52', 'StopLdsRequest', [{'tuId': 233}]]

ответ
[3, {}, '52', 3, {'replyStatus': 200, 'replyErrors': None}]