From 733cac3bde72d1ee5aef75c57abd43062360c914 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Sat, 31 Jul 2021 19:42:41 +0200 Subject: disable GatewaysManager tests checking average gateway load, because currently we fake the values --- .../java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'app/src/test/java/se/leap/bitmaskclient/eip') diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java index 08591b6d..27bfdb34 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java @@ -345,7 +345,10 @@ public class GatewaysManagerTest { assertNull(gatewaysManager.select(0, "Stockholm")); } - @Test + /* + This test is disabled since we fake load values in gateway manager with randomized numbers. + */ + /* @Test public void testGetLocations_openvpn() { Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v4.json"); @@ -364,9 +367,12 @@ public class GatewaysManagerTest { assertEquals(averageLoad, location.averageLoad); } } - } + } */ - @Test + /* + This test is disabled since we fake load values in gateway manager with randomized numbers. + */ + /*@Test public void testGetLocations_obfs4() { Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v4.json"); @@ -390,6 +396,7 @@ public class GatewaysManagerTest { } } + */ private String getJsonStringFor(String filename) throws IOException { -- cgit v1.2.3 From 9bf787465a3ae22c76249317496c8927b22ffdb4 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Tue, 23 Nov 2021 12:32:07 +0100 Subject: calculate and show gateway load related to transport --- .../bitmaskclient/eip/GatewaySelectorTest.java | 2 + .../bitmaskclient/eip/GatewaysManagerTest.java | 52 +++++++++++----------- 2 files changed, 29 insertions(+), 25 deletions(-) (limited to 'app/src/test/java/se/leap/bitmaskclient/eip') diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java index 5186c462..6f26e494 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaySelectorTest.java @@ -27,6 +27,7 @@ import se.leap.bitmaskclient.base.utils.ConfigHelper; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyInt; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static org.powermock.api.mockito.PowerMockito.when; import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_PRIVATE_KEY; @@ -75,6 +76,7 @@ public class GatewaySelectorTest { @Before public void setup() throws IOException, JSONException, ConfigParser.ConfigParseError { mockStatic(ConfigHelper.class); + when(ConfigHelper.timezoneDistance(anyInt(), anyInt())).thenCallRealMethod(); mockTextUtils(); eipDefinition = new JSONObject(getInputAsString(getClass().getClassLoader().getResourceAsStream("eip-service-four-gateways.json"))); JSONArray gateways = eipDefinition.getJSONArray("gateways"); diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java index 27bfdb34..28311e18 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java @@ -23,27 +23,28 @@ import de.blinkt.openvpn.core.ConfigParser; import se.leap.bitmaskclient.base.models.Location; import se.leap.bitmaskclient.base.models.Provider; import se.leap.bitmaskclient.base.models.ProviderObservable; +import se.leap.bitmaskclient.base.utils.ConfigHelper; +import se.leap.bitmaskclient.base.utils.PreferenceHelper; import se.leap.bitmaskclient.testutils.MockHelper; import se.leap.bitmaskclient.testutils.MockSharedPreferences; import se.leap.bitmaskclient.testutils.TestSetupHelper; -import se.leap.bitmaskclient.base.utils.ConfigHelper; -import se.leap.bitmaskclient.base.utils.PreferenceHelper; import static de.blinkt.openvpn.core.connection.Connection.TransportType.OBFS4; import static de.blinkt.openvpn.core.connection.Connection.TransportType.OPENVPN; import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertNull; -import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.mockStatic; import static se.leap.bitmaskclient.base.models.Constants.GATEWAYS; import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_EIP_DEFINITION; import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_PRIVATE_KEY; import static se.leap.bitmaskclient.base.models.Constants.PROVIDER_VPN_CERTIFICATE; +import static se.leap.bitmaskclient.base.models.Constants.USE_BRIDGES; import static se.leap.bitmaskclient.base.models.Provider.CA_CERT; import static se.leap.bitmaskclient.testutils.MockHelper.mockTextUtils; import static se.leap.bitmaskclient.testutils.TestSetupHelper.getProvider; @@ -69,6 +70,8 @@ public class GatewaysManagerTest { mockTextUtils(); when(ConfigHelper.getCurrentTimezone()).thenReturn(-1); when(ConfigHelper.stringEqual(anyString(), anyString())).thenCallRealMethod(); + when(ConfigHelper.isIPv4(anyString())).thenCallRealMethod(); + when(ConfigHelper.timezoneDistance(anyInt(), anyInt())).thenCallRealMethod(); secrets = new JSONObject(getJsonStringFor("secrets.json")); sharedPreferences = new MockSharedPreferences(); sharedPreferences.edit(). @@ -345,10 +348,7 @@ public class GatewaysManagerTest { assertNull(gatewaysManager.select(0, "Stockholm")); } - /* - This test is disabled since we fake load values in gateway manager with randomized numbers. - */ - /* @Test + @Test public void testGetLocations_openvpn() { Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v4.json"); @@ -360,43 +360,45 @@ public class GatewaysManagerTest { assertEquals(3, locations.size()); for (Location location : locations) { - if ("Paris".equals(location.name)) { - assertEquals(3, location.numberOfGateways); + if ("Paris".equals(location.getName())) { + assertEquals(3, location.getNumberOfGateways(OPENVPN)); // manually calculate average load of paris gateways in "v4/riseup_geoip_v4.json" double averageLoad = (0.3 + 0.36 + 0.92) / 3.0; - assertEquals(averageLoad, location.averageLoad); + assertEquals(averageLoad, location.getAverageLoad(OPENVPN)); } } - } */ + } - /* - This test is disabled since we fake load values in gateway manager with randomized numbers. - */ - /*@Test + @Test public void testGetLocations_obfs4() { Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v4.json"); MockHelper.mockProviderObservable(provider); mockStatic(PreferenceHelper.class); when(PreferenceHelper.getUseBridges(any(Context.class))).thenReturn(true); + sharedPreferences.edit().putBoolean(USE_BRIDGES, true).commit(); GatewaysManager gatewaysManager = new GatewaysManager(mockContext); List locations = gatewaysManager.getGatewayLocations(); - assertEquals(2, locations.size()); + assertEquals(3, locations.size()); for (Location location : locations) { - if ("Montreal".equals(location.name)) { - assertEquals(1, location.numberOfGateways); - assertEquals(0.59, location.averageLoad); + if ("Montreal".equals(location.getName())) { + assertEquals(1, location.getNumberOfGateways(OBFS4)); + assertEquals(0.59, location.getAverageLoad(OBFS4)); + assertTrue(location.supportsTransport(OBFS4)); } - if ("Paris".equals(location.name)) { + if ("Paris".equals(location.getName())) { // checks that only gateways supporting obfs4 are taken into account - assertEquals(1, location.numberOfGateways); - assertEquals(0.36, location.averageLoad); + assertEquals(1, location.getNumberOfGateways(OBFS4)); + assertEquals(0.36, location.getAverageLoad(OBFS4)); + assertTrue(location.supportsTransport(OBFS4)); + } + if ("Amsterdam".equals(location.getName())) { + assertFalse(location.supportsTransport(OBFS4)); } } } - */ private String getJsonStringFor(String filename) throws IOException { -- cgit v1.2.3 From 829849c074d397ceba59c89fe4be0bd65ea49f6f Mon Sep 17 00:00:00 2001 From: cyBerta Date: Tue, 23 Nov 2021 12:34:00 +0100 Subject: calculate fake load from timezone distance if menshen doesn't serve load info --- .../bitmaskclient/eip/GatewaysManagerTest.java | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'app/src/test/java/se/leap/bitmaskclient/eip') diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java index 28311e18..33abfbed 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java @@ -70,6 +70,7 @@ public class GatewaysManagerTest { mockTextUtils(); when(ConfigHelper.getCurrentTimezone()).thenReturn(-1); when(ConfigHelper.stringEqual(anyString(), anyString())).thenCallRealMethod(); + when(ConfigHelper.getConnectionQualityFromTimezoneDistance(anyInt())).thenCallRealMethod(); when(ConfigHelper.isIPv4(anyString())).thenCallRealMethod(); when(ConfigHelper.timezoneDistance(anyInt(), anyInt())).thenCallRealMethod(); secrets = new JSONObject(getJsonStringFor("secrets.json")); @@ -400,6 +401,55 @@ public class GatewaysManagerTest { } + @Test + public void testGetLocations_noMenshen_obfs4_calculateAverageLoadFromTimezoneDistance() { + Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v1.json"); + + MockHelper.mockProviderObservable(provider); + mockStatic(PreferenceHelper.class); + when(PreferenceHelper.getUseBridges(any(Context.class))).thenReturn(true); + sharedPreferences.edit().putBoolean(USE_BRIDGES, true).commit(); + GatewaysManager gatewaysManager = new GatewaysManager(mockContext); + List locations = gatewaysManager.getGatewayLocations(); + + assertEquals(3, locations.size()); + for (Location location : locations) { + if ("Montreal".equals(location.getName())) { + assertEquals(1, location.getNumberOfGateways(OBFS4)); + assertEquals(1/3.0, location.getAverageLoad(OBFS4)); + } + if ("Paris".equals(location.getName())) { + // checks that only gateways supporting obfs4 are taken into account + assertEquals(1, location.getNumberOfGateways(OBFS4)); + assertEquals(0.25, location.getAverageLoad(OBFS4)); + } + } + } + + @Test + public void testGetLocations_noMenshen_openvpn_calculateAverageLoadFromTimezoneDistance() { + Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v1.json"); + + MockHelper.mockProviderObservable(provider); + mockStatic(PreferenceHelper.class); + when(PreferenceHelper.getUseBridges(any(Context.class))).thenReturn(false); + sharedPreferences.edit().putBoolean(USE_BRIDGES, false).commit(); + GatewaysManager gatewaysManager = new GatewaysManager(mockContext); + List locations = gatewaysManager.getGatewayLocations(); + + assertEquals(3, locations.size()); + for (Location location : locations) { + if ("Montreal".equals(location.getName())) { + assertEquals(1, location.getNumberOfGateways(OPENVPN)); + assertEquals(1/3.0, location.getAverageLoad(OPENVPN)); + } + if ("Paris".equals(location.getName())) { + // checks that only gateways supporting obfs4 are taken into account + assertEquals(3, location.getNumberOfGateways(OPENVPN)); + assertEquals(0.25, location.getAverageLoad(OPENVPN)); + } + } + } private String getJsonStringFor(String filename) throws IOException { return TestSetupHelper.getInputAsString(getClass().getClassLoader().getResourceAsStream(filename)); -- cgit v1.2.3 From 9317eea480bce1442ad91600917730559b94753d Mon Sep 17 00:00:00 2001 From: cyBerta Date: Tue, 23 Nov 2021 12:34:18 +0100 Subject: fix ProviderApiManagerTest --- .../test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app/src/test/java/se/leap/bitmaskclient/eip') diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java index 2b1dc2ef..5bed679b 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/ProviderApiManagerTest.java @@ -112,10 +112,11 @@ public class ProviderApiManagerTest { Throwable startTorServiceException; boolean hasNetworkConnection; TestProviderApiServiceCallback() { - new TestProviderApiServiceCallback(null, true); + this(null, true); } TestProviderApiServiceCallback(@Nullable Throwable startTorServiceException, boolean hasNetworkConnection) { this.startTorServiceException = startTorServiceException; + this.hasNetworkConnection = hasNetworkConnection; } @Override -- cgit v1.2.3 From f29ee8ac7378408e070be1130c9cadc8e947ddb3 Mon Sep 17 00:00:00 2001 From: cyBerta Date: Tue, 23 Nov 2021 14:51:33 +0100 Subject: sort locations by transport --- .../bitmaskclient/eip/GatewaysManagerTest.java | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'app/src/test/java/se/leap/bitmaskclient/eip') diff --git a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java index 33abfbed..43a6a496 100644 --- a/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java +++ b/app/src/test/java/se/leap/bitmaskclient/eip/GatewaysManagerTest.java @@ -451,6 +451,63 @@ public class GatewaysManagerTest { } } + + @Test + public void testGetSortedLocations_openvpn() { + Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v4_bad_obfs4_gateway.json"); + + MockHelper.mockProviderObservable(provider); + mockStatic(PreferenceHelper.class); + when(PreferenceHelper.getUseBridges(any(Context.class))).thenReturn(false); + GatewaysManager gatewaysManager = new GatewaysManager(mockContext); + List locations = gatewaysManager.getSortedGatewayLocations(OPENVPN); + + assertEquals(3, locations.size()); + + /** -> v4/riseup_geoip_v4_bad_obfs4_gateway.json OPENVPN + * Paris = 0.527 + * 0.36 - zarapito + * 0.92 - hoazin + * 0.3 - mouette + * + * Montreal = 0.59 + * 0.59 - yal + * + * Amsterdam = 0.8 + * 0.8 - redshank + */ + assertEquals("Paris", locations.get(0).getName()); + assertEquals("Montreal", locations.get(1).getName()); + assertEquals("Amsterdam", locations.get(2).getName()); + } + + @Test + public void testGetSortedLocations_obfs4() { + Provider provider = getProvider(null, null, null, null, null, null, "v4/riseup_eipservice_for_geoip_v4.json", "v4/riseup_geoip_v4_bad_obfs4_gateway.json"); + + MockHelper.mockProviderObservable(provider); + mockStatic(PreferenceHelper.class); + when(PreferenceHelper.getUseBridges(any(Context.class))).thenReturn(false); + GatewaysManager gatewaysManager = new GatewaysManager(mockContext); + List locations = gatewaysManager.getSortedGatewayLocations(OBFS4); + + assertEquals(3, locations.size()); + + /** -> v4/riseup_geoip_v4_bad_obfs4_gateway.json OBFS4 + * Paris = 0.92 + * 0.92 - hoazin + * + * Montreal = 0.59 + * 0.59 - yal + * + * Amsterdam = 0.0 - no obfs4 + * 0.0 - redshank + */ + assertEquals("Montreal", locations.get(0).getName()); + assertEquals("Paris", locations.get(1).getName()); + assertEquals("Amsterdam", locations.get(2).getName()); + } + private String getJsonStringFor(String filename) throws IOException { return TestSetupHelper.getInputAsString(getClass().getClassLoader().getResourceAsStream(filename)); } -- cgit v1.2.3