Skip to content

Commit 8012363

Browse files
committed
Tentative fix for timers deserializing error (dapr#1512)
* Tentative fix for deserializing error * Added unit tests to prove out timer deserialization for all supported formats Signed-off-by: Whit Waldo <whit.waldo@innovian.net>
1 parent f1cdcba commit 8012363

1 file changed

Lines changed: 155 additions & 0 deletions

File tree

test/Dapr.Actors.Test/Runtime/ActorManagerTests.cs

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,161 @@ public async Task DeserializeTimer_Ttl_Iso8601Times()
332332
}
333333

334334
private interface ITestActor : IActor { }
335+
[Fact]
336+
public async Task DeserializeTimer_Period_Iso8601_Time()
337+
{
338+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"0h0m7s10ms\"}";
339+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
340+
var result = await ActorManager.DeserializeAsync(stream);
341+
342+
Assert.Equal("TimerCallback", result.Callback);
343+
Assert.Equal(Array.Empty<byte>(), result.Data);
344+
Assert.Null(result.Ttl);
345+
Assert.Equal(TimeSpan.Zero, result.DueTime);
346+
Assert.Equal(TimeSpan.FromSeconds(7).Add(TimeSpan.FromMilliseconds(10)), result.Period);
347+
}
348+
349+
[Fact]
350+
public async Task DeserializeTimer_Period_DaprFormat_Every()
351+
{
352+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"@every 15s\"}";
353+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
354+
var result = await ActorManager.DeserializeAsync(stream);
355+
356+
Assert.Equal("TimerCallback", result.Callback);
357+
Assert.Equal(Array.Empty<byte>(), result.Data);
358+
Assert.Null(result.Ttl);
359+
Assert.Equal(TimeSpan.Zero, result.DueTime);
360+
Assert.Equal(TimeSpan.FromSeconds(15), result.Period);
361+
}
362+
363+
[Fact]
364+
public async Task DeserializeTimer_Period_DaprFormat_Every2()
365+
{
366+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"@every 3h2m15s\"}";
367+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
368+
var result = await ActorManager.DeserializeAsync(stream);
369+
370+
Assert.Equal("TimerCallback", result.Callback);
371+
Assert.Equal(Array.Empty<byte>(), result.Data);
372+
Assert.Null(result.Ttl);
373+
Assert.Equal(TimeSpan.Zero, result.DueTime);
374+
Assert.Equal(TimeSpan.FromHours(3).Add(TimeSpan.FromMinutes(2)).Add(TimeSpan.FromSeconds(15)), result.Period);
375+
}
376+
377+
[Fact]
378+
public async Task DeserializeTimer_Period_DaprFormat_Monthly()
379+
{
380+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"@monthly\"}";
381+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
382+
var result = await ActorManager.DeserializeAsync(stream);
383+
384+
Assert.Equal("TimerCallback", result.Callback);
385+
Assert.Equal(Array.Empty<byte>(), result.Data);
386+
Assert.Null(result.Ttl);
387+
Assert.Equal(TimeSpan.Zero, result.DueTime);
388+
Assert.Equal(TimeSpan.FromDays(30), result.Period);
389+
}
390+
391+
[Fact]
392+
public async Task DeserializeTimer_Period_DaprFormat_Weekly()
393+
{
394+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"@weekly\"}";
395+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
396+
var result = await ActorManager.DeserializeAsync(stream);
397+
398+
Assert.Equal("TimerCallback", result.Callback);
399+
Assert.Equal(Array.Empty<byte>(), result.Data);
400+
Assert.Null(result.Ttl);
401+
Assert.Equal(TimeSpan.Zero, result.DueTime);
402+
Assert.Equal(TimeSpan.FromDays(7), result.Period);
403+
}
404+
405+
[Fact]
406+
public async Task DeserializeTimer_Period_DaprFormat_Daily()
407+
{
408+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"@daily\"}";
409+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
410+
var result = await ActorManager.DeserializeAsync(stream);
411+
412+
Assert.Equal("TimerCallback", result.Callback);
413+
Assert.Equal(Array.Empty<byte>(), result.Data);
414+
Assert.Null(result.Ttl);
415+
Assert.Equal(TimeSpan.Zero, result.DueTime);
416+
Assert.Equal(TimeSpan.FromDays(1), result.Period);
417+
}
418+
419+
[Fact]
420+
public async Task DeserializeTimer_Period_DaprFormat_Hourly()
421+
{
422+
const string timerJson = "{\"callback\": \"TimerCallback\", \"period\": \"@hourly\"}";
423+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
424+
var result = await ActorManager.DeserializeAsync(stream);
425+
426+
Assert.Equal("TimerCallback", result.Callback);
427+
Assert.Equal(Array.Empty<byte>(), result.Data);
428+
Assert.Null(result.Ttl);
429+
Assert.Equal(TimeSpan.Zero, result.DueTime);
430+
Assert.Equal(TimeSpan.FromHours(1), result.Period);
431+
}
432+
433+
[Fact]
434+
public async Task DeserializeTimer_DueTime_DaprFormat_Hourly()
435+
{
436+
const string timerJson = "{\"callback\": \"TimerCallback\", \"dueTime\": \"@hourly\"}";
437+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
438+
var result = await ActorManager.DeserializeAsync(stream);
439+
440+
Assert.Equal("TimerCallback", result.Callback);
441+
Assert.Equal(Array.Empty<byte>(), result.Data);
442+
Assert.Null(result.Ttl);
443+
Assert.Equal(TimeSpan.FromHours(1), result.DueTime);
444+
Assert.Equal(TimeSpan.Zero, result.Period);
445+
}
446+
447+
[Fact]
448+
public async Task DeserializeTimer_DueTime_Iso8601Times()
449+
{
450+
const string timerJson = "{\"callback\": \"TimerCallback\", \"dueTime\": \"0h0m7s10ms\"}";
451+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
452+
var result = await ActorManager.DeserializeAsync(stream);
453+
454+
Assert.Equal("TimerCallback", result.Callback);
455+
Assert.Equal(Array.Empty<byte>(), result.Data);
456+
Assert.Null(result.Ttl);
457+
Assert.Equal(TimeSpan.Zero, result.Period);
458+
Assert.Equal(TimeSpan.FromSeconds(7).Add(TimeSpan.FromMilliseconds(10)), result.DueTime);
459+
}
460+
461+
[Fact]
462+
public async Task DeserializeTimer_Ttl_DaprFormat_Hourly()
463+
{
464+
const string timerJson = "{\"callback\": \"TimerCallback\", \"ttl\": \"@hourly\"}";
465+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
466+
var result = await ActorManager.DeserializeAsync(stream);
467+
468+
Assert.Equal("TimerCallback", result.Callback);
469+
Assert.Equal(Array.Empty<byte>(), result.Data);
470+
Assert.Equal(TimeSpan.Zero, result.DueTime);
471+
Assert.Equal(TimeSpan.Zero, result.Period);
472+
Assert.Equal(TimeSpan.FromHours(1), result.Ttl);
473+
}
474+
475+
[Fact]
476+
public async Task DeserializeTimer_Ttl_Iso8601Times()
477+
{
478+
const string timerJson = "{\"callback\": \"TimerCallback\", \"ttl\": \"0h0m7s10ms\"}";
479+
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(timerJson));
480+
var result = await ActorManager.DeserializeAsync(stream);
481+
482+
Assert.Equal("TimerCallback", result.Callback);
483+
Assert.Equal(Array.Empty<byte>(), result.Data);
484+
Assert.Equal(TimeSpan.Zero, result.DueTime);
485+
Assert.Equal(TimeSpan.Zero, result.Period);
486+
Assert.Equal(TimeSpan.FromSeconds(7).Add(TimeSpan.FromMilliseconds(10)), result.Ttl);
487+
}
488+
489+
private interface ITestActor : IActor { }
335490

336491
private class TestActor : Actor, ITestActor, IDisposable
337492
{

0 commit comments

Comments
 (0)