mirror of https://github.com/dapr/dotnet-sdk.git
85 lines
2.9 KiB
C#
85 lines
2.9 KiB
C#
// ------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
// ------------------------------------------------------------
|
|
|
|
namespace Dapr.Actors.Test
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Dapr.Actors.Runtime;
|
|
using Newtonsoft.Json;
|
|
using Xunit;
|
|
|
|
public class DaprFormatTimeSpanTests
|
|
{
|
|
public static readonly IEnumerable<object[]> DaprFormatTimeSpanJsonStringsAndExpectedDeserializedValues = new List<object[]>
|
|
{
|
|
new object[]
|
|
{
|
|
"{\"dueTime\":\"4h15m50s60ms\"",
|
|
new TimeSpan(0, 4, 15, 50, 60),
|
|
},
|
|
new object[]
|
|
{
|
|
"{\"dueTime\":\"0h35m10s12ms\"",
|
|
new TimeSpan(0, 0, 35, 10, 12),
|
|
},
|
|
};
|
|
|
|
[Theory]
|
|
[MemberData(nameof(DaprFormatTimeSpanJsonStringsAndExpectedDeserializedValues))]
|
|
public void DaprFormat_TimeSpan_Parsing(string daprFormatTimeSpanJsonString, TimeSpan expectedDeserializedValue)
|
|
{
|
|
using var textReader = new StringReader(daprFormatTimeSpanJsonString);
|
|
using var jsonTextReader = new JsonTextReader(textReader);
|
|
|
|
while (jsonTextReader.TokenType != JsonToken.String)
|
|
{
|
|
jsonTextReader.Read();
|
|
}
|
|
|
|
var timespanString = (string)jsonTextReader.Value;
|
|
var deserializedTimeSpan = ConverterUtils.ConvertTimeSpanFromDaprFormat(timespanString);
|
|
|
|
Assert.Equal(expectedDeserializedValue, deserializedTimeSpan);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ConverterUtilsTestEndToEndAsync()
|
|
{
|
|
static Task<string> SerializeAsync(TimeSpan dueTime, TimeSpan period)
|
|
{
|
|
var timer = new ActorTimer(
|
|
owner: null,
|
|
timerName: "SomeTimer",
|
|
asyncCallback: state => Task.CompletedTask,
|
|
state: Encoding.UTF8.GetBytes("Some state value"),
|
|
dueTime: dueTime,
|
|
period: period);
|
|
return timer.SerializeAsync();
|
|
}
|
|
|
|
var inTheFuture = TimeSpan.FromMilliseconds(20);
|
|
var never = TimeSpan.FromMilliseconds(-1);
|
|
Assert.Equal(
|
|
"{\"dueTime\":\"0h0m0s20ms\"}",
|
|
await SerializeAsync(inTheFuture, never));
|
|
}
|
|
|
|
[Fact]
|
|
public void DaprFormatTimespanEmpty()
|
|
{
|
|
Func<string, TimeSpan> convert = ConverterUtils.ConvertTimeSpanFromDaprFormat;
|
|
TimeSpan never = TimeSpan.FromMilliseconds(-1);
|
|
Assert.Equal<TimeSpan>(never, convert(null));
|
|
Assert.Equal<TimeSpan>(never, convert(string.Empty));
|
|
}
|
|
}
|
|
}
|