Skip to content

Commit

Permalink
Improved Tests (Azure#7)
Browse files Browse the repository at this point in the history
* Moved telemetry to a policy

* Improved Tests
  • Loading branch information
KrzysztofCwalina authored Nov 29, 2018
1 parent fbed8bb commit 112a80f
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 50 deletions.
78 changes: 28 additions & 50 deletions Azure.Configuration.Test/ConfigurationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using static System.Buffers.Text.Encodings;
using Azure.Configuration.Test;

namespace Azure.Configuration.Tests
{
Expand Down Expand Up @@ -66,68 +65,47 @@ public async Task GetKeyValue()
}
}

abstract class MockHttpClientTransport: HttpClientTransport
class SetKeyValueMockTransport : MockHttpClientTransport
{
protected static void VerifyUserAgentHeader(HttpRequestMessage request)
public KeyValue KeyValue;

public SetKeyValueMockTransport()
{
var expected = Utf8.ToString(Header.Common.CreateUserAgent("Azure-Configuration", "1.0.0").Value);
_expectedMethod = HttpMethod.Put;
_expectedUri = "https://contoso.azconfig.io/kv/test?label=test";
_expectedContent = "{\"key\":\"test_now\",\"content_type\":\"text\"}";
_responseCode = HttpStatusCode.OK;
}

Assert.True(request.Headers.Contains("User-Agent"));
var userAgentValues = request.Headers.GetValues("User-Agent");
protected override void WriteResponseCore(HttpResponseMessage response)
{
string json = JsonConvert.SerializeObject(KeyValue).ToLowerInvariant();
response.Content = new StringContent(json, Encoding.UTF8, "application/json");

foreach(var value in userAgentValues)
{
if (expected.StartsWith(value)) return;
}
Assert.Fail("could not find User-Agent header value " + expected);
long jsonByteCount = Encoding.UTF8.GetByteCount(json);
response.Content.Headers.Add("Content-Length", jsonByteCount.ToString());
}
}

class SetKeyValueMockTransport : MockHttpClientTransport
class GetKeyValueMockTransport : MockHttpClientTransport
{
public KeyValue KeyValue;

protected override Task<HttpResponseMessage> ProcessCoreAsync(CancellationToken cancellation, HttpRequestMessage request)
public GetKeyValueMockTransport()
{
Assert.AreEqual(HttpMethod.Put, request.Method);
VerifyUserAgentHeader(request);

HttpResponseMessage response = new HttpResponseMessage();
if (request.RequestUri.AbsolutePath.StartsWith($"/kv/{KeyValue.Key}"))
{
response.StatusCode = HttpStatusCode.OK;
string json = JsonConvert.SerializeObject(KeyValue).ToLowerInvariant();
long jsonBytes = Encoding.UTF8.GetByteCount(json);
response.Content = new StringContent(json, Encoding.UTF8, "application/json");
response.Content.Headers.Add("Content-Length", jsonBytes.ToString());
}

return Task.FromResult(response);
_expectedMethod = HttpMethod.Get;
_expectedUri = "https://contoso.azconfig.io/kv/test";
_expectedContent = null;
_responseCode = HttpStatusCode.OK;
}
}

class GetKeyValueMockTransport : MockHttpClientTransport
{
public KeyValue KeyValue;

protected override Task<HttpResponseMessage> ProcessCoreAsync(CancellationToken cancellation, HttpRequestMessage request)
protected override void WriteResponseCore(HttpResponseMessage response)
{
Assert.AreEqual(HttpMethod.Get, request.Method);
VerifyUserAgentHeader(request);

HttpResponseMessage response = new HttpResponseMessage();
if (request.RequestUri.AbsolutePath.StartsWith($"/kv/{KeyValue.Key}")) {
response.StatusCode = HttpStatusCode.OK;
string json = JsonConvert.SerializeObject(KeyValue).ToLowerInvariant();
long jsonBytes = Encoding.UTF8.GetByteCount(json);
response.Content = new StringContent(json, Encoding.UTF8, "application/json");
response.Content.Headers.Add("Content-Length", jsonBytes.ToString());
}
else {
response.StatusCode = HttpStatusCode.NotFound;
}

return Task.FromResult(response);
string json = JsonConvert.SerializeObject(KeyValue).ToLowerInvariant();
response.Content = new StringContent(json, Encoding.UTF8, "application/json");

long jsonByteCount = Encoding.UTF8.GetByteCount(json);
response.Content.Headers.Add("Content-Length", jsonByteCount.ToString());
}
}
}
75 changes: 75 additions & 0 deletions Azure.Configuration.Test/MockHttpClientTransport.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
using Azure.Core.Net;
using Azure.Core.Net.Pipeline;
using NUnit.Framework;
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using static System.Buffers.Text.Encodings;

namespace Azure.Configuration.Test
{
abstract class MockHttpClientTransport : HttpClientTransport
{
protected HttpMethod _expectedMethod;
protected string _expectedUri;
protected string _expectedContent;
protected HttpStatusCode _responseCode;

protected override Task<HttpResponseMessage> ProcessCoreAsync(CancellationToken cancellation, HttpRequestMessage request)
{
VerifyRequestLine(request);
VerifyRequestContent(request);
VerifyUserAgentHeader(request);
VerifyRequestCore(request);
HttpResponseMessage response = new HttpResponseMessage();
WriteResponse(response);
WriteResponseCore(response);
return Task.FromResult(response);
}

protected virtual void VerifyRequestCore(HttpRequestMessage request) { }
protected abstract void WriteResponseCore(HttpResponseMessage response);

void VerifyRequestLine(HttpRequestMessage request)
{
Assert.AreEqual(_expectedMethod, request.Method);
Assert.AreEqual(_expectedUri, request.RequestUri.OriginalString);
Assert.AreEqual(new Version(2, 0), request.Version);
}

void VerifyRequestContent(HttpRequestMessage request)
{
if (_expectedContent == null)
{
Assert.IsNull(request.Content);
}
else
{
Assert.NotNull(request.Content);
var contentString = request.Content.ReadAsStringAsync().Result;
Assert.AreEqual(_expectedContent, contentString);
}
}

void VerifyUserAgentHeader(HttpRequestMessage request)
{
var expected = Utf8.ToString(Header.Common.CreateUserAgent("Azure-Configuration", "1.0.0").Value);

Assert.True(request.Headers.Contains("User-Agent"));
var userAgentValues = request.Headers.GetValues("User-Agent");

foreach (var value in userAgentValues)
{
if (expected.StartsWith(value)) return;
}
Assert.Fail("could not find User-Agent header value " + expected);
}

void WriteResponse(HttpResponseMessage response)
{
response.StatusCode = _responseCode;
}
}
}
1 change: 1 addition & 0 deletions Azure.Configuration/ConfigurationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public partial class ConfigurationService
{
internal const string SdkName = "Azure-Configuration";
internal const string SdkVersion = "1.0.0";

readonly Uri _baseUri;
readonly string _credential;
readonly byte[] _secret;
Expand Down

0 comments on commit 112a80f

Please sign in to comment.