Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sync fixes to release/3xx #124

Merged
merged 14 commits into from
Oct 7, 2018
5 changes: 5 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ env:
branches:
only:
- master
- release/3xx

addons:
apt:
Expand All @@ -23,5 +24,9 @@ addons:
- libssl-dev
- libunwind8

install:
- git clone https://github.com/etsy/statsd.git
- node ./statsd/stats.js ./src/JustEat.StatsD.Tests/statsdconfig.js &

script:
- ./build.sh
4 changes: 3 additions & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
os: Visual Studio 2017
version: 3.2.1.{build}
version: 3.2.2.{build}
configuration: Release
environment:
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
NUGET_XMLDOC_MODE: skip
install:
- git clone https://github.com/etsy/statsd.git ..\statsd
- ps: Start-Process "node" -ArgumentList "..\statsd\stats.js .\src\JustEat.StatsD.Tests\statsdconfig.js" -WindowStyle Hidden
- ps: .\SetAppVeyorBuildVersion.ps1
build_script:
- ps: .\Build.ps1
Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"sdk": {
"version": "2.1.402"
"version": "2.1.403"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using System.Net;
using System.Net.Sockets;
using Shouldly;
using Xunit;

namespace JustEat.StatsD.EndpointLookups
{
public static class DnsLookupIpEndpointSourceTests
{
[Fact]
public static void GetEndpointPrefersIPV4WhenHostnameIsLocalhost()
{
// Arrange
var target = new DnsLookupIpEndpointSource("localhost", 8125);

// Act
IPEndPoint actual = target.GetEndpoint();

// Assert
actual.ShouldNotBeNull();
actual.AddressFamily.ShouldBe(AddressFamily.InterNetwork);
actual.Address.ShouldBe(IPAddress.Parse("127.0.0.1"));
actual.Port.ShouldBe(8125);
}
}
}
106 changes: 106 additions & 0 deletions src/JustEat.StatsD.Tests/IntegrationTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
using System;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Shouldly;
using Xunit;

namespace JustEat.StatsD
{
public static class IntegrationTests
{
[SkippableFact]
public static async Task Can_Send_Metrics_To_StatsD()
{
Skip.If(Environment.GetEnvironmentVariable("CI") == null, "By default, this test is only run during continuous integration.");

// Arrange
var config = new StatsDConfiguration
{
Host = "localhost",
Prefix = Guid.NewGuid().ToString().Replace("-", string.Empty)
};

var publisher = new StatsDPublisher(config);

// Act - Create a counter
publisher.Increment("apple");

// Act - Create and change a counter
publisher.Increment("bear"); // 1
publisher.Increment(10, "bear"); // 11
publisher.Increment(10, 0, "bear"); // 11
publisher.Decrement("bear"); // 10
publisher.Decrement(5, "bear"); // 5
publisher.Decrement(5, 0, "bear"); // 5

// Act - Mark an event (which is a counter)
publisher.MarkEvent("fish");

// Act - Create a gauge
publisher.Gauge(3.141, "circle");

// Act - Create and change a gauge
publisher.Gauge(10, "dog");
publisher.Gauge(42, "dog");

// Act - Create a timer
publisher.Timing(123, "elephant");
publisher.Timing(TimeSpan.FromSeconds(2), "fox");
publisher.Timing(456, 1, "goose");
publisher.Timing(TimeSpan.FromSeconds(3.5), 1, "hen");

// Act - Increment multiple counters
publisher.Increment(7, 1, "green", "red"); // 7
publisher.Increment(2, 0, "green", "red"); // 7
publisher.Decrement(1, 0, "red", "green"); // 7
publisher.Decrement(4, 1, "red", "green"); // 3

// Assert
var result = await SendCommandAsync("counters");
result.Value<int>(config.Prefix + ".apple").ShouldBe(1);
result.Value<int>(config.Prefix + ".bear").ShouldBe(5);
result.Value<int>(config.Prefix + ".fish").ShouldBe(1);
result.Value<int>(config.Prefix + ".green").ShouldBe(3);
result.Value<int>(config.Prefix + ".red").ShouldBe(3);

result = await SendCommandAsync("gauges");
result.Value<double>(config.Prefix + ".circle").ShouldBe(3.141);
result.Value<int>(config.Prefix + ".dog").ShouldBe(42);

result = await SendCommandAsync("timers");
result[config.Prefix + ".elephant"].Values<int>().ShouldBe(new[] { 123 });
result[config.Prefix + ".fox"].Values<int>().ShouldBe(new[] { 2000 });
result[config.Prefix + ".goose"].Values<int>().ShouldBe(new[] { 456 });
result[config.Prefix + ".hen"].Values<int>().ShouldBe(new[] { 3500 });
}

private static async Task<JObject> SendCommandAsync(string command)
{
string json;

using (var client = new TcpClient())
{
client.Connect("localhost", 8126);

byte[] input = Encoding.UTF8.GetBytes(command);
byte[] output = new byte[client.ReceiveBufferSize];

int bytesRead;

using (var stream = client.GetStream())
{
await stream.WriteAsync(input);
bytesRead = await stream.ReadAsync(output);
}

output = output.AsSpan(0, bytesRead).ToArray();

json = Encoding.UTF8.GetString(output).Replace("END", string.Empty);
}

return JObject.Parse(json);
}
}
}
1 change: 1 addition & 0 deletions src/JustEat.StatsD.Tests/JustEat.StatsD.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
<PackageReference Include="Shouldly" Version="3.0.1" />
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
<PackageReference Include="Xunit.SkippableFact" Version="1.3.12" />
</ItemGroup>
<ItemGroup>
<Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
Expand Down
5 changes: 5 additions & 0 deletions src/JustEat.StatsD.Tests/statsdconfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
graphiteHost: "",
port: 8125,
backends: []
}
21 changes: 18 additions & 3 deletions src/JustEat.StatsD/EndpointLookups/DnsLookupIpEndpointSource.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System;
using System;
using System.Linq;
using System.Net;
using System.Net.Sockets;

namespace JustEat.StatsD.EndpointLookups
{
Expand Down Expand Up @@ -31,7 +33,20 @@ private static IPAddress GetIpAddressOfHost(string hostName)
{
throw new Exception($"DNS did not find any addresses for statsd host '${hostName}'");
}
return endpoints[0];

IPAddress result = null;

if (endpoints.Length > 1)
{
result = endpoints.FirstOrDefault(p => p.AddressFamily == AddressFamily.InterNetwork);
}

if (result == null)
{
result = endpoints[0];
}

return result;
}
}
}
}
2 changes: 1 addition & 1 deletion version.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
<VersionPrefix>3.2.1</VersionPrefix>
<VersionPrefix>3.2.2</VersionPrefix>
<VersionSuffix></VersionSuffix>

<BuildNumber Condition=" '$(BuildNumber)' == '' ">$(APPVEYOR_BUILD_NUMBER)</BuildNumber>
Expand Down