From 25e77be880a6182c15395480ba37d2ec33be8ff6 Mon Sep 17 00:00:00 2001 From: Sergey Bogdanov Date: Sun, 29 Jul 2012 22:09:14 +0300 Subject: [PATCH 1/3] fixed issues #63: - added more tests for RedisExtension.ToRedisEndPoints - added support for multiple '@' in the host string --- src/ServiceStack.Redis/Properties/AssemblyInfo.cs | 2 ++ src/ServiceStack.Redis/RedisExtensions.cs | 2 +- tests/ServiceStack.Redis.Tests/ServiceStack.Redis.Tests.csproj | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ServiceStack.Redis/Properties/AssemblyInfo.cs b/src/ServiceStack.Redis/Properties/AssemblyInfo.cs index 57f94f67..b6e0ed11 100644 --- a/src/ServiceStack.Redis/Properties/AssemblyInfo.cs +++ b/src/ServiceStack.Redis/Properties/AssemblyInfo.cs @@ -34,3 +34,5 @@ // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("3.9.0.0")] //[assembly: AssemblyFileVersion("1.0.0.0")] + +[assembly: InternalsVisibleTo("ServiceStack.Redis.Tests")] \ No newline at end of file diff --git a/src/ServiceStack.Redis/RedisExtensions.cs b/src/ServiceStack.Redis/RedisExtensions.cs index fb2d45e9..6a580266 100644 --- a/src/ServiceStack.Redis/RedisExtensions.cs +++ b/src/ServiceStack.Redis/RedisExtensions.cs @@ -34,7 +34,7 @@ public static List ToRedisEndPoints(this IEnumerable host string[] hostParts; if (host.Contains("@")) { - hostParts = host.Split('@'); + hostParts = host.SplitOnLast('@'); var password = hostParts[0]; hostParts = hostParts[1].Split(':'); endpoint = GetRedisEndPoint(hostParts); diff --git a/tests/ServiceStack.Redis.Tests/ServiceStack.Redis.Tests.csproj b/tests/ServiceStack.Redis.Tests/ServiceStack.Redis.Tests.csproj index b7b6718a..f720f80c 100644 --- a/tests/ServiceStack.Redis.Tests/ServiceStack.Redis.Tests.csproj +++ b/tests/ServiceStack.Redis.Tests/ServiceStack.Redis.Tests.csproj @@ -171,6 +171,7 @@ + From a6b89d0db8de693c2477fadcdc882d1a4494b1c3 Mon Sep 17 00:00:00 2001 From: Sergey Bogdanov Date: Mon, 30 Jul 2012 16:18:13 +0300 Subject: [PATCH 2/3] fixed #24 - added reproducing issue - fixed the code to use invariant culture --- src/ServiceStack.Redis/RedisClient_SortedSet.cs | 3 ++- .../RedisClientSortedSetTests.cs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/ServiceStack.Redis/RedisClient_SortedSet.cs b/src/ServiceStack.Redis/RedisClient_SortedSet.cs index f5b762ed..31f02654 100644 --- a/src/ServiceStack.Redis/RedisClient_SortedSet.cs +++ b/src/ServiceStack.Redis/RedisClient_SortedSet.cs @@ -12,6 +12,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using ServiceStack.DesignPatterns.Model; using ServiceStack.Redis.Support; @@ -218,7 +219,7 @@ public List GetRangeFromSortedSetDesc(string setId, int fromRank, int to { var key = multiDataList[i].FromUtf8Bytes(); double value; - double.TryParse(multiDataList[i + 1].FromUtf8Bytes(), out value); + double.TryParse(multiDataList[i + 1].FromUtf8Bytes(), NumberStyles.Any, CultureInfo.InvariantCulture, out value); map[key] = value; } diff --git a/tests/ServiceStack.Redis.Tests/RedisClientSortedSetTests.cs b/tests/ServiceStack.Redis.Tests/RedisClientSortedSetTests.cs index 3b75fb63..c2bb0f6b 100644 --- a/tests/ServiceStack.Redis.Tests/RedisClientSortedSetTests.cs +++ b/tests/ServiceStack.Redis.Tests/RedisClientSortedSetTests.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; +using System.Threading; using NUnit.Framework; using ServiceStack.Common.Extensions; using ServiceStack.Text; @@ -233,6 +235,18 @@ public void Can_IncrementItemInSortedSet() Console.WriteLine(map.Dump()); } + [Test] + public void Can_WorkInSortedSetUnderDifferentCulture() + { + Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU"); + Redis.AddItemToSortedSet(SetId, "key", 123.22); + + var map = Redis.GetAllWithScoresFromSortedSet(SetId); + + Assert.AreEqual(123.22, map["key"]); + } + + [Ignore("Not implemented yet")] [Test] public void Can_GetRangeFromSortedSetByHighestScore_from_sorted_set() From 36e0cd24dc7d610319fa064131087489d80e1f38 Mon Sep 17 00:00:00 2001 From: Sergey Bogdanov Date: Wed, 1 Aug 2012 10:00:11 +0300 Subject: [PATCH 3/3] - added missing file --- .../RedisExtensionTests.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/ServiceStack.Redis.Tests/RedisExtensionTests.cs diff --git a/tests/ServiceStack.Redis.Tests/RedisExtensionTests.cs b/tests/ServiceStack.Redis.Tests/RedisExtensionTests.cs new file mode 100644 index 00000000..11d88924 --- /dev/null +++ b/tests/ServiceStack.Redis.Tests/RedisExtensionTests.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; + +namespace ServiceStack.Redis.Tests +{ + [TestFixture] + public class RedisExtensionTests + { + [Test] + public void Can_Parse_Host() + { + var hosts = new[] {"pass@host.com:6123"}; + var endPoints = hosts.ToRedisEndPoints(); + + Assert.AreEqual(1, endPoints.Count); + var ep = endPoints[0]; + + Assert.AreEqual("host.com", ep.Host); + Assert.AreEqual(6123, ep.Port); + Assert.AreEqual("pass", ep.Password); + } + + [Test] + public void Host_May_Contain_AtChar() + { + var hosts = new[] {"@pa1@ss@localhost:6123"}; + var endPoints = hosts.ToRedisEndPoints(); + + Assert.AreEqual(1, endPoints.Count); + var ep = endPoints[0]; + + Assert.AreEqual("@pa1@ss", ep.Password); + Assert.AreEqual("localhost", ep.Host); + Assert.AreEqual(6123, ep.Port); + } + } +}