# Подготовка к релизу
[TOC]
## Checklists
### Функциональный тест (таблица)
- [ ] Сконфигурировать ran-routing
- [ ] Создать новый workspace в ran-routing для нужного региона
- [ ] Перейти на https://cloud.everynet.io/
- [ ] Выбрать "тестовую" организацию.
- [ ] Выбрать нужный регион, например US
- [ ] Workspaces -> New Workspace
- [ ] Ввести название `ran routing functional test`
- [ ] Скопировать URL и Access Token как `RAN_ROUTING_URL` и `RAN_ROUTING_TOKEN`
- [ ] Сконфигурировать ran-config + ran-lorawan (попросить Дениса помочь)
- [ ] Создать новую запись в БД ran-config для виртуального гейтвея.
- [ ] Создать новый токен доступа для этого виртуального гейтвея.
- [ ] Получить URL для подключения к Ran-Config и токен доступа, записать их как `RAN_CONFIG_URL` `RAN_CONFIG_TOKEN`
- [ ] Заполнить прочие [переменные окружения](https://gitlab.everynet.io/ran-routing/observer/-/blob/master/REAMDE_FUNCTEST.md)
Финальная конфигурация теста должна выглядеть подобным образом:
```yaml=
environment:
# Настройки подключения к RAN-CONFIG + RAN-LORAWAN для эмуляции устройства
- RAN_CONFIG_URL=${RAN_CONFIG_URL}
- RAN_CONFIG_TOKEN=${RAN_CONFIG_TOKEN}
# Настройки подключения к RAN-ROUTING для эмуляции клиента
- RAN_ROUTING_URL=${RAN_ROUTING_URL}
- RAN_ROUTING_TOKEN=${RAN_ROUTING_TOKEN}
# Прочие настройки
- SENTRY_ENVIRONMENT=stand
- SENTRY_SERVER_NAME=ran-routing-observer
- SENTRY_RELEASE=latest
- SENTRY_DSN=${SENTRY_DSN}
- LOG_LEVEL=info
- HEALTHCHECK_PORT=9091
- METRICS_PORT=9092
```
### Функциональный тест (wildcard)
- [ ] Сконфигурировать ran-routing
- [ ] Создать новый workspace в ran-routing для нужного региона
- [ ] Перейти на https://cloud.everynet.io/
- [ ] Выбрать "тестовую" организацию.
- [ ] Выбрать нужный регион, например US
- [ ] Workspaces -> New Workspace
- [ ] Ввести название `ran routing functional test (wildcard)`
- [ ] Скопировать URL и Access Token в .env-файл как `RAN_ROUTING_URL` и `RAN_ROUTING_TOKEN`
- [ ] Настроить wildcard для этого workspace
- [ ] Составить нужные маски для `join_eui`, `dev_addr`
- [ ] Попросить Никиту или Глеба выполнить запрос к wokrspace-api, поскольку этот API недоступен публично и требует авторизации.
```bash
curl -X POST http://{workspace-api-url}/api/v1/workspace/set_wildcard \
-H "Authorization: Bearer $WORKSPACE_API_TOKEN" \
-d '{\
"id": "<uuid, взять из URL cloud.everynet.io, когда выбран нужный воркспейс>",\
"allowed_join_eui": 0,\ # нужная маска
"allowed_dev_addr": 0,\ # нужная маска
}'
```
- [ ] Сконфигурировать ran-config + ran-lorawan (попросить Дениса помочь)
- [ ] Создать новую запись в БД ran-config для виртуального гейтвея.
- [ ] Создать новый токен доступа для этого виртуального гейтвея.
- [ ] Получить URL для подключения к Ran-Config и токен доступа, записать их как `RAN_CONFIG_URL` `RAN_CONFIG_TOKEN`
- [ ] Заполнить прочие [переменные окружения](https://gitlab.everynet.io/ran-routing/observer/-/blob/master/REAMDE_FUNCTEST.md)
Финальная конфигурация теста должна выглядеть подобным образом:
```yaml=
environment:
# Настройки подключения к RAN-CONFIG + RAN-LORAWAN для эмуляции устройства
- RAN_CONFIG_URL=${RAN_CONFIG_URL}
- RAN_CONFIG_TOKEN=${RAN_CONFIG_TOKEN}
# Настройки подключения к RAN-ROUTING для эмуляции клиента
- RAN_ROUTING_URL=${RAN_ROUTING_URL}
- RAN_ROUTING_TOKEN=${RAN_ROUTING_TOKEN}
# Прочие настройки
- SENTRY_ENVIRONMENT=stand
- SENTRY_SERVER_NAME=ran-routing-observer
- SENTRY_RELEASE=latest
- SENTRY_DSN=${SENTRY_DSN}
- LOG_LEVEL=info
- HEALTHCHECK_PORT=9091
- METRICS_PORT=9092
```
### Интеграционный тест
- [ ] Сконфигурировать ran-config + ran-lorawan (попросить Дениса помочь)
- [ ] Создать новую запись в БД ran-config для виртуального гейтвея.
- [ ] Создать новый токен доступа для этого виртуального гейтвея.
- [ ] Получить URL для подключения к Ran-Config и токен доступа, записать их как `RAN_CONFIG_URL` `RAN_CONFIG_TOKEN`
- [ ] В каждом из тестируемых NS создать и настроить устройство.
- [ ] Создать уникальное (см. ниже) OTAA устройство и добавить его в нужный NS
- [ ] Убедиться, что интеграции (bridge) запущены, а списки устройств синхронизированы
- [ ] **Если NS использует routing table** - Убедиться, что произошла синхронизация устройства с ran-routing
- [ ] **если NS подключен как wildcard** - Убедиться, что wildcard настроен правильно
- [ ] Сформировать JSON, содержащий настройки устройства, см. пример ниже.
- [ ] Заполнить `TEST_DEVICE_LIST` (json array) нужными устройствами
- [ ] Заполнить прочие [переменные окружения](https://gitlab.everynet.io/ran-routing/observer/-/blob/master/REAMDE_INTEGRTEST.md)
Финальная конфигурация теста должна выглядеть подобным образом:
```yaml=
environment:
# Настройки подключения к RAN-CONFIG + RAN-LORAWAN для эмуляции устройства
- RAN_CONFIG_URL=${RAN_CONFIG_URL}
- RAN_CONFIG_TOKEN=${RAN_CONFIG_TOKEN}
# Список устройств, которые будет эмулировать этот тест
- TEST_DEVICE_LIST=|-
[
{
"id": "ns",
"dev_eui": "f38e74fcdb2bd427",
"join_eui": "1aef23bdfd3a8a67",
"app_key":"1561b3cdd81265fa4f77a51300b77a05",
"band": "EU868"
},
{
"id": "fns",
"dev_eui": "2224848c93d72744",
"join_eui": "58edcf624f8bbeef",
"app_key": "52f42247d5527fb087abd05fd608baac",
"band": "US915"
}
]
# Прочие настройки
- SENTRY_ENVIRONMENT=stand
- SENTRY_SERVER_NAME=ran-routing-observer
- SENTRY_RELEASE=latest
- SENTRY_DSN=${SENTRY_DSN}
- LOG_LEVEL=info
- HEALTHCHECK_PORT=9091
- METRICS_PORT=9092
```
### Создание устройств для интеграционного теста
При создании отличных, от указанных здесь, устройств и при наличии любых wildcard-соединений с ran-routing (например, FNS bridge включён), обязательно убедитесь, что устройство обладает такими идентификаторами (DevEUI, JoinEUI, DevAddr), чтобы трафик от него передавался только нужному NS!
#### Everynet NS
- [ ] Зайти на https://ns.stage.everynet.dev/devices (для STAGE/DEV) или **УТОЧНИТЬ URL** (для PROD)
- [ ] Нажать на `+`, чтобы добавить устройство
- [ ] Выбрать Organisation ID - организацию Test или Test Everynet
- [ ] Указать в поле Device EUI `f38e74fcdb2bd427`
- [ ] Указать в поле Application EUI `1aef23bdfd3a8a67`
- [ ] Добавить тег `test-integration`
- [ ] Указать тип активации OTAA (По умолчанию)
- [ ] Указать шифрование NS
- [ ] Указать Application key `1561b3cdd81265fa4f77a51300b77a05`
- [ ] Указать LoRaWAN protocol version - v1.0.3
- [ ] Указать Band `EU863-870`.
- **Важно** - на данный момент интеграционный тест поддерживает только US915 и EU863, поэтому предпочтительно использовать один из этих. Поскольку и гейтвей и устройство виртуальное - реальный band указывать не обязательно.
- [ ] Нажать `Save`, чтобы сохранить устройство.
- [ ] Для интеграционного теста заполнить конфигурацию`TEST_DEVICE_LIST` таким образом:
```json
[{
"id": "ns", // Идентификатор NS, который будет отображаться в dashboard
"dev_eui": "f38e74fcdb2bd427",
"join_eui": "1aef23bdfd3a8a67",
"app_key":"1561b3cdd81265fa4f77a51300b77a05",
"band": "EU868" // Используйте тот же BAND, что вы указали в NS для эмуляции устройства
}]
```
#### FNS
**TBD!**
---
## Что нужно сделать
Список вещей, которые нужно сделать с релизом (или до релиза) нового ran-routing
### Streaming API
- [x] Поддержка нескольких TxWindow
- [x] Фильтрация трафика по приватным сетям
### Subscription API
- [x] Покрыть тестами метод upsert
### Workspace API
- [x] Сделать API для настройки wildcard (?)
- [x] Сделать API для управления send_gps и другими параметрами (?)
### Спецификация
- [ ] Сделать отдельный repo на gitlab, где будет лежать спецификация (сейчас она в старом репо [ran-routing](https://gitlab.everynet.io/platform/ran/ran-routing/-/blob/master/docs/RanAPI_Spec.MD))
- [ ] Обновить информацию об эндпоинтах
- [ ] Обновить описания структур данных согласно новой схеме
- [ ] Добавить информацию про новый формат TxWindow (с поддержкой нескольких)
- [ ] Обновить примеры с использованием curl
### SDK
#### Python
- [x] Добавить поддержку upsert для subscription-api
#### GO
- [ ] Добавить поддержку upsert для subscription-api
- [ ] Упразднить ConnectionManager
### Bridges
#### ChirpStack v3/v4
- [x] Cинхронизация устройств
- [x] Завершить систему быстрого считывания информации об устройствах из ChirpStack (прочти готово, доделать и закоммитить)
- [x] Использовать upsert для быстрой синхронизации устройств
- [ ] Обновить документацию у бриджей по необходимости
- [x] У bridge дляChirpStack v4 обновить контракты chirpstack-api (было минорное обновление)
- [ ] Сделать релиз нового бриджа на GitHub
#### TTN
**!!!** Код этого бриджа сильно устарел.
- [ ] Поддержка нового Streaming API
- [ ] Обновление tti-contracts
- [ ] etc