diff options
author | Kali Kaneko <kali@leap.se> | 2017-08-11 00:59:56 +0200 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2017-08-11 14:21:57 -0400 |
commit | d64f3c22c132c5de0d759d1e76ff7ced054bfcaa (patch) | |
tree | cf14b625d1206ccdf44769f3ee2e14985730dc0d /tests | |
parent | 763f88658a4e6d12557c7931f5435ebd35548ca7 (diff) |
[feature] automatic vpn gateway selection, based on timezone
This is a first approach to automatic gateways selection.
More things are missing:
- allow manual selection, by location or country code.
- take the hemisphere into account.
- expose the selected gw to the api/cli
but overall seems this is a good approach to make 0.10 release usable in
terms of vpn.
- Resolves: #8804
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/vpn/test_gateways.py | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/tests/unit/vpn/test_gateways.py b/tests/unit/vpn/test_gateways.py new file mode 100644 index 0000000..cc7fbca --- /dev/null +++ b/tests/unit/vpn/test_gateways.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +# test_gateways.py +# Copyright (C) 2017 LEAP Encryption Access Project +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +""" +tests for leap.bitmask.vpn.gateways +""" +import time + +from twisted.trial import unittest + +from leap.bitmask.vpn.gateways import GatewaySelector + + +sample_gateways = [ + {u'host': u'gateway1.com', + u'ip_address': u'1.2.3.4', + u'location': u'location1'}, + {u'host': u'gateway2.com', + u'ip_address': u'2.3.4.5', + u'location': u'location2'}, + {u'host': u'gateway3.com', + u'ip_address': u'3.4.5.6', + u'location': u'location3'}, + {u'host': u'gateway4.com', + u'ip_address': u'4.5.6.7', + u'location': u'location4'} +] + +sample_gateways_no_location = [ + {u'host': u'gateway1.com', + u'ip_address': u'1.2.3.4'}, + {u'host': u'gateway2.com', + u'ip_address': u'2.3.4.5'}, + {u'host': u'gateway3.com', + u'ip_address': u'3.4.5.6'} +] + +sample_locations = { + u'location1': {u'timezone': u'2'}, + u'location2': {u'timezone': u'-7'}, + u'location3': {u'timezone': u'-4'}, + u'location4': {u'timezone': u'+13'} +} + +# 0 is not used, only for indexing from 1 in tests +ips = (0, u'1.2.3.4', u'2.3.4.5', u'3.4.5.6', u'4.5.6.7') + + +class GatewaySelectorTestCase(unittest.TestCase): + + def test_get_no_gateways(self): + selector = GatewaySelector() + gateways = selector.select_gateways() + assert gateways == [] + + def test_get_gateway_with_no_locations(self): + selector = GatewaySelector( + gateways=sample_gateways_no_location) + gateways = selector.select_gateways() + gateways_default_order = [ + sample_gateways[0]['ip_address'], + sample_gateways[1]['ip_address'], + sample_gateways[2]['ip_address'] + ] + assert gateways == gateways_default_order + + def test_correct_order_gmt(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + tz_offset=0) + gateways = selector.select_gateways() + assert gateways == [ips[1], ips[3], ips[2], ips[4]] + + def test_correct_order_gmt_minus_3(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + tz_offset=-3) + gateways = selector.select_gateways() + assert gateways == [ips[3], ips[2], ips[1], ips[4]] + + def test_correct_order_gmt_minus_7(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + tz_offset=-7) + gateways = selector.select_gateways() + assert gateways == [ips[2], ips[3], ips[4], ips[1]] + + def test_correct_order_gmt_plus_5(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + tz_offset=5) + gateways = selector.select_gateways() + assert gateways == [ips[1], ips[4], ips[3], ips[2]] + + def test_correct_order_gmt_plus_12(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + tz_offset=12) + gateways = selector.select_gateways() + assert gateways == [ips[4], ips[2], ips[3], ips[1]] + + def test_correct_order_gmt_minus_11(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + -11) + gateways = selector.select_gateways() + assert gateways == [ips[4], ips[2], ips[3], ips[1]] + + def test_correct_order_gmt_plus_14(self): + selector = GatewaySelector( + sample_gateways, sample_locations, + 14) + gateways = selector.select_gateways() + assert gateways == [ips[4], ips[2], ips[3], ips[1]] |