Co to znamená
Loopback testy dokazují protokol; síť dokázat nemohou. Laboratoř meshe spustí čtyři linuxové kontejnery — tři obsluhují jeden repozitář, jeden jiný — každý s vlastním souborovým systémem, klíčem uzlu, checkoutem a síťovým rozhraním na jednom bridgi, bez deklarovaných seedů. Prostřednictvím HTTP povrchu a příkazové řádky každého uzlu ověřuje, že se uzly navzájem najdou přes UDP multicast, spojí se do plného meshe, zatímco čtvrtý je odmítnut, replikují claim a předávku, sblíží se na jednom digestu, přežijí uzel odpojený od sítě i uzel zabitý a restartovaný, a ověří se přes majordomus mesh verify. Verdikt a časování každého scénáře se zapisuje do souboru důkazů.
Princip
test/mesh-lab/run sestaví spustitelný soubor pro Linux (nebo si jej vezme), sestaví kolem něj image uzlu, vytvoří bridge, spustí uzly přes test/mesh-lab/node-entrypoint a provede deset scénářů: multicast_discovery, handshake, repository_isolation, cross_node_claim, claim_conflict, cross_node_handover, three_node_convergence, network_partition, process_crash_recovery, cli_verify. Při selhání vypíše stav spolupráce a konec logu každého uzlu, zapíše důkazy se selhávajícím verdiktem a skončí s kódem 10. CI úloha mesh-lab jej spouští při každé změně cratu nebo laboratoře.
Laboratoř sama sebe nesoudí. scripts/ci/mesh-lab-evidence si potom přečte target/mesh-lab/evidence.json a odmítne ho, pokud záznam není úplnou akceptací: schéma, které uvádí, celkový passed, všech deset scénářů s verdiktem pass a detailem, který říká, co se měřilo, čtyři uzly, oba transporty a spustitelný soubor a platformu přečtené z uzlu. Úloha CI spouští čtečku jako vlastní krok, takže laboratoř, která skončí s kódem 0, ale tvrdí méně, než slibuje, znamená červenou úlohu. test/cases/414_mesh_lab_evidence.sh tuto čtečku pokrývá — předloží jí jeden úplný záznam a devět neúplných a drží její požadovanou množinu shodnou se scénáři, ke kterým test/mesh-lab/run dosáhne, takže žádná strana se nemůže zmenšit bez selhávajícího případu.
Jak to vidět
test/mesh-lab/run # builds, runs, tears down (docker required)
jq . target/mesh-lab/evidence.json
scripts/ci/mesh-lab-evidence # judges that record; exit 10 if it is not an acceptance
test/run.sh 414_mesh_lab_evidence # covers the reader, no docker needed
MESH_LAB_KEEP=1 test/mesh-lab/run # leaves the nodes up for inspectionCo nepokrývá
Jeden bridge je jeden segment vrstvy 2: laboratoř nesměruje mezi podsítěmi, neprochází NAT ani WAN a její uzly sdílejí jedno jádro. Fyzický běh na více strojích je samostatný ruční postup zdokumentovaný v docs/MESH.md.
Proč existuje
Posláním je spolupráce napříč stroji. Tvrzení o ní potřebuje stroje — nebo nejbližší reprodukovatelnou věc — na síti, kterou lze záměrně rozbít.