From 74842cba92591aa9fbf64e8c6f39900a68b0c11c Mon Sep 17 00:00:00 2001 From: cyBerta Date: Fri, 19 Oct 2018 23:15:13 +0200 Subject: #8919 update dependencies --- .../de/blinkt/openvpn/core/TestConfigParser.java | 223 ++++++++++++++++++++- 1 file changed, 221 insertions(+), 2 deletions(-) (limited to 'app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java') diff --git a/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java b/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java index 560d4fc8..41ee2981 100644 --- a/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java +++ b/app/src/test/java/de/blinkt/openvpn/core/TestConfigParser.java @@ -5,21 +5,51 @@ package de.blinkt.openvpn.core; +import android.app.Application; +import android.content.Context; +import se.leap.bitmaskclient.R; import org.junit.Assert; import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; import java.io.IOException; import java.io.StringReader; +import java.util.Arrays; import de.blinkt.openvpn.VpnProfile; +import org.robolectric.annotation.Config; /** * Created by arne on 03.10.16. */ +@Config(manifest= "src/main/AndroidManifest.xml") +@RunWith(RobolectricTestRunner.class) public class TestConfigParser { - String miniconfig = "client\nremote test.blinkt.de\n"; + public static final String fakeCerts = "\n" + + "-----BEGIN CERTIFICATE-----\n" + + "\n" + + "-----END CERTIFICATE-----\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "-----BEGIN CERTIFICATE-----\n" + + "\n" + + "-----END CERTIFICATE-----\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "-----BEGIN PRIVATE KEY-----\n" + + "\n" + + "-----END PRIVATE KEY-----\n" + + "\n" + + ""; + private final String miniconfig = "client\nremote test.blinkt.de\n"; @Test public void testHttpProxyPass() throws IOException, ConfigParser.ConfigParseError { @@ -31,7 +61,196 @@ public class TestConfigParser { ConfigParser cp = new ConfigParser(); cp.parseConfig(new StringReader(miniconfig + httpproxypass)); VpnProfile p = cp.convertProfile(); - Assert.assertTrue(p.mCustomConfigOptions.contains(httpproxypass)); + Assert.assertFalse(p.mCustomConfigOptions.contains(httpproxypass)); + + } + + @Test + public void cleanReImport() throws IOException, ConfigParser.ConfigParseError { + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(miniconfig + fakeCerts)); + VpnProfile vp = cp.convertProfile(); + + String outConfig = vp.getConfigFile(RuntimeEnvironment.application, false); + + cp = new ConfigParser(); + cp.parseConfig(new StringReader(outConfig)); + VpnProfile vp2 = cp.convertProfile(); + + String outConfig2 = vp2.getConfigFile(RuntimeEnvironment.application, false); + + Assert.assertEquals(outConfig, outConfig2); + Assert.assertFalse(vp.mUseCustomConfig); + Assert.assertFalse(vp2.mUseCustomConfig); + + } + + @Test + public void testCommonOptionsImport() throws IOException, ConfigParser.ConfigParseError + { + String config = "client\n" + + "tun-mtu 1234\n" + + "\n" + + "remote foo.bar\n" + + "tun-mtu 1222\n"+ + "\n"; + + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(config)); + VpnProfile vp = cp.convertProfile(); + + Assert.assertEquals(1234, vp.mTunMtu); + Assert.assertTrue(vp.mConnections[0].mCustomConfiguration.contains("tun-mtu 1222")); + Assert.assertTrue(vp.mConnections[0].mUseCustomConfig); + } + + @Test + public void testSockProxyImport() throws IOException, ConfigParser.ConfigParseError { + String proxy = + "ca baz\n" + + "key foo\n" + + "cert bar\n" + + "client\n" + + "\n" + + "socks-proxy 13.23.3.2\n" + + "remote foo.bar\n" + + "\n" + + "\n" + + "\n" + + "socks-proxy 1.2.3.4 1234\n" + + "remote foo.bar\n" + + "\n" + + "\n" + + "\n" + + "http-proxy 1.2.3.7 8080\n" + + "remote foo.bar\n" + + ""; + + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(proxy)); + VpnProfile vp = cp.convertProfile(); + Assert.assertEquals(3, vp.mConnections.length); + + Assert.assertEquals("13.23.3.2", vp.mConnections[0].mProxyName); + Assert.assertEquals("1080", vp.mConnections[0].mProxyPort); + Assert.assertEquals(Connection.ProxyType.SOCKS5, vp.mConnections[0].mProxyType); + + Assert.assertEquals("1.2.3.4", vp.mConnections[1].mProxyName); + Assert.assertEquals("1234", vp.mConnections[1].mProxyPort); + Assert.assertEquals(Connection.ProxyType.SOCKS5, vp.mConnections[0].mProxyType); + + Assert.assertEquals("1.2.3.7", vp.mConnections[2].mProxyName); + Assert.assertEquals("8080", vp.mConnections[2].mProxyPort); + Assert.assertEquals(Connection.ProxyType.HTTP, vp.mConnections[2].mProxyType); + + Context c = RuntimeEnvironment.application; + int err = vp.checkProfile(c, false); + Assert.assertTrue("Failed with " + c.getString(err), err == R.string.no_error_found); } + + @Test + public void testHttpUserPassAuth() throws IOException, ConfigParser.ConfigParseError { + String proxy ="client\n" + + "dev tun\n" + + "proto tcp\n" + + "remote 1.2.3.4 443\n" + + "resolv-retry infinite\n" + + "nobind\n" + + "persist-key\n" + + "persist-tun\n" + + "auth-user-pass\n" + + "verb 3\n" + + "cipher AES-128-CBC\n" + + "pull\n" + + "route-delay 2\n" + + "redirect-gateway\n" + + "remote-cert-tls server\n" + + "ns-cert-type server\n" + + "comp-lzo no\n" + + "http-proxy 1.2.3.4 1234\n" + + "\n" + + "username12\n" + + "password34\n" + + "\n" + + "\n" + + "foo\n" + + "\n" + + "\n" + + "bar\n" + + "\n" + + "\n" + + "baz\n" + + "\n"; + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(proxy)); + VpnProfile vp = cp.convertProfile(); + String config = vp.getConfigFile(RuntimeEnvironment.application, true); + Assert.assertTrue(config.contains("username12")); + Assert.assertTrue(config.contains("http-proxy 1.2.3.4")); + + config = vp.getConfigFile(RuntimeEnvironment.application, false); + + Assert.assertFalse(config.contains("username12")); + Assert.assertFalse(config.contains("http-proxy 1.2.3.4")); + + Assert.assertTrue(vp.mConnections[0].mUseProxyAuth); + Assert.assertEquals(vp.mConnections[0].mProxyAuthUser, "username12"); + Assert.assertEquals(vp.mConnections[0].mProxyAuthPassword, "password34"); + } + + @Test + public void testConfigWithHttpProxyOptions() throws IOException, ConfigParser.ConfigParseError { + String proxyconf = "pull\n" + + "dev tun\n" + + "proto tcp-client\n" + + "cipher AES-128-CBC\n" + + "auth SHA1\n" + + "reneg-sec 0\n" + + "remote-cert-tls server\n" + + "tls-version-min 1.2 or-highest\n" + + "persist-tun\n" + + "nobind\n" + + "connect-retry 2 2\n" + + "dhcp-option DNS 1.1.1.1\n" + + "dhcp-option DNS 84.200.69.80\n" + + "auth-user-pass\n" + + "\n" + + "remote xx.xx.xx.xx 1194\n" + + "http-proxy 1.2.3.4 8080\n" + + "http-proxy-option VERSION 1.1\n" + + "http-proxy-option CUSTOM-HEADER \"Connection: Upgrade\"\n" + + "http-proxy-option CUSTOM-HEADER \"X-Forwarded-Proto: https\"\n" + + "http-proxy-option CUSTOM-HEADER \"Upgrade-Insecure-Requests: 1\"\n" + + "http-proxy-option CUSTOM-HEADER \"DNT: 1\"\n" + + "http-proxy-option CUSTOM-HEADER \"Tk: N\"\n" + + "\n" + + fakeCerts; + + ConfigParser cp = new ConfigParser(); + cp.parseConfig(new StringReader(proxyconf)); + VpnProfile vp = cp.convertProfile(); + String config = vp.getConfigFile(RuntimeEnvironment.application, true); + + + Assert.assertEquals(vp.checkProfile(RuntimeEnvironment.application, true), R.string.no_error_found); + Assert.assertEquals(vp.checkProfile(RuntimeEnvironment.application, false), R.string.no_error_found); + + config = vp.getConfigFile(RuntimeEnvironment.application, false); + + Assert.assertTrue(config.contains("http-proxy 1.2.3.4")); + Assert.assertFalse(config.contains("management-query-proxy")); + + + Assert.assertTrue(config.contains("http-proxy-option CUSTOM-HEADER")); + + vp.mConnections = Arrays.copyOf(vp.mConnections, vp.mConnections.length + 1); + vp.mConnections[vp.mConnections.length - 1] = new Connection(); + + vp.mConnections[vp.mConnections.length -1].mProxyType = Connection.ProxyType.ORBOT; + + Assert.assertEquals(vp.checkProfile(RuntimeEnvironment.application, false), R.string.error_orbot_and_proxy_options); + + } + } -- cgit v1.2.3