diff --git a/CHANGELOG b/CHANGELOG index 204e8871..9dedb500 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,5 +1,8 @@ = LitleOnline CHANGELOG +== Version 8.31.5 (Oct 22, 2019) +* BugFix: Fixed custom timeout not being used + == Version 8.31.4 (Dec 14, 2018) * the default value of processingType is replaced from accountFunding to undefined. diff --git a/LitleSdkForNet/LitleSdkForNet/Communications.cs b/LitleSdkForNet/LitleSdkForNet/Communications.cs index ab5db97e..61d795c4 100644 --- a/LitleSdkForNet/LitleSdkForNet/Communications.cs +++ b/LitleSdkForNet/LitleSdkForNet/Communications.cs @@ -105,6 +105,19 @@ public virtual string HttpPost(string xmlRequest, Dictionary<string, string> con req.ServicePoint.MaxIdleTime = 8000; req.ServicePoint.Expect100Continue = false; req.KeepAlive = false; + + if (config.ContainsKey("timeout")) { + try { + req.Timeout = Convert.ToInt32(config["timeout"]); + } + catch (FormatException e) { + // If timeout setting contains non-numeric + // characters, we will fall back to 1 minute + // default timeout. + req.Timeout = 60000; + } + } + if (IsProxyOn(config)) { var myproxy = new WebProxy(config["proxyHost"], int.Parse(config["proxyPort"])) diff --git a/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs b/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs index 2fe16f74..50c81534 100644 --- a/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs +++ b/LitleSdkForNet/LitleSdkForNet/LitleBatchRequest.cs @@ -817,7 +817,7 @@ public string generateXmlHeader() { xmlHeader += "numBalanceInquirys=\"" + numBalanceInquiries + "\"\r\n"; } - xmlHeader += "merchantSdk=\"DotNet;8.31.4\"\r\n"; + xmlHeader += "merchantSdk=\"DotNet;8.31.5\"\r\n"; xmlHeader += "merchantId=\"" + config["merchantId"] + "\">\r\n"; return xmlHeader; diff --git a/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs b/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs index 32280d41..1aca2590 100644 --- a/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs +++ b/LitleSdkForNet/LitleSdkForNet/LitleOnline.cs @@ -379,7 +379,7 @@ private litleOnlineRequest createLitleOnlineRequest() { litleOnlineRequest request = new litleOnlineRequest(); request.merchantId = config["merchantId"]; - request.merchantSdk = "DotNet;8.31.4"; + request.merchantSdk = "DotNet;8.31.5"; authentication authentication = new authentication(); authentication.password = config["password"]; authentication.user = config["username"]; diff --git a/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs b/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs index 28a0b55b..8735d2ec 100644 --- a/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs +++ b/LitleSdkForNet/LitleSdkForNet/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("8.31.4")] -[assembly: AssemblyFileVersion("8.31.4")] +[assembly: AssemblyVersion("8.31.5")] +[assembly: AssemblyFileVersion("8.31.5")] diff --git a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs index 51794260..a8bd243f 100644 --- a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs +++ b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.Designer.cs @@ -49,7 +49,7 @@ public string printxml { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("500")] + [global::System.Configuration.DefaultSettingValueAttribute("5000")] public string timeout { get { return ((string)(this["timeout"])); diff --git a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings index 0ca5d3a9..3d801945 100644 --- a/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings +++ b/LitleSdkForNet/LitleSdkForNet/Properties/Settings.settings @@ -18,7 +18,7 @@ <Value Profile="(Default)">true</Value> </Setting> <Setting Name="timeout" Type="System.String" Scope="User"> - <Value Profile="(Default)">500</Value> + <Value Profile="(Default)">5000</Value> </Setting> <Setting Name="proxyHost" Type="System.String" Scope="User"> <Value Profile="(Default)" /> diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs index 7aca1728..b44bcb6d 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs +++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert1Base.cs @@ -20,7 +20,7 @@ public void SetUp() { "reportGroup", "Default Report Group" }, { "username", Properties.Settings.Default.username }, { "version", "8.31" }, - { "timeout", "500" }, + { "timeout", "20000" }, { "merchantId", Properties.Settings.Default.merchantId }, { "password", Properties.Settings.Default.password }, { "printxml", "true" }, diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs index 124bbd2c..9dbc610f 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs +++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert2AuthEnhanced.cs @@ -20,7 +20,7 @@ public void setUp() config.Add("reportGroup", "Default Report Group"); config.Add("username", Properties.Settings.Default.username); config.Add("version", "8.31"); - config.Add("timeout", "500"); + config.Add("timeout", "20000"); config.Add("merchantId", Properties.Settings.Default.merchantId); config.Add("password", Properties.Settings.Default.password); config.Add("printxml", "true"); diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs index 084fe107..ac60f598 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs +++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert3AuthReversal.cs @@ -19,7 +19,7 @@ public void setUp() config.Add("reportGroup", "Default Report Group"); config.Add("username", Properties.Settings.Default.username); config.Add("version", "8.31"); - config.Add("timeout", "500"); + config.Add("timeout", "20000"); config.Add("merchantId", Properties.Settings.Default.merchantId); config.Add("password", Properties.Settings.Default.password); config.Add("printxml", "true"); diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs index b0bcab48..141f0812 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs +++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert4Echeck.cs @@ -19,7 +19,7 @@ public void setUp() config.Add("reportGroup", "Default Report Group"); config.Add("username", Properties.Settings.Default.username); config.Add("version", "8.31"); - config.Add("timeout", "500"); + config.Add("timeout", "20000"); config.Add("merchantId", Properties.Settings.Default.merchantId); config.Add("password", Properties.Settings.Default.password); config.Add("printxml", "true"); diff --git a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs index da759d29..b5ee53f8 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs +++ b/LitleSdkForNet/LitleSdkForNetTest/Certification/TestCert5Token.cs @@ -19,7 +19,7 @@ public void setUp() config.Add("reportGroup", "Default Report Group"); config.Add("username", Properties.Settings.Default.username); config.Add("version", "8.31"); - config.Add("timeout", "500"); + config.Add("timeout", "20000"); config.Add("merchantId", Properties.Settings.Default.merchantId); config.Add("password", Properties.Settings.Default.password); config.Add("printxml", "true"); diff --git a/LitleSdkForNet/LitleSdkForNetTest/Functional/TestTimeout.cs b/LitleSdkForNet/LitleSdkForNetTest/Functional/TestTimeout.cs new file mode 100644 index 00000000..a06c4456 --- /dev/null +++ b/LitleSdkForNet/LitleSdkForNetTest/Functional/TestTimeout.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using System.Net; +using NUnit.Framework; + +namespace Litle.Sdk.Test.Functional { + [TestFixture] + internal class TestTimeout + { + private LitleOnline _cnp; + private Dictionary<string, string> _config; + + [Test] + public void TestTimeoutNotDefined() + { + _config = new Dictionary<string, string> + { + {"url", Properties.Settings.Default.url}, + {"reportGroup", "Default Report Group"}, + {"username", "DOTNET"}, + {"version", "11.0"}, + {"merchantId", "101"}, + {"password", "TESTCASE"}, + {"printxml", "true"}, + {"proxyHost", Properties.Settings.Default.proxyHost}, + {"proxyPort", Properties.Settings.Default.proxyPort}, + {"logFile", Properties.Settings.Default.logFile}, + {"neuterAccountNums", "true"} + }; + + _cnp = new LitleOnline(_config); + + var registerTokenRequest = new registerTokenRequestType + { + id = "1", + reportGroup = "Planets", + orderId = "12344", + accountNumber = "1233456789103801", + }; + + var rtokenResponse = _cnp.RegisterToken(registerTokenRequest); + StringAssert.AreEqualIgnoringCase("Account number was successfully registered", rtokenResponse.message); + } + + [Test] + public void TestTimeoutNotParsable() + { + _config = new Dictionary<string, string> + { + {"url", Properties.Settings.Default.url}, + {"reportGroup", "Default Report Group"}, + {"username", "DOTNET"}, + {"version", "11.0"}, + {"timeout", "notparsableasint"}, + {"merchantId", "101"}, + {"password", "TESTCASE"}, + {"printxml", "true"}, + {"proxyHost", Properties.Settings.Default.proxyHost}, + {"proxyPort", Properties.Settings.Default.proxyPort}, + {"logFile", Properties.Settings.Default.logFile}, + {"neuterAccountNums", "true"} + }; + + _cnp = new LitleOnline(_config); + + var registerTokenRequest = new registerTokenRequestType + { + id = "1", + reportGroup = "Planets", + orderId = "12344", + accountNumber = "1233456789103801", + }; + + var rtokenResponse = _cnp.RegisterToken(registerTokenRequest); + StringAssert.AreEqualIgnoringCase("Account number was successfully registered", rtokenResponse.message); + } + + [Test] + public void TestTimeoutReached() { + _config = new Dictionary<string, string> { + {"url", Properties.Settings.Default.url}, + {"reportGroup", "Default Report Group"}, + {"username", "DOTNET"}, + {"version", "11.0"}, + {"timeout", "0"}, + {"merchantId", "101"}, + {"password", "TESTCASE"}, + {"printxml", "true"}, + {"proxyHost", Properties.Settings.Default.proxyHost}, + {"proxyPort", Properties.Settings.Default.proxyPort}, + {"logFile", Properties.Settings.Default.logFile}, + {"neuterAccountNums", "true"} + }; + + _cnp = new LitleOnline(_config); + + var registerTokenRequest = new registerTokenRequestType { + id = "1", + reportGroup = "Planets", + orderId = "12344", + accountNumber = "1233456789103801", + }; + + Assert.Throws<WebException>(() => { _cnp.RegisterToken(registerTokenRequest); }); + } + } +} \ No newline at end of file diff --git a/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj b/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj index 2a4b3f4d..cd55f3b1 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj +++ b/LitleSdkForNet/LitleSdkForNetTest/LitleSdkForNetTest.csproj @@ -100,6 +100,7 @@ <Compile Include="Functional\TestForceCapture.cs" /> <Compile Include="Functional\TestEcheckRedeposit.cs" /> <Compile Include="Functional\TestSale.cs" /> + <Compile Include="Functional\TestTimeout.cs" /> <Compile Include="Functional\TestToken.cs" /> <Compile Include="Functional\TestAuth.cs" /> <Compile Include="Program.cs" /> diff --git a/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs b/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs index e15f8264..c95c422d 100644 --- a/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs +++ b/LitleSdkForNet/LitleSdkForNetTest/Unit/TestBatchRequest.cs @@ -55,7 +55,7 @@ public void testBatchRequestContainsMerchantSdkAttribute() String actual = batchRequest.generateXmlHeader(); String expected = @" <batchRequest id="""" -merchantSdk=""DotNet;8.31.4"" +merchantSdk=""DotNet;8.31.5"" merchantId=""01234""> "; Assert.AreEqual(expected, actual);