From 28a8f4aa1837c703b43990ed5695ecc284a26ebe Mon Sep 17 00:00:00 2001 From: Jared McKnight Date: Fri, 7 Oct 2022 10:48:20 -0400 Subject: [PATCH] separates the JSON dump/load tests from the regular server tests Additionally, adds a new test for exporting nat traversal rules and subsequently re-importing them from the export. --- tests/test_json.py | 539 +++++++++++++++++++++++++++++++++++++++++++ tests/test_server.py | 375 ------------------------------ 2 files changed, 539 insertions(+), 375 deletions(-) create mode 100644 tests/test_json.py diff --git a/tests/test_json.py b/tests/test_json.py new file mode 100644 index 0000000..ca2b6b3 --- /dev/null +++ b/tests/test_json.py @@ -0,0 +1,539 @@ + +import functools +import json +import pytest + +from subnet import ( + ip_network, + IPv4Network, + IPv4Address, +) + +from wireguard import ( + INTERFACE, + PORT, + Config, + ServerConfig, + Peer, + Server, +) +from wireguard.utils import generate_key, public_key + + +def test_server_json_dump_ipv4(): + + # We're obliged to use `sort_keys=True` here, so that the output will match the + # pre-built string exactly + + + calculated_server = { + "address": [ + "192.168.0.5" + ], + "allowed_ips": [ + "192.168.0.0/24", + "192.168.0.5/32" + ], + "description": "test-server", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "9ZFnCUpTWG3/rOLWXr1Yx5nHY6TawlthxoVl9WsPWJk=", + "public_key": "clrrtKlXuXnbDXN7nM00fMytLHDzaAGChERA1Pmvqns=", + "subnet": [ + "192.168.0.0/24" + ], + "table": None + } + calculated_peer = { + "address": [ + "192.168.0.52" + ], + "allowed_ips": [ + "192.168.0.52/32" + ], + "description": "test-peer", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "192.168.0.5" + ], + "description": "test-server", + "public_key": "clrrtKlXuXnbDXN7nM00fMytLHDzaAGChERA1Pmvqns=" + } + ], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "aJ7VaCMQNg0qIQ5Xa3xYJQpF9OZaWk/PQRFYtHxyWVE=", + "public_key": "ZJMdTDweEMnyoSxa88HWulr3NUtkqhldHHNG/Oup9iM=", + "table": None + } + calculated_server_w_peer = { + "address": [ + "192.168.0.5" + ], + "allowed_ips": [ + "192.168.0.0/24", + "192.168.0.5/32" + ], + "description": "test-server", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "192.168.0.52" + ], + "description": "test-peer", + "public_key": "ZJMdTDweEMnyoSxa88HWulr3NUtkqhldHHNG/Oup9iM=" + } + ], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "9ZFnCUpTWG3/rOLWXr1Yx5nHY6TawlthxoVl9WsPWJk=", + "public_key": "clrrtKlXuXnbDXN7nM00fMytLHDzaAGChERA1Pmvqns=", + "subnet": [ + "192.168.0.0/24" + ], + "table": None + } + + server = Server( + 'test-server', + '192.168.0.5/24', + private_key='9ZFnCUpTWG3/rOLWXr1Yx5nHY6TawlthxoVl9WsPWJk=', + ) + + assert server.json(sort_keys=True) == json.dumps(calculated_server, sort_keys=True) + + peer = server.peer( + 'test-peer', + address='192.168.0.52', + private_key='aJ7VaCMQNg0qIQ5Xa3xYJQpF9OZaWk/PQRFYtHxyWVE=', + ) + + assert peer.json(sort_keys=True) == json.dumps(calculated_peer, sort_keys=True) + assert server.json(sort_keys=True) == json.dumps(calculated_server_w_peer, sort_keys=True) + + assert peer.json(sort_keys=True) == Peer(**calculated_peer).json(sort_keys=True) + assert server.json(sort_keys=True) == Server(**calculated_server_w_peer).json(sort_keys=True) + + +def test_server_json_dump_ipv6(): + + # We're obliged to use `sort_keys=True` here, so that the output will match the + # pre-built string exactly + + calculated_server = { + "address": [ + "fde2:3a65:ca93:3125::4523:3425" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::/64", + "fde2:3a65:ca93:3125::4523:3425/128" + ], + "description": "test-server-2", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=", + "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=", + "subnet": [ + "fde2:3a65:ca93:3125::/64" + ], + "table": None + } + calculated_peer = { + "address": [ + "fde2:3a65:ca93:3125::3425:4523" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::3425:4523/128" + ], + "description": "test-peer-2", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "fde2:3a65:ca93:3125::4523:3425" + ], + "description": "test-server-2", + "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=" + } + ], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "kKzSxizUuGR28+DIL+w+WDT9OaTeDna6acb2axH19l8=", + "public_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", + "table": None + } + calculated_server_w_peer = { + "address": [ + "fde2:3a65:ca93:3125::4523:3425" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::/64", + "fde2:3a65:ca93:3125::4523:3425/128" + ], + "description": "test-server-2", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "fde2:3a65:ca93:3125::3425:4523" + ], + "description": "test-peer-2", + "public_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=" + } + ], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=", + "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=", + "subnet": [ + "fde2:3a65:ca93:3125::/64" + ], + "table": None + } + + server = Server( + 'test-server-2', + 'fde2:3a65:ca93:3125::4523:3425/64', + private_key='3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=', + ) + + assert server.json(sort_keys=True) == json.dumps(calculated_server, sort_keys=True) + + peer = server.peer( + 'test-peer-2', + address='fde2:3a65:ca93:3125::3425:4523', + private_key='kKzSxizUuGR28+DIL+w+WDT9OaTeDna6acb2axH19l8=', + ) + + assert peer.json(sort_keys=True) == json.dumps(calculated_peer, sort_keys=True) + assert server.json(sort_keys=True) == json.dumps(calculated_server_w_peer, sort_keys=True) + + assert peer.json(sort_keys=True) == Peer(**calculated_peer).json(sort_keys=True) + assert server.json(sort_keys=True) == Server(**calculated_server_w_peer).json(sort_keys=True) + + +def test_server_json_dump_dual_ips(): + + # We're obliged to use `sort_keys=True` here, so that the output will match the + # pre-built string exactly + + calculated_server = { + "address": [ + "192.168.0.5", + "fde2:3a65:ca93:3125::4523:3425" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::4523:3425/128", + "192.168.0.0/24", + "192.168.0.5/32", + "fde2:3a65:ca93:3125::/64" + ], + "description": "test-server-3", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", + "public_key": "yw/9moFVd/UnkUZKWMwKbmx4uGFkt33HUxcL5fC5Nl0=", + "subnet": [ + "192.168.0.0/24", + "fde2:3a65:ca93:3125::/64" + ], + "table": None + } + calculated_peer = { + "address": [ + "192.168.0.52", + "fde2:3a65:ca93:3125::3425:4523" + ], + "allowed_ips": [ + "192.168.0.52/32", + "fde2:3a65:ca93:3125::3425:4523/128" + ], + "description": "test-peer-3", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "192.168.0.5", + "fde2:3a65:ca93:3125::4523:3425" + ], + "description": "test-server-3", + "public_key": "yw/9moFVd/UnkUZKWMwKbmx4uGFkt33HUxcL5fC5Nl0=" + } + ], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "0LUF7V6tpmH93dNDRRiBchAAFzfkiyFUNvpOyNwQdWc=", + "public_key": "1loZYE8cKaENRmjUJI8f2suVq/MpPXfRIgRfJakdyUA=", + "table": None + } + calculated_server_w_peer = { + "address": [ + "192.168.0.5", + "fde2:3a65:ca93:3125::4523:3425" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::4523:3425/128", + "192.168.0.0/24", + "192.168.0.5/32", + "fde2:3a65:ca93:3125::/64" + ], + "description": "test-server-3", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "192.168.0.52", + "fde2:3a65:ca93:3125::3425:4523" + ], + "description": "test-peer-3", + "public_key": "1loZYE8cKaENRmjUJI8f2suVq/MpPXfRIgRfJakdyUA=" + } + ], + "post_down": [], + "post_up": [], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", + "public_key": "yw/9moFVd/UnkUZKWMwKbmx4uGFkt33HUxcL5fC5Nl0=", + "subnet": [ + "192.168.0.0/24", + "fde2:3a65:ca93:3125::/64" + ], + "table": None + } + + server = Server( + 'test-server-3', + ['192.168.0.0/24', 'fde2:3a65:ca93:3125::/64',], + address=['192.168.0.5', 'fde2:3a65:ca93:3125::4523:3425',], + private_key='ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=', + ) + + assert server.json(sort_keys=True) == json.dumps(calculated_server, sort_keys=True) + + peer = server.peer( + 'test-peer-3', + address=['192.168.0.52', 'fde2:3a65:ca93:3125::3425:4523',], + private_key='0LUF7V6tpmH93dNDRRiBchAAFzfkiyFUNvpOyNwQdWc=', + ) + + assert peer.json(sort_keys=True) == json.dumps(calculated_peer, sort_keys=True) + assert server.json(sort_keys=True) == json.dumps(calculated_server_w_peer, sort_keys=True) + + assert peer.json(sort_keys=True) == Peer(**calculated_peer).json(sort_keys=True) + assert server.json(sort_keys=True) == Server(**calculated_server_w_peer).json(sort_keys=True) + + +def test_server_json_dump_with_nat_traversal(): + + calculated_server = { + "address": [ + "fde2:3a65:ca93:3125::4523:3425" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::/64", + "fde2:3a65:ca93:3125::4523:3425/128" + ], + "description": "test-server-2", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [], + "post_down": [ + 'iptables -D FORWARD -i %i -o eth1 -j ACCEPT', + 'iptables -D FORWARD -i eth1 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT', + 'iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE', + ], + "post_up": [ + 'iptables -A FORWARD -i %i -o eth1 -j ACCEPT', + 'iptables -A FORWARD -i eth1 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT', + 'iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE', + ], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=", + "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=", + "subnet": [ + "fde2:3a65:ca93:3125::/64" + ], + "table": None + } + calculated_peer = { + "address": [ + "fde2:3a65:ca93:3125::3425:4523" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::3425:4523/128" + ], + "description": "test-peer-2", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "fde2:3a65:ca93:3125::4523:3425" + ], + "description": "test-server-2", + "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=" + } + ], + "post_down": [ + 'iptables -D FORWARD -i %i -o eth2 -j ACCEPT', + 'iptables -D FORWARD -i eth2 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT', + 'iptables -t nat -D POSTROUTING -o eth2 -j MASQUERADE', + ], + "post_up": [ + 'iptables -A FORWARD -i %i -o eth2 -j ACCEPT', + 'iptables -A FORWARD -i eth2 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT', + 'iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE', + ], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "kKzSxizUuGR28+DIL+w+WDT9OaTeDna6acb2axH19l8=", + "public_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", + "table": None + } + calculated_server_w_peer = { + "address": [ + "fde2:3a65:ca93:3125::4523:3425" + ], + "allowed_ips": [ + "fde2:3a65:ca93:3125::/64", + "fde2:3a65:ca93:3125::4523:3425/128" + ], + "description": "test-server-2", + "dns": [], + "endpoint": None, + "interface": "wg0", + "keepalive": None, + "mtu": None, + "peers": [ + { + "address": [ + "fde2:3a65:ca93:3125::3425:4523" + ], + "description": "test-peer-2", + "public_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=" + } + ], + "post_down": [ + 'iptables -D FORWARD -i %i -o eth1 -j ACCEPT', + 'iptables -D FORWARD -i eth1 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT', + 'iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE', + ], + "post_up": [ + 'iptables -A FORWARD -i %i -o eth1 -j ACCEPT', + 'iptables -A FORWARD -i eth1 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT', + 'iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE', + ], + "pre_down": [], + "pre_up": [], + "preshared_key": None, + "private_key": "3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=", + "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=", + "subnet": [ + "fde2:3a65:ca93:3125::/64" + ], + "table": None + } + + server = Server( + 'test-server-2', + 'fde2:3a65:ca93:3125::4523:3425/64', + private_key='3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=', + ) + server.add_nat_traversal('eth1') + + assert server.json(sort_keys=True) == json.dumps(calculated_server, sort_keys=True) + + peer = server.peer( + 'test-peer-2', + address='fde2:3a65:ca93:3125::3425:4523', + private_key='kKzSxizUuGR28+DIL+w+WDT9OaTeDna6acb2axH19l8=', + ) + peer.add_nat_traversal('eth2') + + assert peer.json(sort_keys=True) == json.dumps(calculated_peer, sort_keys=True) + assert server.json(sort_keys=True) == json.dumps(calculated_server_w_peer, sort_keys=True) + + assert peer.json(sort_keys=True) == Peer(**calculated_peer).json(sort_keys=True) + assert peer.json(sort_keys=True) == Peer(**json.loads(Peer(**calculated_peer).json(sort_keys=True))).json(sort_keys=True) + assert server.json(sort_keys=True) == Server(**calculated_server_w_peer).json(sort_keys=True) + assert server.json(sort_keys=True) == Server(**json.loads(Server(**calculated_server_w_peer).json(sort_keys=True))).json(sort_keys=True) diff --git a/tests/test_server.py b/tests/test_server.py index 50500e6..277857c 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -1,6 +1,5 @@ import functools -import json import pytest from subnet import ( @@ -689,377 +688,3 @@ def test_server_invalid_subnet(subnet, address, exception_message): ) assert exception_message in str(exc.value) - - -def test_server_json_dump_ipv4(): - - # We're obliged to use `sort_keys=True` here, so that the output will match the - # pre-built string exactly - - - calculated_server = json.dumps( - { - "address": [ - "192.168.0.5" - ], - "allowed_ips": [ - "192.168.0.0/24", - "192.168.0.5/32" - ], - "description": "test-server", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "9ZFnCUpTWG3/rOLWXr1Yx5nHY6TawlthxoVl9WsPWJk=", - "public_key": "clrrtKlXuXnbDXN7nM00fMytLHDzaAGChERA1Pmvqns=", - "subnet": [ - "192.168.0.0/24" - ], - "table": None - }, sort_keys=True) - calculated_peer = json.dumps( - { - "address": [ - "192.168.0.52" - ], - "allowed_ips": [ - "192.168.0.52/32" - ], - "description": "test-peer", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [ - { - "address": [ - "192.168.0.5" - ], - "description": "test-server", - "public_key": "clrrtKlXuXnbDXN7nM00fMytLHDzaAGChERA1Pmvqns=" - } - ], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "aJ7VaCMQNg0qIQ5Xa3xYJQpF9OZaWk/PQRFYtHxyWVE=", - "public_key": "ZJMdTDweEMnyoSxa88HWulr3NUtkqhldHHNG/Oup9iM=", - "table": None - }, sort_keys=True) - calculated_server_w_peer = json.dumps( - { - "address": [ - "192.168.0.5" - ], - "allowed_ips": [ - "192.168.0.0/24", - "192.168.0.5/32" - ], - "description": "test-server", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [ - { - "address": [ - "192.168.0.52" - ], - "description": "test-peer", - "public_key": "ZJMdTDweEMnyoSxa88HWulr3NUtkqhldHHNG/Oup9iM=" - } - ], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "9ZFnCUpTWG3/rOLWXr1Yx5nHY6TawlthxoVl9WsPWJk=", - "public_key": "clrrtKlXuXnbDXN7nM00fMytLHDzaAGChERA1Pmvqns=", - "subnet": [ - "192.168.0.0/24" - ], - "table": None - }, sort_keys=True) - - server = Server( - 'test-server', - '192.168.0.5/24', - private_key='9ZFnCUpTWG3/rOLWXr1Yx5nHY6TawlthxoVl9WsPWJk=', - ) - - assert server.json(sort_keys=True) == calculated_server - - peer = server.peer( - 'test-peer', - address='192.168.0.52', - private_key='aJ7VaCMQNg0qIQ5Xa3xYJQpF9OZaWk/PQRFYtHxyWVE=', - ) - - assert peer.json(sort_keys=True) == calculated_peer - assert server.json(sort_keys=True) == calculated_server_w_peer - - -def test_server_json_dump_ipv6(): - - # We're obliged to use `sort_keys=True` here, so that the output will match the - # pre-built string exactly - - calculated_server = json.dumps( - { - "address": [ - "fde2:3a65:ca93:3125::4523:3425" - ], - "allowed_ips": [ - "fde2:3a65:ca93:3125::/64", - "fde2:3a65:ca93:3125::4523:3425/128" - ], - "description": "test-server-2", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=", - "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=", - "subnet": [ - "fde2:3a65:ca93:3125::/64" - ], - "table": None - }, sort_keys=True) - calculated_peer = json.dumps( - { - "address": [ - "fde2:3a65:ca93:3125::3425:4523" - ], - "allowed_ips": [ - "fde2:3a65:ca93:3125::3425:4523/128" - ], - "description": "test-peer-2", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [ - { - "address": [ - "fde2:3a65:ca93:3125::4523:3425" - ], - "description": "test-server-2", - "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=" - } - ], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "kKzSxizUuGR28+DIL+w+WDT9OaTeDna6acb2axH19l8=", - "public_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", - "table": None - }, sort_keys=True) - calculated_server_w_peer = json.dumps( - { - "address": [ - "fde2:3a65:ca93:3125::4523:3425" - ], - "allowed_ips": [ - "fde2:3a65:ca93:3125::/64", - "fde2:3a65:ca93:3125::4523:3425/128" - ], - "description": "test-server-2", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [ - { - "address": [ - "fde2:3a65:ca93:3125::3425:4523" - ], - "description": "test-peer-2", - "public_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=" - } - ], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=", - "public_key": "hBo5FSeVkb6WvGzpkitOIJYabLc835XbVjt6a7F0eHQ=", - "subnet": [ - "fde2:3a65:ca93:3125::/64" - ], - "table": None - }, sort_keys=True) - - server = Server( - 'test-server-2', - 'fde2:3a65:ca93:3125::4523:3425/64', - private_key='3cH3g4JwUdzg+q2Nqwvr9/WVJujWUa9NHy2PiY1jli4=', - ) - - assert server.json(sort_keys=True) == calculated_server - - peer = server.peer( - 'test-peer-2', - address='fde2:3a65:ca93:3125::3425:4523', - private_key='kKzSxizUuGR28+DIL+w+WDT9OaTeDna6acb2axH19l8=', - ) - - assert peer.json(sort_keys=True) == calculated_peer - assert server.json(sort_keys=True) == calculated_server_w_peer - - -def test_server_json_dump_dual_ips(): - - # We're obliged to use `sort_keys=True` here, so that the output will match the - # pre-built string exactly - - calculated_server = json.dumps( - { - "address": [ - "192.168.0.5", - "fde2:3a65:ca93:3125::4523:3425" - ], - "allowed_ips": [ - "fde2:3a65:ca93:3125::4523:3425/128", - "192.168.0.0/24", - "192.168.0.5/32", - "fde2:3a65:ca93:3125::/64" - ], - "description": "test-server-3", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", - "public_key": "yw/9moFVd/UnkUZKWMwKbmx4uGFkt33HUxcL5fC5Nl0=", - "subnet": [ - "192.168.0.0/24", - "fde2:3a65:ca93:3125::/64" - ], - "table": None - }, sort_keys=True) - calculated_peer = json.dumps( - { - "address": [ - "192.168.0.52", - "fde2:3a65:ca93:3125::3425:4523" - ], - "allowed_ips": [ - "192.168.0.52/32", - "fde2:3a65:ca93:3125::3425:4523/128" - ], - "description": "test-peer-3", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [ - { - "address": [ - "192.168.0.5", - "fde2:3a65:ca93:3125::4523:3425" - ], - "description": "test-server-3", - "public_key": "yw/9moFVd/UnkUZKWMwKbmx4uGFkt33HUxcL5fC5Nl0=" - } - ], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "0LUF7V6tpmH93dNDRRiBchAAFzfkiyFUNvpOyNwQdWc=", - "public_key": "1loZYE8cKaENRmjUJI8f2suVq/MpPXfRIgRfJakdyUA=", - "table": None - }, sort_keys=True) - calculated_server_w_peer = json.dumps( - { - "address": [ - "192.168.0.5", - "fde2:3a65:ca93:3125::4523:3425" - ], - "allowed_ips": [ - "fde2:3a65:ca93:3125::4523:3425/128", - "192.168.0.0/24", - "192.168.0.5/32", - "fde2:3a65:ca93:3125::/64" - ], - "description": "test-server-3", - "dns": [], - "endpoint": None, - "interface": "wg0", - "keepalive": None, - "mtu": None, - "peers": [ - { - "address": [ - "192.168.0.52", - "fde2:3a65:ca93:3125::3425:4523" - ], - "description": "test-peer-3", - "public_key": "1loZYE8cKaENRmjUJI8f2suVq/MpPXfRIgRfJakdyUA=" - } - ], - "post_down": [], - "post_up": [], - "pre_down": [], - "pre_up": [], - "preshared_key": None, - "private_key": "ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=", - "public_key": "yw/9moFVd/UnkUZKWMwKbmx4uGFkt33HUxcL5fC5Nl0=", - "subnet": [ - "192.168.0.0/24", - "fde2:3a65:ca93:3125::/64" - ], - "table": None - }, sort_keys=True) - - server = Server( - 'test-server-3', - ['192.168.0.0/24', 'fde2:3a65:ca93:3125::/64',], - address=['192.168.0.5', 'fde2:3a65:ca93:3125::4523:3425',], - private_key='ShmphOZy2kccMQdPOw+s0PbM3O5QkNIcxXMa60KA31s=', - ) - - assert server.json(sort_keys=True) == calculated_server - - peer = server.peer( - 'test-peer-3', - address=['192.168.0.52', 'fde2:3a65:ca93:3125::3425:4523',], - private_key='0LUF7V6tpmH93dNDRRiBchAAFzfkiyFUNvpOyNwQdWc=', - ) - - assert peer.json(sort_keys=True) == calculated_peer - assert server.json(sort_keys=True) == calculated_server_w_peer