Skip to content

Commit 81d92c6

Browse files
author
David García Vives
committed
Refactor to use DockerClient.JsonSerializer settings
Attempt to fix failing test case due to I/O
1 parent be4487e commit 81d92c6

File tree

3 files changed

+29
-26
lines changed

3 files changed

+29
-26
lines changed

src/Docker.DotNet/Endpoints/StreamUtil.cs

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ namespace Docker.DotNet.Models
1111
{
1212
internal static class StreamUtil
1313
{
14-
private static readonly Newtonsoft.Json.JsonSerializer _serializer = new Newtonsoft.Json.JsonSerializer();
15-
1614
internal static async Task MonitorStreamAsync(Task<Stream> streamTask, DockerClient client, CancellationToken cancellationToken, IProgress<string> progress)
1715
{
1816
var tcs = new TaskCompletionSource<string>();
@@ -40,7 +38,7 @@ internal static async Task MonitorStreamForMessagesAsync<T>(Task<Stream> streamT
4038
{
4139
while (await await Task.WhenAny(jsonReader.ReadAsync(cancellationToken), tcs.Task))
4240
{
43-
var ev = await DeserializeAsync<T>(jsonReader, cancellationToken);
41+
var ev = await client.JsonSerializer.Deserialize<T>(jsonReader, cancellationToken);
4442
progress.Report(ev);
4543
}
4644
}
@@ -53,21 +51,5 @@ internal static async Task MonitorResponseForMessagesAsync<T>(Task<HttpResponseM
5351
await MonitorStreamForMessagesAsync<T>(response.Content.ReadAsStreamAsync(), client, cancel, progress);
5452
}
5553
}
56-
57-
public static async Task<T> DeserializeAsync<T>(JsonReader jsonReader, CancellationToken cancellationToken)
58-
{
59-
var tcs = new TaskCompletionSource<T>();
60-
using (cancellationToken.Register(() => tcs.TrySetCanceled(cancellationToken)))
61-
{
62-
await Task.Factory.StartNew(
63-
() => tcs.TrySetResult(_serializer.Deserialize<T>(jsonReader)),
64-
cancellationToken,
65-
TaskCreationOptions.LongRunning,
66-
TaskScheduler.Default
67-
);
68-
69-
return await tcs.Task;
70-
}
71-
}
7254
}
7355
}

src/Docker.DotNet/JsonSerializer.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using Newtonsoft.Json;
1+
using System.Threading;
2+
using System.Threading.Tasks;
3+
using Newtonsoft.Json;
24
using Newtonsoft.Json.Converters;
35

46
namespace Docker.DotNet
@@ -8,6 +10,8 @@ namespace Docker.DotNet
810
/// </summary>
911
internal class JsonSerializer
1012
{
13+
private readonly Newtonsoft.Json.JsonSerializer _serializer;
14+
1115
private readonly JsonSerializerSettings _settings = new JsonSerializerSettings
1216
{
1317
NullValueHandling = NullValueHandling.Ignore,
@@ -24,6 +28,23 @@ internal class JsonSerializer
2428

2529
public JsonSerializer()
2630
{
31+
_serializer = Newtonsoft.Json.JsonSerializer.CreateDefault(this._settings);
32+
}
33+
34+
public Task<T> Deserialize<T>(JsonReader jsonReader, CancellationToken cancellationToken)
35+
{
36+
var tcs = new TaskCompletionSource<T>();
37+
using (cancellationToken.Register(() => tcs.TrySetCanceled(cancellationToken)))
38+
{
39+
Task.Factory.StartNew(
40+
() => tcs.TrySetResult(_serializer.Deserialize<T>(jsonReader)),
41+
cancellationToken,
42+
TaskCreationOptions.LongRunning,
43+
TaskScheduler.Default
44+
);
45+
46+
return tcs.Task;
47+
}
2748
}
2849

2950
public T DeserializeObject<T>(string json)
@@ -36,4 +57,4 @@ public string SerializeObject<T>(T value)
3657
return JsonConvert.SerializeObject(value, this._settings);
3758
}
3859
}
39-
}
60+
}

test/Docker.DotNet.Tests/ISystemOperations.Tests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics;
44
using System.Linq;
@@ -88,17 +88,17 @@ public async Task MonitorEventsAsync_Succeeds()
8888
var progressJSONMessage = new Progress<JSONMessage>((m) =>
8989
{
9090
// Status could be 'Pulling from...'
91-
_output.WriteLine($"MonitorEventsAsync_Succeeds: JSONMessage - {m.ID} - {m.Status} {m.From} - {m.Stream}");
9291
Assert.NotNull(m);
92+
_output.WriteLine($"MonitorEventsAsync_Succeeds: JSONMessage - {m.ID} - {m.Status} {m.From} - {m.Stream}");
9393
});
9494

9595
var wasProgressCalled = false;
9696

9797
var progressMessage = new Progress<Message>((m) =>
9898
{
9999
wasProgressCalled = true;
100-
_output.WriteLine($"MonitorEventsAsync_Succeeds: Message - {m.Action} - {m.Status} {m.From} - {m.Type}");
101100
Assert.NotNull(m);
101+
_output.WriteLine($"MonitorEventsAsync_Succeeds: Message - {m.Action} - {m.Status} {m.From} - {m.Type}");
102102
});
103103

104104
using var cts = CancellationTokenSource.CreateLinkedTokenSource(_cts.Token);
@@ -253,9 +253,9 @@ await _client.Images.TagImageAsync(
253253

254254
var progress = new Progress<Message>((m) =>
255255
{
256-
_output.WriteLine($"{MethodBase.GetCurrentMethod().Module}->{MethodBase.GetCurrentMethod().Name}: Message received: {m.Action} - {m.Status} {m.From} - {m.Type}");
257-
Assert.True(m.Status == "tag" || m.Status == "untag");
258256
progressCalledCounter++;
257+
Assert.True(m.Status == "tag" || m.Status == "untag");
258+
_output.WriteLine($"MonitorEventsFiltered_Succeeds: Message received: {m.Action} - {m.Status} {m.From} - {m.Type}");
259259
});
260260

261261
using var cts = CancellationTokenSource.CreateLinkedTokenSource(_cts.Token);

0 commit comments

Comments
 (0)