Skip to content

Commit

Permalink
Fix deserialization of S3 snapshot repository without settings (opens…
Browse files Browse the repository at this point in the history
…earch-project#587)

* Add failing reproduction test case

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

* Add parameterless constructor to S3Repository

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

---------

Signed-off-by: Thomas Farr <[email protected]>
(cherry picked from commit df942ab)
  • Loading branch information
Xtansia committed Apr 10, 2024
1 parent d693637 commit cbddc79
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 0 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
- Fixed the deserialization of S3 snapshot repositories without settings ([#587](https://github.com/opensearch-project/opensearch-net/pull/587))

### Dependencies
- Bumps `System.Text.Json` from 8.0.1 to 8.0.3
- Bumps `Argu` from 6.2.1 to 6.2.3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ public interface IS3Repository : IRepository<IS3RepositorySettings> { }
/// <inheritdoc />
public class S3Repository : IS3Repository
{
public S3Repository() { }

public S3Repository(IS3RepositorySettings settings) => Settings = settings;

public IS3RepositorySettings Settings { get; set; }
Expand Down
58 changes: 58 additions & 0 deletions tests/Tests.Reproduce/GitHubIssue573.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/* 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.Text;
using FluentAssertions;
using OpenSearch.Client;
using OpenSearch.Net;
using OpenSearch.OpenSearch.Xunit.XunitPlumbing;
using Tests.Core.Extensions;

namespace Tests.Reproduce;

/// <summary>
/// S3 Snapshot Repository Without Settings Fails to Deserialize: <a href="https://github.com/opensearch-project/opensearch-net/issues/573">Issue #573</a>
/// </summary>
public class GitHubIssue573
{
[U] public void DeserializingS3SnapshotRepositoryWithoutSettingsShouldSucceed()
{
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

const string json = @"{
""cs-automated"": {
""type"": ""s3""
},
""authoring-service-snapshots"": {
""type"": ""s3"",
""settings"": {
""bucket"": ""some-bucket"",
""region"": ""us-west-2"",
""role_arn"": ""arn:aws:iam::123456789:role/SomeRole""
}
}
}";

var connection = new InMemoryConnection(Encoding.UTF8.GetBytes(json), 200);
var settings = new ConnectionSettings(pool, connection);
var client = new OpenSearchClient(settings);

var response = client.Snapshot.GetRepository();
response.ShouldBeValid();
response.Repositories
.Should()
.NotBeNull()
.And.HaveCount(2)
.And.ContainKeys("cs-automated", "authoring-service-snapshots")
.And.AllSatisfy(p => p.Value.Should().BeOfType<S3Repository>());

((S3Repository) response.Repositories["cs-automated"]).Settings.Should().BeNull();

((S3Repository) response.Repositories["authoring-service-snapshots"]).Settings.Should().NotBeNull();
}
}

0 comments on commit cbddc79

Please sign in to comment.