CWIX — Coalition Warrior Interoperability eXercise — odbywa się raz w roku w Bydgoszczy pod patronatem JFC Brunssum. Trzy tygodnie. Setki państw i dostawców. Prawdziwe stosy partnerskie podłączone do tej samej tkanki co Twój. To jedyne miejsce na Ziemi, gdzie uczciwy test interoperacyjności NATO odbywa się na pełną skalę — i jest bezlitosny. Kod, który "przeszedł zgodność" w domu, rutynowo wywala się przy pierwszym międzyproducenckim handshake na sali.

Rozwiązaniem nie jest czekanie na Brukselę. Rozwiązaniem jest koalicyjny harness testowy — celowo zaprojektowana platforma, która ćwiczy kod interoperacyjny względem symulowanych stosów partnerskich przy każdym commicie. Ten artykuł to inżynierski przewodnik: co zawiera harness, jakie narzędzia powinny się w nim znaleźć i jak go uruchamiać, aby pierwszy dzień na CWIX był nudny zamiast katastrofalny.

Dlaczego koalicyjny harness testowy

Ekonomia jest brutalna. Błąd znaleziony na CWIX kosztuje mniej więcej dwa rzędy wielkości więcej niż błąd znaleziony w CI. Zespół jest w delegacji, okno testowe jest stałe, a partnerski stos, z którym potrzebujesz ponownie testować, może nie być dostępny ponownie aż do następnego roku. Co gorsza, zaufanie partnerów eroduje szybko — dostawca, którego gateway uszkodzi ścieżkę powierzchniową Link 16 J3.2 pierwszego dnia, zostanie po cichu omijany przez resztę ćwiczeń. Wynik akredytacji jest pochodną tego pierwszego wrażenia.

Głębszy problem polega na tym, że CWIX to zazwyczaj pierwszy raz, kiedy obcy stos w ogóle widzi Twoje wiadomości. Pisałeś według ADatP-3 wers po wersie. Uruchomiłeś narzędzie zgodności STANAG. Twoje wiadomości parsują się czysto we własnym emiterze i własnym konsumencie. Nic z tego nie dowodzi, że Twój kod współpracuje z niemiecką instancją JCHAT, francuskim gatewayem SICF-NG czy amerykańskim terminalem JREAP-C sterowanym przez interpretację tego samego STANAG przez innego dostawcę. Koalicyjny harness testowy przenosi to zdarzenie pierwszego kontaktu z Brukseli na Twojego laptopa. Zobacz nasz kompletny przewodnik po interoperacyjności NATO dla szerszego obrazu.

Piramida testów dla kodu interoperacyjnego

Kod interoperacyjny zasługuje na własną piramidę testów. Kształt jest znajomy; warstwy są specyficzne.

Jednostkowe — struktura wiadomości. Czyste testy parsera i serializera formatu drutowego. Round-trip znanego dobrego bufora bajtów do struktury w pamięci i z powrotem. Pola brzegowe (bitowo upakowane wyliczenia w J-series, identyfikatory stałej długości w ADatP-34) zasługują na dedykowane testy property-based z użyciem Hypothesis, jqwik lub fast-check. Pokrycie tej warstwy powinno być prawie pełne — testy są tanie i wyłapują ciche błędy korupcji danych, których człowiek nigdy nie wypatrzy w zrzucie hex.

Integracyjne — round-trip pojedynczego protokołu. Uruchom stos protokołu w procesie, wyślij wygenerowaną wiadomość do swojego emitera, przekieruj ją przez transport zwrotny i potwierdź, że konsument rekonstruuje równoważną strukturę. Tu wyłapujesz błędy endianness, błędy konwersji czasu (czas NATO, UTC, czas GPS, sekundy przestępne) i błędy ramy współrzędnych (WGS-84 vs MGRS vs UTM). Użyj Testcontainers, jeśli w ścieżce jest prawdziwy broker (NATS, ActiveMQ, RabbitMQ dla NFFI).

