Skip to content

Commit

Permalink
Add support for PATCH in HttpConnection.ConvertHttpMethod
Browse files Browse the repository at this point in the history
Signed-off-by: Assaf Tirangel <[email protected]>
  • Loading branch information
Assaf Tirangel authored and atirangel committed Jan 8, 2024
1 parent a9f9eb4 commit e2ad643
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 14 deletions.
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
- Removed the `Features` API which is not supported by OpenSearch from the low-level client ([#331](https://github.com/opensearch-project/opensearch-net/pull/331))
- Removed the deprecated low-level `IndexTemplateV2` APIs in favour of the `ComposableIndexTemplate` APIs ([#437](https://github.com/opensearch-project/opensearch-net/pull/437))

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

### Dependencies
- Bumps `Microsoft.CodeAnalysis.CSharp` from 4.2.0 to 4.6.0
- Bumps `NSwag.Core.Yaml` from 13.19.0 to 13.20.0
Expand Down Expand Up @@ -130,4 +133,4 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
[1.6.0]: https://github.com/opensearch-project/opensearch-net/compare/v1.5.0...v1.6.0
[1.5.0]: https://github.com/opensearch-project/opensearch-net/compare/v1.4.0...v1.5.0
[1.4.0]: https://github.com/opensearch-project/opensearch-net/compare/v1.3.0...v1.4.0
[1.3.0]: https://github.com/opensearch-project/opensearch-net/compare/v1.2.0...v1.3.0
[1.3.0]: https://github.com/opensearch-project/opensearch-net/compare/v1.2.0...v1.3.0
25 changes: 12 additions & 13 deletions src/OpenSearch.Net/Connection/HttpConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
*/

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
Expand Down Expand Up @@ -70,6 +69,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 @@ -430,19 +431,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
61 changes: 61 additions & 0 deletions tests/Tests/Connection/Http/HttpConnectionTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System;
using System.Net.Http;
using FluentAssertions;
using OpenSearch.Client;
using OpenSearch.Net;
using OpenSearch.OpenSearch.Xunit.XunitPlumbing;
using Xunit;
using HttpMethod = OpenSearch.Net.HttpMethod;

namespace Tests.Connection.Http;

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

private class MockHttpConnection : HttpConnection
{
public HttpRequestMessage LastRequest { get; private set; }

protected override HttpRequestMessage CreateHttpRequestMessage(RequestData requestData)
{
LastRequest = base.CreateHttpRequestMessage(requestData);
return LastRequest;
}

public override TResponse Request<TResponse>(RequestData requestData)
{
CreateHttpRequestMessage(requestData);
return new TResponse();
}
}

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)
{
var mockHttpConnection = new MockHttpConnection();
mockHttpConnection.Request<StringResponse>(new RequestData(method, "", null, null, null, null));
mockHttpConnection.LastRequest.Method.Should().Be(ConvertHttpMethod(method));
}

private static System.Net.Http.HttpMethod ConvertHttpMethod(HttpMethod httpMethod) =>
httpMethod switch
{
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))
};

}

0 comments on commit e2ad643

Please sign in to comment.