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

Support Listing and Deleting Configuration Entries #271

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions Consul.Test/ConfigurationTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,68 @@ public async Task Configuration_ApplyConfig(string protocol)
Assert.Equal(payload.Kind, queryResult.Response.Kind);
Assert.Equal(payload.Protocol, queryResult.Response.Protocol);
}

[Fact]
public async Task Configuration_ListConfig()
{
var firstPayload = new ServiceDefaultsEntry
{
Kind = "service-defaults",
Name = "web",
Protocol = "https"
};

var secondPayload = new ServiceDefaultsEntry
{
Kind = "service-defaults",
Name = "db",
Protocol = "https"
};
var writeResult = await _client.Configuration.ApplyConfig(firstPayload);
Assert.Equal(HttpStatusCode.OK, writeResult.StatusCode);
writeResult = await _client.Configuration.ApplyConfig(secondPayload);
Assert.Equal(HttpStatusCode.OK, writeResult.StatusCode);
var queryResult = await _client.Configuration.ListConfig<ServiceDefaultsEntry>(firstPayload.Kind);
var configurations = queryResult.Response;
var webConfig = configurations.SingleOrDefault(c => c.Name == firstPayload.Name);
var dbConfig = configurations.SingleOrDefault(c => c.Name == secondPayload.Name);
Assert.NotNull(dbConfig);
Assert.NotNull(webConfig);

Assert.Equal(firstPayload.Name, webConfig.Name);
Assert.Equal(firstPayload.Kind, webConfig.Kind);
Assert.Equal(firstPayload.Protocol, webConfig.Protocol);
sammychinedu2ky marked this conversation as resolved.
Show resolved Hide resolved

Assert.Equal(secondPayload.Name, dbConfig.Name);
Assert.Equal(secondPayload.Kind, dbConfig.Kind);
Assert.Equal(secondPayload.Protocol, dbConfig.Protocol);
}

[Fact]
public async Task Configuration_DeleteConfig()
{
var payload = new ServiceDefaultsEntry
{
Kind = "service-defaults",
Name = "test-service",
Protocol = "http"
};

var writeResult = await _client.Configuration.ApplyConfig(payload);
Assert.Equal(HttpStatusCode.OK, writeResult.StatusCode);

var getConfigResult = await _client.Configuration.GetConfig<ServiceDefaultsEntry>(payload.Kind, payload.Name);
Assert.Equal(HttpStatusCode.OK, getConfigResult.StatusCode);
Assert.Equal(payload.Name, getConfigResult.Response.Name);
Assert.Equal(payload.Kind, getConfigResult.Response.Kind);
Assert.Equal(payload.Protocol, getConfigResult.Response.Protocol);

var deleteResult = await _client.Configuration.DeleteConfig(payload.Kind, payload.Name);
Assert.Equal(HttpStatusCode.OK, deleteResult.StatusCode);

var getDeletedConfigResult = await _client.Configuration.GetConfig<ServiceDefaultsEntry>(payload.Kind, payload.Name);
Assert.Equal(HttpStatusCode.NotFound, getDeletedConfigResult.StatusCode);
Assert.Null(getDeletedConfigResult.Response);
}
}
}
53 changes: 53 additions & 0 deletions Consul/Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1721,6 +1721,59 @@ public Task<QueryResult<TConfig>> GetConfig<TConfig>(string kind, string name, C
{
return GetConfig<TConfig>(kind, name, QueryOptions.Default, ct);
}

/// <summary>
/// This Retrieves the list of config for an entry kind.
/// </summary>
/// <typeparam name="TConfig"></typeparam>
/// <param name="kind">The kind of config entry</param>
/// <param name="q">Query Options</param>
/// <param name="ct">Cancellation Token</param>
/// <returns>A config entry</returns>
public Task<QueryResult<List<TConfig>>> ListConfig<TConfig>(string kind, QueryOptions q, CancellationToken ct = default) where TConfig : IConfigurationEntry
{
var req = _client.Get<List<TConfig>>($"/v1/config/{kind}", q);
return req.Execute(ct);
}
/// <summary>
/// This Retrieves the list of config for an entry kind.
/// </summary>
/// <typeparam name="TConfig"></typeparam>
/// <param name="kind">The kind of config entry</param>
/// <param name="ct">Cancellation Token</param>
/// <returns>A list of config entries</returns>
public Task<QueryResult<List<TConfig>>> ListConfig<TConfig>(string kind, CancellationToken ct = default) where TConfig : IConfigurationEntry
{
return ListConfig<TConfig>(kind, QueryOptions.Default, ct);
}

/// <summary>
/// This Deletes the given config entry.
/// </summary>
/// <typeparam name="TConfig"></typeparam>
/// <param name="kind">The kind of config entry</param>
/// <param name="name">The name of config entry</param>
/// <param name="q">Write Options</param>
/// <param name="ct">Cancellation Token</param>
/// <returns>A Write Result</returns>
public Task<WriteResult> DeleteConfig(string kind, string name, WriteOptions q, CancellationToken ct = default)
{
var req = _client.Delete($"/v1/config/{kind}/{name}", q);
return req.Execute(ct);
}

/// <summary>
/// This Deletes the given config entry.
/// </summary>
/// <typeparam name="TConfig"></typeparam>
/// <param name="kind">The kind of config entry</param>
/// <param name="name">The name of config entry</param>
/// <param name="ct">Cancellation Token</param>
/// <returns>A config entry</returns>
public Task<WriteResult> DeleteConfig(string kind, string name, CancellationToken ct = default)
{
return DeleteConfig(kind, name, WriteOptions.Default, ct);
}
}
public partial class ConsulClient : IConsulClient
{
Expand Down
4 changes: 4 additions & 0 deletions Consul/Interfaces/IConfigurationEndpoint.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,9 @@ public interface IConfigurationEndpoint
Task<WriteResult> ApplyConfig<TConfig>(TConfig configurationEntry, CancellationToken ct = default) where TConfig : IConfigurationEntry;
Task<QueryResult<TConfig>> GetConfig<TConfig>(string kind, string name, QueryOptions q, CancellationToken ct = default) where TConfig : IConfigurationEntry;
Task<QueryResult<TConfig>> GetConfig<TConfig>(string kind, string name, CancellationToken ct = default) where TConfig : IConfigurationEntry;
Task<QueryResult<List<TConfig>>> ListConfig<TConfig>(string kind, QueryOptions q, CancellationToken ct = default) where TConfig : IConfigurationEntry;
Task<QueryResult<List<TConfig>>> ListConfig<TConfig>(string kind, CancellationToken ct = default) where TConfig : IConfigurationEntry;
Task<WriteResult> DeleteConfig(string kind, string name, WriteOptions q, CancellationToken ct = default);
Task<WriteResult> DeleteConfig(string kind, string name, CancellationToken ct = default);
}
}