Systemowe — gateway wieloprotokołowy. Większość systemów koalicyjnych to gateway'e. Trasa wchodzi jako Link 16 J3.2, wychodzi jako ADatP-34 NFFI i jest replikowana do feedu CoT/MQTT dla klientów świadomości sytuacyjnej. Warstwa systemowa łączy cały pipeline w klaster docker-compose lub k3d, wprowadza wiadomości i potwierdza międzyprotokołowe inwarianty — stabilność ID trasy, wierność pozycji w granicach tolerancji, zachowanie klauzuli.

CWIX — prawdziwe stosy partnerskie. Wierzchołek piramidy jest nieunikniony: nie można w pełni zasymulować stosu partnerskiego, którego się nigdy nie widziało. Ale piramida utrzymuje ten wierzchołek wąskim. Zanim wylądujesz w Bydgoszczy, dziewięćdziesiąt pięć procent błędów powinno już być martwych.

Generatory wiadomości

Harness żyje lub umiera na realizmie generowanego ruchu. Półwiarygodne generatory dają fałszywą pewność.

Generatory J-series Link 16. Zbuduj sparametryzowany generator na każdą rodzinę wiadomości J-series — J2 nadzór, J3.2 trasa powierzchniowa, J7 zarządzanie informacją, J12 zarządzanie misją. Wierność na poziomie bitów ma znaczenie: zła domyślna wartość pola zarezerwowanego przejdzie przez Twój dekoder i wywali partnera. Narzędzia takie jak wyjście symulatora MIDS-LVT i opublikowany przez NSA J-Series Message Catalog są punktem odniesienia. Otocz je fuzzerem, który zmienia deklarowaną klauzulę, źródłowy TN i jakość trasy.

Emitery ADatP-34 (NFFI). Wiadomości NFFI 1.3 / IP1 / IP2 przez SOAP lub REST. Zbuduj emitery, które produkują zarówno ładunki zgodne, jak i celowo prawie zgodne — parsery partnerów różnią się rygorem, a Twój harness musi obnażyć rygor Twojego konsumenta. XSD-y NFFI publikowane przez NATO NCIA są kontraktem; waliduj każdą wygenerowaną wiadomość względem nich przed transmisją.

Wstrzykiwanie CoT i MQTT. Cursor-on-Target XML przez TCP lub MQTT to lingua franca taktycznych klientów SA (ATAK, WinTAK, iTAK). Generuj zdarzenia CoT z realistycznymi czasami stale, ograniczeniami geo-fence i zróżnicowanymi rozszerzeniami detail. Mosquitto w kontenerze obsługuje stronę brokera; dla wyższej wierności uruchom TAK Server CE.

Fabryki wiadomości MIP4-IES. MIP4 Information Exchange Specification programu Multilateral Interoperability Programme (wcześniej znana jako JC3IEDM na poziomie modelu danych) napędza ustrukturyzowaną wymianę C2. Fabryki wiadomości MIP4 są cięższe — trójki RDF i asercje oparte na SPARQL — ale niezbędne, jeśli Twój kod dotyka krajowego systemu C2.

Symulatory stosów partnerskich

Żaden pojedynczy symulator nie pokrywa spektrum. Łącz je.

Symulatory terminali JREAP-C. JREAP (Joint Range Extension Applications Protocol) przenosi Link 16 nad IP. Kilku dostawców dostarcza symulatory terminali JREAP-C; otwarty zestaw testowy NavyJTIDS US Navy oraz komercyjne oferty ViaSat lub Ultra są powszechne. Luka wierności: timing — prawdziwe terminale wprowadzają dynamikę synchronizacji slotów J-series, którą czyste symulatory programowe spłaszczają.

JISR-Lite. Referencyjna implementacja NATO Joint Intelligence, Surveillance and Reconnaissance. Doskonała dla metadanych obrazu ruchomego STANAG 4609 i zapytań/pobrań produktów STANAG 4559 CSD. Uruchom w VM; wskaż swój kod na jej endpointy. Luka wierności: skala katalogu — prawdziwe koalicyjne CSD trzymają rzędy wielkości więcej produktów niż referencyjny dataset.

