Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
14 changes: 14 additions & 0 deletions src/Docker.DotNet/Endpoints/DockerSwarmException.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System.Net;

namespace Docker.DotNet
{
public class DockerSwarmException : DockerApiException
{
public string DeserializedMessage { get; private set; }

public DockerSwarmException(HttpStatusCode statusCode, string responseBody, string deserializedMessage) : base(statusCode, responseBody)
{
DeserializedMessage = deserializedMessage;
}
}
}
3 changes: 2 additions & 1 deletion src/Docker.DotNet/Endpoints/SwarmOperations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ internal class SwarmOperations : ISwarmOperations
{
if (statusCode < HttpStatusCode.OK || statusCode >= HttpStatusCode.BadRequest)
Comment thread
n7on marked this conversation as resolved.
{
throw new DockerApiException(statusCode, responseBody);
var deserializedBody = new JsonSerializer().DeserializeObject<JSONError>(responseBody);
Comment thread
n7on marked this conversation as resolved.
Outdated
throw new DockerSwarmException(statusCode, responseBody, deserializedBody.Message);
}
};

Expand Down
15 changes: 4 additions & 11 deletions src/Docker.DotNet/Models/ServiceFilter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,12 @@ public ServiceCreationMode[] Mode
{
get
{
if (this["mode"].Length == 0)
Comment thread
n7on marked this conversation as resolved.
Outdated
var lst = new ServiceCreationMode[this["mode"].Length];
for(int i = 0; i< this["mode"].Length; i++)
{
return new ServiceCreationMode[] { ServiceCreationMode.Replicated };
}
else
{
var lst = new ServiceCreationMode[this["mode"].Length];
for(int i = 0; i< this["mode"].Length; i++)
{
lst[i] = (ServiceCreationMode)Enum.Parse(typeof(ServiceCreationMode), this["mode"][i]);
}
return lst;
lst[i] = (ServiceCreationMode)Enum.Parse(typeof(ServiceCreationMode), this["mode"][i]);
}
return lst;
}
set => this["mode"] = value.Select(m => m.ToString()).ToArray();
}
Expand Down
4 changes: 1 addition & 3 deletions test/Docker.DotNet.Tests/ISwarmOperationsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ public ISwarmOperationsTests()

_testServiceId = _client.Swarm.CreateServiceAsync(new ServiceCreateParameters()
{

Service = new ServiceSpec
{
Name = _testServiceName,
Expand Down Expand Up @@ -50,9 +49,8 @@ public async Task GetFilteredServicesAsync_Succeeds()
[Fact]
public async Task CreateServiceAsync_FaultyNetwork_Throws()
{
await Assert.ThrowsAsync<DockerApiException>(() => _client.Swarm.CreateServiceAsync(new ServiceCreateParameters()
await Assert.ThrowsAsync<DockerSwarmException>(() => _client.Swarm.CreateServiceAsync(new ServiceCreateParameters()
{

Service = new ServiceSpec
{
Name = $"{_testServiceName}2",
Expand Down
18 changes: 18 additions & 0 deletions test/Docker.DotNet.Tests/QueryStringTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,23 @@ public void ServicesListParameters_GenerateCompositeFilters()

Assert.Equal("filters={\"id\":[\"service-id\"],\"label\":[\"label\"]}", Uri.UnescapeDataString(qs.GetQueryString()));
}

[Fact]
public void ServicesListParameters_GenerateNullFilters()
{
var p = new ServicesListParameters { Filters = new ServiceFilter() };
var qs = new QueryString<ServicesListParameters>(p);
Assert.Equal("filters={}", Uri.UnescapeDataString(qs.GetQueryString()));
}

[Fact]
public void ServicesListParameters_GenerateNullModeFilters()
{
var p = new ServicesListParameters { Filters = new ServiceFilter() { Mode = new ServiceCreationMode[] { } } };
var qs = new QueryString<ServicesListParameters>(p);
var tmp = qs.GetQueryString();
var tmp2 = Uri.UnescapeDataString(tmp);
Assert.Equal("filters={\"mode\":[]}", tmp2);
}
}
}