Testing APIAPI's Replicated Rope & Physics-Carry Kit
Run the kit's own automation suite and emulate bad networks.
Assumes you have finished install.md.
What ships
The kit ships its own automation suite in the UKRopeTests module (UncookedOnly, so it is never compiled into a cooked game, client or server). Run it in your project to check that the kit behaves as documented with your engine version and configuration.
Running the suite
Every kit test name begins with UK.Rope., so one command runs the whole suite headless:
UnrealEditor-Cmd <YourProject>.uproject -nullrhi -unattended -nosplash -ExecCmds="Automation RunTests UK.Rope; Quit"
In the editor the same tests are under Tools › Session Frontend › Automation (filter UK.Rope).
The networked tests start real listen-server and dedicated-server sessions inside the editor process, with a test net driver, so they need the editor (UnrealEditor-Cmd or the editor UI); in a -game or -server process they skip.
| Name segment | What it covers |
|---|---|
UK.Rope.Core. | Logic with no world: formulas, wire layouts, state tables, the test harness itself |
UK.Rope.Host. | Ropes in a running world and in networked sessions: replication, cuts, anchors, joins, relevancy |
UK.Rope.Presets. | Presets, cutting rules and ziplines |
UK.Rope.Interactor. | Requests: validation, throttling, replies, possession changes |
UK.Rope.Carry. | Grab, hold, drop, throw, weight and wire cost |
UK.Rope.Bridge. | Movement bridge selection and the default bridge |
UK.Rope.CMC. | The Character Movement adapter |
UK.Rope.Client. | The rope visual and the network debug overlay |
UK.Rope.Mp., UK.Rope.Multiprocess. | Separate-process join tests, driven by the kit's own multi-process runner; they skip in a normal run |
Skips are expected
Some tests report that they were skipped. That is designed behaviour, not a problem. Every skip names exactly one reason from this list, printed as UK_SKIP_REASON=<reason>:
| Reason | Meaning | What, if anything, to do |
|---|---|---|
fixture_missing | The test reads the kit's internal fixture files, which are not shipped. | Nothing - expected in every customer project. |
session_unavailable | The test needs an in-process networked session and this run has none (a -game / -server process, or a multi-process test outside its runner). | Nothing - run the suite in the editor to include the session tests. |
content_missing | The test needs a map or asset from Content/UKRope/Tests/, and it is not installed. | Nothing, if you removed the test content on purpose. |
calibration_mismatch | Your configuration differs from the one an exact number was calibrated against. | Nothing - the behaviour tests still ran. |
iris_legacy_only | Iris is enabled and the test measures the default replication path specifically. | Nothing - the kit supports both; only this measurement is path-specific. |
adapter_inactive | The test covers an adapter module that is not loaded in your project. | Nothing, unless you expected that adapter to be active. |
tier_gated | The test belongs to a feature of a later version. | Nothing. |
fallback_multiprocess | This engine version could not host an in-process session; the test belongs to the multi-process runner. | Nothing. |
A test that fails with one of these conditions instead of skipping is a defect in the kit - please report it.
Your settings are left untouched
The networked tests pin process-wide state to be deterministic (a fixed time step, random seeds, several net.* console variables, a test net driver). The suite snapshots all of it before it changes anything and restores it afterwards. It also checks itself: a test hashes your project's Config/DefaultEngine.ini and Config/DefaultEditorPerProjectUserSettings.ini and the plugin's own Config files, and reads the console variables the suite pins, before and after a session, and fails if a byte moved. If you ever see the suite change a setting in your project, please report it.
Diagnostic traces (off unless you ask for them)
One Iris carry test can record an Unreal Insights trace of its network traffic, to name the object behind an unexpected byte difference. It records only when you opt in, by setting the environment variable UK_TEST_OUTPUT_DIR (the trace is written there) or UK_ROPE_NETTRACE=1 (the trace is written to the UKRopeTraces folder in your project's Saved folder). Without either, the test reports UK_DIAG_UNAVAILABLE in its log and changes nothing.
When it records, it never stops a trace you already have running (Unreal Insights, or a -trace command line): the test then skips its own trace. It raises the engine's network-trace detail only for its own run and restores your previous setting afterwards. A passing test deletes its trace file; a failing one keeps it beside the failure (a file of about twenty megabytes) and prints its path.
Network emulation profiles
The kit's networked tests run under three named network conditions. To try the same conditions yourself - in Play In Editor, or with a packaged client and server - use the profile's packet-simulation settings, either on the command line of each process or in your project's DefaultEngine.ini. Packet simulation works in Development and Debug builds, not in Shipping.
rtt0 - no emulation
-PktLag=0 -PktLagVariance=0 -PktLoss=0
[PacketSimulationSettings]
PktLag=0
PktLagVariance=0
PktLoss=0
rtt150_loss2 - about 150 ms round trip, 2 % loss
-PktLag=75 -PktLagVariance=15 -PktLoss=2
[PacketSimulationSettings]
PktLag=75
PktLagVariance=15
PktLoss=2
rtt300_loss5 - about 300 ms round trip, 5 % loss
-PktLag=150 -PktLagVariance=30 -PktLoss=5
[PacketSimulationSettings]
PktLag=150
PktLagVariance=30
PktLoss=5
PktLag is the delay each machine adds to every packet it sends, in milliseconds, so a client and a server that both apply it see about twice that as their round trip. PktLagVariance adds a random spread of up to that many milliseconds either way, and PktLoss drops that percentage of packets. In Play In Editor you can set the same values in the editor's network emulation settings (Editor Preferences › Level Editor › Play, Multiplayer Options).