Referencyjne stosy NCI Server. NCIA publikuje referencyjne implementacje dla kilku usług FMN spiral — directory, messaging, publish/subscribe świadomości sytuacyjnej. Nie są to certyfikowane stosy partnerskie, ale obnażają formaty drutowe i przepływy uwierzytelniania, które musisz dopasować. Luka wierności: łańcuchy zaufania certyfikatów — prawdziwe węzły FMN kończą na hierarchiach PKI, których nie zreplikujesz idealnie bez koalicyjnych CA.

Symulowane węzły FMN. Postaw minimalny węzeł FMN używając usług referencyjnych NCIA plus lokalne PKI (step-ca lub smallstep) dla tkanki zaufania. Skonfiguruj profile usług FMN Spiral 4 lub Spiral 5 w zależności od ćwiczenia, do którego się przygotowujesz. Przejdź przez tę konfigurację z dyscypliną pakietu dowodów akredytacyjnych — zobacz akredytacja CWIX.

Zestawy testów zgodności

Raporty zgodności STANAG NATO są konieczne i niewystarczające. Dowodzą, że Twoje wiadomości pasują do reguł składniowych i semantycznych normy. Nie dowodzą, że niemiecki partner zrozumie Twoje znaczenie.

Uruchamiaj zestawy mimo to. Katalogi wiadomości ADatP-3 dostarczane są z walidatorami; STANAG 4774/4778 metadane poufności mają własne. Walidacja XSD NFFI jest nienegocjowalna. Bramy zgodności FMN na spiralę są gated na udokumentowanych dowodach — Twój harness powinien emitować te dowody jako artefakt buildu. Sparuj raporty zgodności z dowodami jakości oprogramowania NATO AQAP-2110, aby recenzenci akredytacji szli naprzód; zobacz nasz przewodnik po AQAP-2110.

Lukę między "przechodzi test" a "współpracuje z ludźmi" zamyka tylko próba ze stosem partnera. Trasa powierzchniowa J3.2, która jest idealnie zgodna, ale używa przestrzeni numerów trasy kolidującej z alokacją partnera, zawiedzie w ocenianej przez człowieka interoperacyjności pierwszego dnia. Udokumentuj negocjacje alokacji jawnie w konfiguracji harnessa; traktuj je jako dane testowe.

Ciągła integracja dla interoperacyjności

Harness musi działać przy każdym pull requeście. Jeśli działa tylko w nocy, zespół już zaakceptował tygodnie dryfu, zanim nadejdzie CWIX.

Wpiecz harness w pojedyncze zadanie CI: GitHub Actions, GitLab CI lub Azure DevOps Pipelines — wszystko działa. Użyj symulatorów w kontenerach, aby zadanie było hermetyczne. Uchwyć deterministyczny korpus wiadomości — wyselekcjonowany zestaw wiadomości J-series, NFFI, CoT i MIP4 ze znanymi-dobrymi oczekiwanymi wynikami — i odtwarzaj go przy każdym buildzie. Snapshot-regression na każdym wyjściu formatu drutowego: jednobajtowa zmiana w serializerze to dokładnie ten błąd, który psuje partnera.

Proweniencja ma znaczenie. Każdy bieg harnessa powinien emitować podpisany pakiet artefaktów — raporty zgodności, wersja korpusu wiadomości, wersje symulatorów, Twój SBOM. Powiąż to z kontrolami łańcucha dostaw opisanymi w egzekwowanie SBOM w pipeline'ach obronnych.

Kluczowy wniosek: Harness nie jest oddzielnym projektem. Jest częścią kodu, wersjonowany razem z kodem, własnością inżynierów piszących logikę interoperacyjną. Zlecone harnessy starzeją się; harnessy wewnętrzne ewoluują z każdym PR i wyłapują regresje tego samego dnia, w którym lądują.

