portmapper.go was introduced for UPnP in commit
8ed43f1f2a.
This also adds a unit test which exercises the incomplete
natlab server implementation of these portmapping protocols.
Updates #21713
Change-Id: I33b61ccbe8c1d8d99d56aa357ae24777be3f5739
Signed-off-by: Francois Marier <francois@tailscale.com>
natlab
Virtual network lab for integration tests. Tracking issue: https://github.com/tailscale/tailscale/issues/13038
Use the run-natlab-tests GitHub label on PRs to run these tests.
Prerequisites
qemu-system-x86_64andqemu-img. On Debian/Ubuntu:apt install qemu-system-x86 qemu-utils- A built gokrazy natlabapp image (auto-built on first run via
make -C gokrazy natlab)
KVM is used automatically on Linux when /dev/kvm is readable+writable. Add
yourself to the kvm group to avoid QEMU falling back to software emulation.
Running locally
go test ./tstest/natlab/vmtest/ --run-vm-tests -v -timeout=15
go test's default timeout (10 min) is likely not enough to cover the whole
package. You may need to raise it further or disable the timeout entirely
(-timeout=0) when running the full suite.
Alternatively, select individual tests with the usual -run.
Matrix testing (early stages)
Many tests can effectively be run across multiple variations. To wire up all
these tests programatically and not manually, a tool exists in
./cmd/natlab-test-matrix that will parse the test files in the folder
./tstest/natlab/vmtest and generate a full set of tests to run.
A VariationMap defines variations to be tested. Right now the only variation
used is OS image variation, but this can be expanded to NAT, portmapper and so
on.