Skip to content

Commit 3eb2334

Browse files
rickardprusscam
authored andcommitted
Serialize Distance and Percentiles aggregate using an invariant locale (#4042)
* Serialize Distance to JSON using invariant culture * Use invariant culture for double.Parse in PercentileItem * Added test case and fix for similar issue Closes #4044 Closes #4041 (cherry picked from commit 5839da0) (cherry picked from commit 9fe3e47)
1 parent 386e117 commit 3eb2334

File tree

5 files changed

+58
-2
lines changed

5 files changed

+58
-2
lines changed

src/Nest/Aggregations/AggregateFormatter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics.CodeAnalysis;
4+
using System.Globalization;
45
using System.Linq;
56
using System.Reflection;
67
using Elasticsearch.Net;
@@ -328,7 +329,7 @@ private IAggregate GetPercentilesAggregate(ref JsonReader reader, IReadOnlyDicti
328329

329330
metric.Items.Add(new PercentileItem
330331
{
331-
Percentile = double.Parse(propertyName),
332+
Percentile = double.Parse(propertyName, CultureInfo.InvariantCulture),
332333
Value = reader.ReadNullableDouble()
333334
});
334335
}

src/Nest/CommonOptions/Geo/Distance.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ public Distance(string distanceUnit)
6666

6767
public static implicit operator Distance(string distanceUnit) => new Distance(distanceUnit);
6868

69-
public override string ToString() => $"{Precision}{Unit.GetStringValue()}";
69+
public override string ToString() => Precision.ToString(CultureInfo.InvariantCulture) + Unit.GetStringValue();
7070
}
7171
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Elastic.Xunit.XunitPlumbing;
5+
using Nest;
6+
using static Tests.Core.Serialization.SerializationTestHelper;
7+
8+
namespace Tests.Reproduce
9+
{
10+
public class GithubIssue4041
11+
{
12+
[U]
13+
[UseCulture("sv-SE")]
14+
public void DistanceSerializesWithInvariantCulture()
15+
{
16+
const string distanceString = "2.5m";
17+
Distance distance = distanceString;
18+
19+
Expect(distanceString)
20+
.WhenSerializing(distance);
21+
}
22+
}
23+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using Elastic.Xunit.XunitPlumbing;
5+
using FluentAssertions;
6+
using Nest;
7+
using static Tests.Core.Serialization.SerializationTestHelper;
8+
9+
namespace Tests.Reproduce
10+
{
11+
public class GithubIssue4044
12+
{
13+
[U]
14+
[UseCulture("sv-SE")]
15+
public void PercentilesAggregateSerializesWithInvariantCulture()
16+
{
17+
const string percentilesString = @"{
18+
""test_percentiles#pp"": {
19+
""values"": {
20+
""42.42"": 42.42
21+
}
22+
}
23+
}";
24+
25+
Expect(percentilesString).NoRoundTrip().DeserializesTo<AggregateDictionary>((s, val) =>
26+
{
27+
val.Count.Should().Be(1);
28+
});
29+
}
30+
}
31+
}

src/Tests/Tests/Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<PackageReference Include="System.Diagnostics.FileVersionInfo" Version="4.3.0" />
2424
<PackageReference Include="SemanticVersioning" Version="0.8.0" />
2525
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
26+
<PackageReference Include="xunit.core" Version="2.3.1" />
2627
<PackageReference Include="xunit.extensibility.execution" Version="2.3.1" />
2728
<PackageReference Include="Ben.Demystifier" Version="0.1.4" />
2829
</ItemGroup>

0 commit comments

Comments
 (0)