diff --git a/shadowsocks-windows.sln b/shadowsocks-windows.sln index 4e8f72ff..1c24be82 100644 --- a/shadowsocks-windows.sln +++ b/shadowsocks-windows.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 15.0.26228.10 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "shadowsocks-csharp", "shadowsocks-csharp\shadowsocks-csharp.csproj", "{8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "test", "test\test.csproj", "{45913187-0685-4903-B250-DCEF0479CD86}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShadowsocksTest", "test\ShadowsocksTest.csproj", "{45913187-0685-4903-B250-DCEF0479CD86}" ProjectSection(ProjectDependencies) = postProject {8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062} = {8C02D2F7-7CDB-4D55-9F25-CD03EF4AA062} EndProjectSection diff --git a/test/test.csproj b/test/ShadowsocksTest.csproj old mode 100755 new mode 100644 similarity index 100% rename from test/test.csproj rename to test/ShadowsocksTest.csproj diff --git a/test/Sip003PluginTest.cs b/test/Sip003PluginTest.cs index 49b1c0a3..8f377ba4 100644 --- a/test/Sip003PluginTest.cs +++ b/test/Sip003PluginTest.cs @@ -12,10 +12,12 @@ namespace Shadowsocks.Test [TestClass] public class Sip003PluginTest { + string fake_plugin = "ftp"; + [TestMethod] - public void Sip003PluginSupport() + public void TestSip003Plugin_NoPlugin() { - string fake_plugin = "ftp"; + var NoPlugin = Sip003Plugin.CreateIfConfigured(new Server { @@ -32,7 +34,11 @@ namespace Shadowsocks.Test "", "192.168.100.1", 8888); + } + [TestMethod] + public void TestSip003Plugin_Plugin() + { var Plugin = Sip003Plugin.CreateIfConfigured(new Server { server = "192.168.100.1", @@ -48,7 +54,11 @@ namespace Shadowsocks.Test "", "192.168.100.1", 8888); + } + [TestMethod] + public void TestSip003Plugin_PluginWithOpts() + { var PluginWithOpts = Sip003Plugin.CreateIfConfigured(new Server { server = "192.168.100.1", @@ -65,7 +75,11 @@ namespace Shadowsocks.Test "", "192.168.100.1", 8888); + } + [TestMethod] + public void TestSip003Plugin_PluginWithArgs() + { var PluginWithArgs = Sip003Plugin.CreateIfConfigured(new Server { server = "192.168.100.1", @@ -82,7 +96,11 @@ namespace Shadowsocks.Test "_test", "192.168.100.1", 8888); + } + [TestMethod] + public void TestSip003Plugin_PluginWithOptsAndArgs() + { var PluginWithOptsAndArgs = Sip003Plugin.CreateIfConfigured(new Server { server = "192.168.100.1", @@ -100,7 +118,11 @@ namespace Shadowsocks.Test "_test", "192.168.100.1", 8888); + } + [TestMethod] + public void TestSip003Plugin_PluginWithArgsReplaced() + { var PluginWithArgsReplaced = Sip003Plugin.CreateIfConfigured(new Server { server = "192.168.100.1", @@ -117,7 +139,11 @@ namespace Shadowsocks.Test "_test,192.168.100.1", "192.168.100.1", 8888); + } + [TestMethod] + public void TestSip003Plugin_PluginWithOptsAndArgsReplaced() + { var PluginWithOptsAndArgsReplaced = Sip003Plugin.CreateIfConfigured(new Server { server = "192.168.100.1", diff --git a/test/UrlTest.cs b/test/UrlTest.cs index 01696760..1080bf93 100644 --- a/test/UrlTest.cs +++ b/test/UrlTest.cs @@ -11,38 +11,46 @@ namespace Shadowsocks.Test [TestClass] public class UrlTest { - [TestMethod] - public void ParseAndGenerateShadowsocksUrl() + Server server1, server1WithRemark, server1WithPlugin, server1WithPluginAndRemark; + string server1CanonUrl, server1WithRemarkCanonUrl, server1WithPluginCanonUrl, server1WithPluginAndRemarkCanonUrl; + + Server server2, server2WithRemark, server2WithPlugin, server2WithPluginAndRemark; + string server2CanonUrl, server2WithRemarkCanonUrl, server2WithPluginCanonUrl, server2WithPluginAndRemarkCanonUrl; + + + [TestInitialize] + public void PrepareTestData() { - var server = new Server + server1 = new Server { server = "192.168.100.1", server_port = 8888, password = "test", method = "bf-cfb" }; - var serverCanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4"; + server1CanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4"; - var server2 = new Server + // server2 has base64 padding + server2 = new Server { server = "192.168.1.1", server_port = 8388, password = "test", method = "bf-cfb" }; - var server2CanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA=="; + server2CanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA=="; - var serverWithRemark = new Server + server1WithRemark = new Server { - server = server.server, - server_port = server.server_port, - password = server.password, - method = server.method, + server = server1.server, + server_port = server1.server_port, + password = server1.password, + method = server1.method, remarks = "example-server" }; - var serverWithRemarkCanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4#example-server"; + server1WithRemarkCanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4#example-server"; - var server2WithRemark = new Server + server2WithRemark = new Server { server = server2.server, server_port = server2.server_port, @@ -50,21 +58,22 @@ namespace Shadowsocks.Test method = server2.method, remarks = "example-server" }; - var server2WithRemarkCanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA==#example-server"; - var serverWithPlugin = new Server + server2WithRemarkCanonUrl = "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA==#example-server"; + + server1WithPlugin = new Server { - server = server.server, - server_port = server.server_port, - password = server.password, - method = server.method, + server = server1.server, + server_port = server1.server_port, + password = server1.password, + method = server1.method, plugin = "obfs-local", plugin_opts = "obfs=http;obfs-host=google.com" }; - var serverWithPluginCanonUrl = + server1WithPluginCanonUrl = "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/?plugin=obfs-local%3bobfs%3dhttp%3bobfs-host%3dgoogle.com"; - var server2WithPlugin = new Server + server2WithPlugin = new Server { server = server2.server, server_port = server2.server_port, @@ -73,23 +82,23 @@ namespace Shadowsocks.Test plugin = "obfs-local", plugin_opts = "obfs=http;obfs-host=google.com" }; - var server2WithPluginCanonUrl = + server2WithPluginCanonUrl = "ss://YmYtY2ZiOnRlc3Q@192.168.1.1:8388/?plugin=obfs-local%3bobfs%3dhttp%3bobfs-host%3dgoogle.com"; - var serverWithPluginAndRemark = new Server + server1WithPluginAndRemark = new Server { - server = server.server, - server_port = server.server_port, - password = server.password, - method = server.method, - plugin = serverWithPlugin.plugin, - plugin_opts = serverWithPlugin.plugin_opts, - remarks = serverWithRemark.remarks + server = server1.server, + server_port = server1.server_port, + password = server1.password, + method = server1.method, + plugin = server1WithPlugin.plugin, + plugin_opts = server1WithPlugin.plugin_opts, + remarks = server1WithRemark.remarks }; - var serverWithPluginAndRemarkCanonUrl = + server1WithPluginAndRemarkCanonUrl = "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/?plugin=obfs-local%3bobfs%3dhttp%3bobfs-host%3dgoogle.com#example-server"; - var server2WithPluginAndRemark = new Server + server2WithPluginAndRemark = new Server { server = server2.server, server_port = server2.server_port, @@ -99,62 +108,71 @@ namespace Shadowsocks.Test plugin_opts = server2WithPlugin.plugin_opts, remarks = server2WithRemark.remarks }; - var server2WithPluginAndRemarkCanonUrl = + server2WithPluginAndRemarkCanonUrl = "ss://YmYtY2ZiOnRlc3Q@192.168.1.1:8388/?plugin=obfs-local%3bobfs%3dhttp%3bobfs-host%3dgoogle.com#example-server"; + } - + [TestMethod] + public void TestParseUrl_Server1() + { RunParseShadowsocksUrlTest( string.Join( "\r\n", - serverCanonUrl, + server1CanonUrl, "\r\n", "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4/", - serverWithRemarkCanonUrl, + server1WithRemarkCanonUrl, "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xMDAuMTo4ODg4/#example-server"), new[] { - server, - server, - serverWithRemark, - serverWithRemark + server1, + server1, + server1WithRemark, + server1WithRemark }); RunParseShadowsocksUrlTest( string.Join( "\r\n", - server2CanonUrl, + "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888", "\r\n", - "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA==/", - server2WithRemarkCanonUrl, - "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA==/#example-server"), + "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/", + "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888#example-server", + "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/#example-server", + server1WithPluginCanonUrl, + server1WithPluginAndRemarkCanonUrl, + "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/?plugin=obfs-local%3bobfs%3dhttp%3bobfs-host%3dgoogle.com&unsupported=1#example-server"), new[] { - server2, - server2, - server2WithRemark, - server2WithRemark + server1, + server1, + server1WithRemark, + server1WithRemark, + server1WithPlugin, + server1WithPluginAndRemark, + server1WithPluginAndRemark }); + } + + + [TestMethod] + public void TestParseUrl_Server2() + { RunParseShadowsocksUrlTest( string.Join( "\r\n", - "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888", + server2CanonUrl, "\r\n", - "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/", - "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888#example-server", - "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/#example-server", - serverWithPluginCanonUrl, - serverWithPluginAndRemarkCanonUrl, - "ss://YmYtY2ZiOnRlc3Q@192.168.100.1:8888/?plugin=obfs-local%3bobfs%3dhttp%3bobfs-host%3dgoogle.com&unsupported=1#example-server"), + "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA==/", + server2WithRemarkCanonUrl, + "ss://YmYtY2ZiOnRlc3RAMTkyLjE2OC4xLjE6ODM4OA==/#example-server"), new[] { - server, - server, - serverWithRemark, - serverWithRemark, - serverWithPlugin, - serverWithPluginAndRemark, - serverWithPluginAndRemark + server2, + server2, + server2WithRemark, + server2WithRemark }); RunParseShadowsocksUrlTest( @@ -178,13 +196,18 @@ namespace Shadowsocks.Test server2WithPluginAndRemark, server2WithPluginAndRemark }); + } + + [TestMethod] + public void TestUrlGenerate() + { var generateUrlCases = new Dictionary { - [serverCanonUrl] = server, - [serverWithRemarkCanonUrl] = serverWithRemark, - [serverWithPluginCanonUrl] = serverWithPlugin, - [serverWithPluginAndRemarkCanonUrl] = serverWithPluginAndRemark + [server1CanonUrl] = server1, + [server1WithRemarkCanonUrl] = server1WithRemark, + [server1WithPluginCanonUrl] = server1WithPlugin, + [server1WithPluginAndRemarkCanonUrl] = server1WithPluginAndRemark }; RunGenerateShadowsocksUrlTest(generateUrlCases); }