replace socket_wrapper with Linux network namespaces
Problem:
Socket wrapper has its limitations, like lack of sendmmsg()
syscall, non-fuctional TCP when combined with libuv, and most importantly we have our ugly fork to support "any" IP address (instead of original loopback + link local).
It turns out that new versions of Linux allows us to create an isolated network namespace even under non-root user - that can be tested using command unshare -rUn
.
In long term we might migrate Deckard from socket_wrapper to network namespaces and solve incompatibilities and missing features in socket_wrapper.
An obvious problem is that it is Linux-specific, but oh well, one cannot have everything. Reasoning:
- socket_wrapper hides OS networking stack anyway - running tests with socker_wrapper on e.g. MacOS does not actually test networking interaction with MacOS. It always tests mock environment provided by socket_wrapper.
- Migrating to Linux namespaces will test behavior on real networking stack on Linux, which is an improvement because right now we are only testing behavior inside socket_wrapper mock.