Skip to content

Commit

Permalink
Add support for PATCH in HttpConnection.ConvertHttpMethod (opense…
Browse files Browse the repository at this point in the history
…arch-project#489)

* Add support for PATCH in HttpConnection.ConvertHttpMethod

Signed-off-by: Assaf Tirangel <[email protected]>

* Fix test

Signed-off-by: Thomas Farr <[email protected]>

---------

Signed-off-by: Assaf Tirangel <[email protected]>
Signed-off-by: Thomas Farr <[email protected]>
Co-authored-by: Assaf Tirangel <[email protected]>
Co-authored-by: Thomas Farr <[email protected]>
(cherry picked from commit 4e721ee)
  • Loading branch information
assaftir authored and Xtansia committed Jan 9, 2024
1 parent 07d621c commit b631aad
Show file tree
Hide file tree
Showing 8 changed files with 90 additions and 17 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)

## [Unreleased]
### Fixed
- Fix `HttpConnection.ConvertHttpMethod` to support `Patch` method ([#489](https://github.com/opensearch-project/opensearch-net/pull/489))

### Dependencies
- Bumps `BenchMarkDotNet` from 0.13.10 to 0.13.11
- Bumps `xunit.runner.visualstudio` from 2.5.4 to 2.5.6
Expand Down
25 changes: 12 additions & 13 deletions src/OpenSearch.Net/Connection/HttpConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@

#if DOTNETCORE
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
Expand Down Expand Up @@ -71,6 +70,8 @@ public class HttpConnection : IConnection
+ $" please set {nameof(ConnectionConfiguration.ConnectionLimit)} to -1 on your connection configuration/settings."
+ $" this will cause the {nameof(HttpClientHandler.MaxConnectionsPerServer)} not to be set on {nameof(HttpClientHandler)}";

private static readonly System.Net.Http.HttpMethod Patch = new System.Net.Http.HttpMethod("PATCH");

private RequestDataHttpClientFactory HttpClientFactory { get; }

public int InUseHandlers => HttpClientFactory.InUseHandlers;
Expand Down Expand Up @@ -431,19 +432,17 @@ private static async Task SetContentAsync(HttpRequestMessage message, RequestDat
}
}

private static System.Net.Http.HttpMethod ConvertHttpMethod(HttpMethod httpMethod)
{
switch (httpMethod)
private static System.Net.Http.HttpMethod ConvertHttpMethod(HttpMethod httpMethod) =>
httpMethod switch
{
case HttpMethod.GET: return System.Net.Http.HttpMethod.Get;
case HttpMethod.POST: return System.Net.Http.HttpMethod.Post;
case HttpMethod.PUT: return System.Net.Http.HttpMethod.Put;
case HttpMethod.DELETE: return System.Net.Http.HttpMethod.Delete;
case HttpMethod.HEAD: return System.Net.Http.HttpMethod.Head;
default:
throw new ArgumentException("Invalid value for HttpMethod", nameof(httpMethod));
}
}
HttpMethod.GET => System.Net.Http.HttpMethod.Get,
HttpMethod.POST => System.Net.Http.HttpMethod.Post,
HttpMethod.PUT => System.Net.Http.HttpMethod.Put,
HttpMethod.DELETE => System.Net.Http.HttpMethod.Delete,
HttpMethod.HEAD => System.Net.Http.HttpMethod.Head,
HttpMethod.PATCH => Patch,
_ => throw new ArgumentException("Invalid value for HttpMethod", nameof(httpMethod))
};

internal static int GetClientKey(RequestData requestData)
{
Expand Down
1 change: 1 addition & 0 deletions tests/Tests.Auth.AwsSigV4/AwsSigV4HttpConnectionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
using OpenSearch.Client;
using OpenSearch.OpenSearch.Xunit.XunitPlumbing;
using Tests.Auth.AwsSigV4.Utils;
using Tests.Core.Connection.Http;
using Xunit;

namespace Tests.Auth.AwsSigV4;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Amazon.Runtime;
using OpenSearch.Net;
using OpenSearch.Net.Auth.AwsSigV4;
using Tests.Core.Connection.Http;

namespace Tests.Auth.AwsSigV4.Utils;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,13 @@
using System.Net.Http;
using FluentAssertions;

namespace Tests.Auth.AwsSigV4.Utils;
namespace Tests.Core.Connection.Http;

internal static class HttpRequestMessageAssertions
public static class HttpRequestMessageAssertions
{
public static void ShouldHaveMethod(this HttpRequestMessage request, string method) =>
request.Method.Should().Be(new HttpMethod(method));

public static void ShouldHaveHeader(this HttpRequestMessage request, string name, string value) =>
request.Headers.GetValues(name).Should().BeEquivalentTo(value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@
using System.Threading;
using System.Threading.Tasks;

namespace Tests.Auth.AwsSigV4.Utils;
namespace Tests.Core.Connection.Http;

internal class MockHttpMessageHandler : HttpMessageHandler
public class MockHttpMessageHandler : HttpMessageHandler
{
public delegate HttpResponseMessage Handler(HttpRequestMessage request);

Expand Down
44 changes: 44 additions & 0 deletions tests/Tests/Connection/Http/HttpConnectionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

using System;
using System.Net.Http;
using FluentAssertions;
using OpenSearch.Net;
using OpenSearch.OpenSearch.Xunit.XunitPlumbing;
using Tests.Core.Connection.Http;
using Xunit;
using HttpMethod = OpenSearch.Net.HttpMethod;

namespace Tests.Connection.Http;

public class HttpConnectionTests
{
public static TheoryData<HttpMethod> HttpMethods()
{
var data = new TheoryData<HttpMethod>();
foreach (var httpMethod in Enum.GetValues<HttpMethod>()) data.Add(httpMethod);
return data;
}

[TU]
[MemberData(nameof(HttpMethods))]
public void UsesCorrectHttpMethod(HttpMethod method)
{
HttpRequestMessage sentRequest = null;
var connection = new MockableHttpConnection(r =>
{
sentRequest = r;
return new HttpResponseMessage();
});
var client = new OpenSearchLowLevelClient(new ConnectionConfiguration(connection: connection));

client.DoRequest<VoidResponse>(method, "/");

sentRequest.ShouldHaveMethod(method.ToString());
}
}
22 changes: 22 additions & 0 deletions tests/Tests/Connection/Http/MockableHttpConnection.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/* SPDX-License-Identifier: Apache-2.0
*
* The OpenSearch Contributors require contributions made to
* this file be licensed under the Apache-2.0 license or a
* compatible open source license.
*/

using System.Net.Http;
using OpenSearch.Net;
using Tests.Core.Connection.Http;

namespace Tests.Connection.Http;

public class MockableHttpConnection : HttpConnection
{
private readonly MockHttpMessageHandler _handler;

public MockableHttpConnection(MockHttpMessageHandler.Handler handler) =>
_handler = new MockHttpMessageHandler(handler);

protected override HttpMessageHandler CreateHttpClientHandler(RequestData requestData) => _handler;
}

0 comments on commit b631aad

Please sign in to comment.