Testy negatywne

Większość błędów interoperacyjności wychodzi na ścieżce nieszczęśliwej. Harness musi ją celowo prowadzić.

Zniekształcone wiadomości. Obetnij ramki J-series Link 16 w środku pola. Zepsuj bitowo upakowane wyliczenia do wartości zarezerwowanych. Wyślij ładunki NFFI z celowo nieprawidłowymi XSD. Twój konsument powinien odrzucić, zalogować i kontynuować — nigdy nie crashować, nigdy cicho nie akceptować, nigdy nie propagować.

Nakładki bezpieczeństwa. Zmieniaj metadane poufności STANAG 4774: wyślij wiadomość oznaczoną NATO SECRET do konsumenta uprawnionego tylko do NATO RESTRICTED. Konsument musi odmówić i audytować, nie obniżać klauzuli. Naruszenia powiązania STANAG 4778 — niezgodność podpisu na ładunku powiązanym metadanymi — muszą zawodzić zamknięte.

Błędne obchodzenie się z klauzulą. Pomyłki cross-domain kończą kariery w operacjach koalicyjnych. Wstrzyknij wsady o mieszanej klauzuli do swojego gateway'a i potwierdź, że reguła najwyższej klauzuli obowiązuje dla całego wsadu. Wstrzyknij wiadomości całkowicie pozbawione metadanych klauzuli — Twój kod musi odrzucić, nigdy nie ustawiać wartości domyślnej.

Przypadki brzegowe odchylenia czasu. Zegary dryfują, czas GPS i UTC rozchodzą się przez sekundy przestępne, a systemy partnerów czasem raportują czas w polach, które nie pasują do ich specyfikacji drutowej. Prowadź swój harness z celowo odchylonymi znacznikami czasowymi (dodatnimi i ujemnymi) i potwierdź, że Twój kod ogranicza, odrzuca lub loguje zgodnie z wymaganiem — nigdy cicho nie akceptuje wiadomości datowanej na przyszły rok.

Przygotowanie do CWIX

Sześć tygodni przed startem zaczyna się cykl prób. Zamroź zakres harnessa; żadnych nowych funkcji aż po Brukseli. Postaw wewnętrzne "mini-CWIX" — zamknięte wydarzenie na dwa lub trzy dni, gdzie każdy zespół w firmie dotykający systemu podłącza się równocześnie. Celem nie jest znalezienie nowych błędów; celem jest zaznajomienie zespołów operacyjnych i wyjazdowych z przepływem na sali, zanim spotkają prawdziwego partnera.

Cztery tygodnie wcześniej przeprowadź próbę generalną z partnerem. Skoordynuj z przyjaznym dostawcą lub jednostką sojuszniczą jednodniową wymianę wirtualną. Nawet jedno zewnętrzne połączenie odsłania założenia, które Twój harness wbudował. Uchwyć każdy pcap, każdy log; lekcje karmią korpus harnessa na następny rok.

Dwa tygodnie wcześniej zablokuj artefakt. Otaguj build. Nagraj zestaw obrazów symulatorów na laptopy jadące do Bydgoszczy. Wstępnie przygotuj każdy raport zgodności, każdy SBOM, każdy podpisany pakiet dowodów w formacie, jakiego oczekują recenzenci akredytacji JFC Brunssum.

Na sali dyscypliną jest logowanie. Uchwyć każdy bajt na każdym interfejsie, jawnym i niejawnym, ze zsynchronizowanymi zegarami. Triażuj w czasie rzeczywistym, ale rozwiązuj nic destrukcyjnie — wartość CWIX to nie błędy, które naprawisz podczas ćwiczeń; to błędy, które naprawisz w harnessie potem, aby nigdy się nie powtórzyły. Cykl lessons-learned, wykonany wiernie, jest tym, co napędza kolejny czysty bieg w przyszłym roku i rok później.