Apply linting suggestions (#492)

We've had a list of linting-related messages piling up for a while now.
This change bulk-applies these suggestions with usually relate to
simplification or use or newer language features like ??=

The only changes I did manually here are:

    Removing some usage of Task.GetAwaiter().GetResult() where it was
    just laziness
    Removing some dead code in methods and parameters of internal APIs.
This commit is contained in:
Ryan Nowak 2021-01-04 17:35:57 -08:00 committed by GitHub
parent d54419526f
commit 776156298e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 207 additions and 198 deletions

View File

@ -67,13 +67,12 @@ namespace DaprDemoActor
return this.UnregisterReminderAsync("TestReminder"); return this.UnregisterReminderAsync("TestReminder");
} }
public Task ReceiveReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period) public async Task ReceiveReminderAsync(string reminderName, byte[] state, TimeSpan dueTime, TimeSpan period)
{ {
// This method is invoked when an actor reminder is fired. // This method is invoked when an actor reminder is fired.
var actorState = this.StateManager.GetStateAsync<MyData>(StateName).GetAwaiter().GetResult(); var actorState = await this.StateManager.GetStateAsync<MyData>(StateName);
actorState.PropertyB = $"Reminder triggered at '{DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")}'"; actorState.PropertyB = $"Reminder triggered at '{DateTime.Now:yyyy-MM-ddTHH:mm:ss}'";
this.StateManager.SetStateAsync<MyData>(StateName, actorState); await this.StateManager.SetStateAsync<MyData>(StateName, actorState);
return Task.CompletedTask;
} }
class TimerParams class TimerParams
@ -121,15 +120,14 @@ namespace DaprDemoActor
/// </summary> /// </summary>
/// <param name="data">Timer input data.</param> /// <param name="data">Timer input data.</param>
/// <returns>A task that represents the asynchronous operation.</returns> /// <returns>A task that represents the asynchronous operation.</returns>
public Task TimerCallback(byte[] data) public async Task TimerCallback(byte[] data)
{ {
var state = this.StateManager.GetStateAsync<MyData>(StateName).GetAwaiter().GetResult(); var state = await this.StateManager.GetStateAsync<MyData>(StateName);
state.PropertyA = $"Timer triggered at '{DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")}'"; state.PropertyA = $"Timer triggered at '{DateTime.Now:yyyyy-MM-ddTHH:mm:s}'";
this.StateManager.SetStateAsync<MyData>(StateName, state); await this.StateManager.SetStateAsync<MyData>(StateName, state);
var timerParams = JsonSerializer.Deserialize<TimerParams>(data); var timerParams = JsonSerializer.Deserialize<TimerParams>(data);
Console.WriteLine("Timer parameter1: " + timerParams.IntParam); Console.WriteLine("Timer parameter1: " + timerParams.IntParam);
Console.WriteLine("Timer parameter2: " + timerParams.StringParam); Console.WriteLine("Timer parameter2: " + timerParams.StringParam);
return Task.CompletedTask;
} }
public async Task<AccountBalance> GetAccountBalance() public async Task<AccountBalance> GetAccountBalance()

View File

@ -161,12 +161,15 @@ namespace DaprClient
internal static async Task ExecuteStateTransactionAsync(DaprClient client) internal static async Task ExecuteStateTransactionAsync(DaprClient client)
{ {
var value = new Widget() { Size = "small", Color = "yellow", }; var value = new Widget() { Size = "small", Color = "yellow", };
var request1 = new StateTransactionRequest("mystate", JsonSerializer.SerializeToUtf8Bytes(value), StateOperationType.Upsert); var request1 = new StateTransactionRequest("mystate", JsonSerializer.SerializeToUtf8Bytes(value), StateOperationType.Upsert);
var request2 = new StateTransactionRequest("mystate", null, StateOperationType.Delete); var request2 = new StateTransactionRequest("mystate", null, StateOperationType.Delete);
var requests = new List<StateTransactionRequest>(); var requests = new List<StateTransactionRequest>
requests.Add(request1); {
requests.Add(request2); request1,
request2
};
Console.WriteLine("Executing transaction - save state and delete state"); Console.WriteLine("Executing transaction - save state and delete state");
await client.ExecuteStateTransactionAsync(storeName, requests); await client.ExecuteStateTransactionAsync(storeName, requests);
Console.WriteLine("Executed State Transaction!"); Console.WriteLine("Executed State Transaction!");

View File

@ -104,7 +104,6 @@ namespace Dapr.Actors.Builder
// build the proxy generator // build the proxy generator
result.ProxyGenerator = this.CreateProxyGenerator( result.ProxyGenerator = this.CreateProxyGenerator(
proxyInterfaceType, proxyInterfaceType,
methodBodyTypesResultsMap,
result.ProxyActivatorType); result.ProxyActivatorType);
context.Complete(); context.Complete();
@ -236,14 +235,6 @@ namespace Dapr.Actors.Builder
} }
} }
protected ActorProxyGenerator CreateProxyGenerator(
Type proxyInterfaceType,
IDictionary<InterfaceDescription, MethodBodyTypesBuildResult> methodBodyTypesResultsMap,
Type proxyActivatorType)
{
return this.CreateProxyGenerator(proxyInterfaceType, proxyActivatorType);
}
protected ActorProxyGenerator CreateProxyGenerator( protected ActorProxyGenerator CreateProxyGenerator(
Type proxyInterfaceType, Type proxyInterfaceType,
Type proxyActivatorType) Type proxyActivatorType)

View File

@ -16,8 +16,8 @@ namespace Dapr.Actors.Builder
this.AssemblyNamespace = assemblyNamespace; this.AssemblyNamespace = assemblyNamespace;
this.enableDebugging = enableDebugging; this.enableDebugging = enableDebugging;
this.AssemblyBuilder = CodeBuilderUtils.CreateAssemblyBuilder(assemblyName, this.enableDebugging); this.AssemblyBuilder = CodeBuilderUtils.CreateAssemblyBuilder(assemblyName);
this.ModuleBuilder = CodeBuilderUtils.CreateModuleBuilder(this.AssemblyBuilder, assemblyName, this.enableDebugging); this.ModuleBuilder = CodeBuilderUtils.CreateModuleBuilder(this.AssemblyBuilder, assemblyName);
} }
public AssemblyBuilder AssemblyBuilder { get; } public AssemblyBuilder AssemblyBuilder { get; }

View File

@ -33,7 +33,7 @@ namespace Dapr.Actors.Builder
DmAttrIsRequiredPropInfo = dmAttrType.GetProperty("IsRequired"); DmAttrIsRequiredPropInfo = dmAttrType.GetProperty("IsRequired");
} }
public static AssemblyBuilder CreateAssemblyBuilder(string assemblyName, bool saveOnDisk = false) public static AssemblyBuilder CreateAssemblyBuilder(string assemblyName)
{ {
return AssemblyBuilder.DefineDynamicAssembly( return AssemblyBuilder.DefineDynamicAssembly(
new AssemblyName(assemblyName), new AssemblyName(assemblyName),
@ -42,8 +42,7 @@ namespace Dapr.Actors.Builder
public static ModuleBuilder CreateModuleBuilder( public static ModuleBuilder CreateModuleBuilder(
AssemblyBuilder assemblyBuilder, AssemblyBuilder assemblyBuilder,
string moduleName, string moduleName)
bool saveOnDisk = false)
{ {
return assemblyBuilder.DefineDynamicModule(moduleName); return assemblyBuilder.DefineDynamicModule(moduleName);
} }

View File

@ -113,8 +113,7 @@ namespace Dapr.Actors.Builder
LocalBuilder castedObject, LocalBuilder castedObject,
MethodBodyTypes methodBodyTypes) MethodBodyTypes methodBodyTypes)
{ {
LocalBuilder wrappedRequest = null; var wrappedRequest = ilGen.DeclareLocal(typeof(object));
wrappedRequest = ilGen.DeclareLocal(typeof(object));
var getValueMethod = typeof(WrappedMessage).GetProperty("Value").GetGetMethod(); var getValueMethod = typeof(WrappedMessage).GetProperty("Value").GetGetMethod();
ilGen.Emit(OpCodes.Ldarg_3); // request object ilGen.Emit(OpCodes.Ldarg_3); // request object
@ -183,7 +182,6 @@ namespace Dapr.Actors.Builder
elseLabel: elseLable, elseLabel: elseLable,
castedObject: castedObject, castedObject: castedObject,
methodDescription: methodDescription, methodDescription: methodDescription,
interfaceName: interfaceDescription.InterfaceType.FullName,
methodBodyTypes: methodBodyTypesBuildResult.MethodBodyTypesMap[methodDescription.Name]); methodBodyTypes: methodBodyTypesBuildResult.MethodBodyTypesMap[methodDescription.Name]);
ilGen.MarkLabel(elseLable); ilGen.MarkLabel(elseLable);
@ -197,7 +195,6 @@ namespace Dapr.Actors.Builder
Label elseLabel, Label elseLabel,
LocalBuilder castedObject, LocalBuilder castedObject,
MethodDescription methodDescription, MethodDescription methodDescription,
string interfaceName,
MethodBodyTypes methodBodyTypes) MethodBodyTypes methodBodyTypes)
{ {
ilGen.Emit(OpCodes.Ldarg_1); ilGen.Emit(OpCodes.Ldarg_1);

View File

@ -205,9 +205,8 @@ namespace Dapr.Actors.Client
var responseMsg = await this.actorRemotingClient.InvokeAsync( var responseMsg = await this.actorRemotingClient.InvokeAsync(
new ActorRequestMessage( new ActorRequestMessage(
headers, headers,
requestMsgBodyValue), requestMsgBodyValue),
methodName,
cancellationToken); cancellationToken);
return responseMsg?.GetBody(); return responseMsg?.GetBody();

View File

@ -42,10 +42,11 @@ namespace Dapr.Actors.Communication
{ {
return null; return null;
} }
else if (obj is IActorReference && typeof(IActor).IsAssignableFrom(targetType) && else if (obj is IActorReference reference &&
typeof(IActor).IsAssignableFrom(targetType) &&
!typeof(IActorReference).IsAssignableFrom(targetType)) !typeof(IActorReference).IsAssignableFrom(targetType))
{ {
return ((IActorReference)obj).Bind(targetType); return reference.Bind(targetType);
} }
return obj; return obj;

View File

@ -29,7 +29,7 @@ namespace Dapr.Actors.Communication
} }
} }
public ActorMethodDispatcherBase GetDispatcher(int interfaceId, int methodId) public ActorMethodDispatcherBase GetDispatcher(int interfaceId)
{ {
if (!this.map.TryGetValue(interfaceId, out var methodDispatcher)) if (!this.map.TryGetValue(interfaceId, out var methodDispatcher))
{ {

View File

@ -34,7 +34,6 @@ namespace Dapr.Actors.Communication.Client
public async Task<IActorResponseMessage> InvokeAsync( public async Task<IActorResponseMessage> InvokeAsync(
IActorRequestMessage remotingRequestMessage, IActorRequestMessage remotingRequestMessage,
string methodName,
CancellationToken cancellationToken) CancellationToken cancellationToken)
{ {
return await this.daprInteractor.InvokeActorMethodWithRemotingAsync(this.serializersManager, remotingRequestMessage, cancellationToken); return await this.daprInteractor.InvokeActorMethodWithRemotingAsync(this.serializersManager, remotingRequestMessage, cancellationToken);

View File

@ -330,15 +330,6 @@ namespace Dapr.Actors
} }
} }
private static ActorMessageSerializersManager IntializeSerializationManager(
IActorMessageBodySerializationProvider serializationProvider)
{
// TODO serializer settings
return new ActorMessageSerializersManager(
serializationProvider,
new ActorMessageHeaderSerializer());
}
/// <summary> /// <summary>
/// Sends an HTTP get request to cluster http gateway. /// Sends an HTTP get request to cluster http gateway.
/// </summary> /// </summary>

View File

@ -266,7 +266,7 @@ namespace Dapr.Actors.Runtime
} }
var timerInfo = new TimerInfo(callback, callbackParams, dueTime, period); var timerInfo = new TimerInfo(callback, callbackParams, dueTime, period);
var actorTimer = new ActorTimer(this, timerName, timerInfo); var actorTimer = new ActorTimer(timerName, timerInfo);
var serializedTimer = JsonSerializer.Serialize<TimerInfo>(timerInfo); var serializedTimer = JsonSerializer.Serialize<TimerInfo>(timerInfo);
await ActorRuntime.DaprInteractor.RegisterTimerAsync(this.actorTypeName, this.Id.ToString(), timerName, serializedTimer); await ActorRuntime.DaprInteractor.RegisterTimerAsync(this.actorTypeName, this.Id.ToString(), timerName, serializedTimer);

View File

@ -83,7 +83,7 @@ namespace Dapr.Actors.Runtime
} }
// Call the method on the method dispatcher using the Func below. // Call the method on the method dispatcher using the Func below.
var methodDispatcher = this.methodDispatcherMap.GetDispatcher(actorMessageHeader.InterfaceId, actorMessageHeader.MethodId); var methodDispatcher = this.methodDispatcherMap.GetDispatcher(actorMessageHeader.InterfaceId);
// Create a Func to be invoked by common method. // Create a Func to be invoked by common method.
async Task<Tuple<string, byte[]>> RequestFunc(Actor actor, CancellationToken ct) async Task<Tuple<string, byte[]>> RequestFunc(Actor actor, CancellationToken ct)
@ -189,7 +189,7 @@ namespace Dapr.Actors.Runtime
} }
} }
internal async Task FireTimerAsync(ActorId actorId, string timerName, Stream requestBodyStream, CancellationToken cancellationToken = default) internal async Task FireTimerAsync(ActorId actorId, Stream requestBodyStream, CancellationToken cancellationToken = default)
{ {
var timerData = await JsonSerializer.DeserializeAsync<TimerInfo>(requestBodyStream); var timerData = await JsonSerializer.DeserializeAsync<TimerInfo>(requestBodyStream);

View File

@ -33,10 +33,7 @@ namespace Dapr.Actors.Runtime
{ {
var actorTypeInfo = ActorTypeInformation.Get(typeof(TActor)); var actorTypeInfo = ActorTypeInformation.Get(typeof(TActor));
var registration = new ActorRegistration(actorTypeInfo); var registration = new ActorRegistration(actorTypeInfo);
if (configure != null) configure?.Invoke(registration);
{
configure(registration);
}
this.Add(registration); this.Add(registration);
} }
} }

View File

@ -130,7 +130,7 @@ namespace Dapr.Actors.Runtime
{ {
using(this.logger.BeginScope("ActorType: {ActorType}, ActorId: {ActorId}, TimerName: {Timer}", actorTypeName, actorId, timerName)) using(this.logger.BeginScope("ActorType: {ActorType}, ActorId: {ActorId}, TimerName: {Timer}", actorTypeName, actorId, timerName))
{ {
return GetActorManager(actorTypeName).FireTimerAsync(new ActorId(actorId), timerName, requestBodyStream, cancellationToken); return GetActorManager(actorTypeName).FireTimerAsync(new ActorId(actorId), requestBodyStream, cancellationToken);
} }
} }

View File

@ -16,17 +16,13 @@ namespace Dapr.Actors.Runtime
/// </summary> /// </summary>
public class ActorTimer public class ActorTimer
{ {
private readonly Actor owner;
/// <summary> /// <summary>
/// The constructor /// The constructor
/// </summary> /// </summary>
public ActorTimer( public ActorTimer(
Actor owner,
string timerName, string timerName,
TimerInfo timerInfo) TimerInfo timerInfo)
{ {
this.owner = owner;
this.Name = timerName; this.Name = timerName;
this.TimerInfo = timerInfo; this.TimerInfo = timerInfo;
} }

View File

@ -36,13 +36,13 @@ namespace Dapr.Actors.Runtime
var days = hours / 24; var days = hours / 24;
hours %= 24; hours %= 24;
var minutesSpan = spanOfValue.Slice(hIndex + 1, mIndex - (hIndex + 1)); var minutesSpan = spanOfValue[(hIndex + 1)..mIndex];
var minutes = int.Parse(minutesSpan); var minutes = int.Parse(minutesSpan);
var secondsSpan = spanOfValue.Slice(mIndex + 1, sIndex - (mIndex + 1)); var secondsSpan = spanOfValue[(mIndex + 1)..sIndex];
var seconds = int.Parse(secondsSpan); var seconds = int.Parse(secondsSpan);
var millisecondsSpan = spanOfValue.Slice(sIndex + 1, msIndex - (sIndex + 1)); var millisecondsSpan = spanOfValue[(sIndex + 1)..msIndex];
var milliseconds = int.Parse(millisecondsSpan); var milliseconds = int.Parse(millisecondsSpan);
return new TimeSpan(days, hours, minutes, seconds, milliseconds); return new TimeSpan(days, hours, minutes, seconds, milliseconds);

View File

@ -32,7 +32,7 @@ namespace Dapr.Actors.Runtime
if (stringResult.Length != 0) if (stringResult.Length != 0)
{ {
T typedResult = default; T typedResult;
// perform default json de-serialization if custom serializer was not provided. // perform default json de-serialization if custom serializer was not provided.
if (this.actorStateSerializer != null) if (this.actorStateSerializer != null)

View File

@ -15,7 +15,7 @@ namespace Dapr.Client
/// </summary> /// </summary>
public sealed class DaprClientBuilder public sealed class DaprClientBuilder
{ {
private const string defaultDaprGrpcPort = "50001"; private const string DefaultDaprGrpcPort = "50001";
private string daprEndpoint; private string daprEndpoint;
private JsonSerializerOptions jsonSerializerOptions; private JsonSerializerOptions jsonSerializerOptions;
private GrpcChannelOptions gRPCChannelOptions; private GrpcChannelOptions gRPCChannelOptions;
@ -35,7 +35,7 @@ namespace Dapr.Client
/// </summary> /// </summary>
public DaprClientBuilder() public DaprClientBuilder()
{ {
var daprGrpcPort = Environment.GetEnvironmentVariable("DAPR_GRPC_PORT") ?? defaultDaprGrpcPort; var daprGrpcPort = Environment.GetEnvironmentVariable("DAPR_GRPC_PORT") ?? DefaultDaprGrpcPort;
this.daprEndpoint = $"http://127.0.0.1:{daprGrpcPort}"; this.daprEndpoint = $"http://127.0.0.1:{daprGrpcPort}";
this.jsonSerializerOptions = new JsonSerializerOptions this.jsonSerializerOptions = new JsonSerializerOptions
{ {
@ -79,7 +79,7 @@ namespace Dapr.Client
// Set correct switch to make insecure gRPC service calls. This switch must be set before creating the GrpcChannel. // Set correct switch to make insecure gRPC service calls. This switch must be set before creating the GrpcChannel.
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
} }
this.gRPCChannelOptions = this.gRPCChannelOptions ?? new GrpcChannelOptions(){ ThrowOperationCanceledOnCancellation = true }; this.gRPCChannelOptions ??= new GrpcChannelOptions(){ ThrowOperationCanceledOnCancellation = true };
var channel = GrpcChannel.ForAddress(this.daprEndpoint, this.gRPCChannelOptions); var channel = GrpcChannel.ForAddress(this.daprEndpoint, this.gRPCChannelOptions);
var client = new Autogenerated.Dapr.DaprClient(channel); var client = new Autogenerated.Dapr.DaprClient(channel);
return new DaprClientGrpc(client, this.jsonSerializerOptions); return new DaprClientGrpc(client, this.jsonSerializerOptions);

View File

@ -290,7 +290,7 @@ namespace Dapr.Client
var getBulkStateEnvelope = new Autogenerated.GetBulkStateRequest() var getBulkStateEnvelope = new Autogenerated.GetBulkStateRequest()
{ {
StoreName = storeName, StoreName = storeName,
Parallelism = parallelism ?? default(int) Parallelism = parallelism ?? default
}; };
getBulkStateEnvelope.Keys.AddRange(keys); getBulkStateEnvelope.Keys.AddRange(keys);
@ -317,9 +317,9 @@ namespace Dapr.Client
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
var protoHTTPExtension = new Autogenerated.HTTPExtension(); var protoHTTPExtension = new Autogenerated.HTTPExtension();
var contentType = "";
Metadata headers = null; Metadata headers = null;
string contentType;
if (httpOptions != null) if (httpOptions != null)
{ {
protoHTTPExtension.Verb = ConvertHTTPVerb(httpOptions.Method); protoHTTPExtension.Verb = ConvertHTTPVerb(httpOptions.Method);
@ -453,10 +453,8 @@ namespace Dapr.Client
var rpcError = detail.Unpack<Google.Rpc.ErrorInfo>(); var rpcError = detail.Unpack<Google.Rpc.ErrorInfo>();
var grpcStatusCode = (StatusCode)status.Code; var grpcStatusCode = (StatusCode)status.Code;
string innerHttpErrorCode = null; rpcError.Metadata.TryGetValue(DaprErrorInfoHttpCodeMetadata, out var innerHttpErrorCode);
string innerHttpErrorMessage = null; rpcError.Metadata.TryGetValue(DaprErrorInfoHttpErrorMetadata, out var innerHttpErrorMessage);
rpcError.Metadata.TryGetValue(DaprErrorInfoHttpCodeMetadata, out innerHttpErrorCode);
rpcError.Metadata.TryGetValue(DaprErrorInfoHttpErrorMetadata, out innerHttpErrorMessage);
if(innerHttpErrorCode != null || innerHttpErrorMessage != null) if(innerHttpErrorCode != null || innerHttpErrorMessage != null)
{ {
// Response returned by Http server // Response returned by Http server
@ -476,11 +474,6 @@ namespace Dapr.Client
} }
} }
private bool IsResponseFromHttpCallee(Dictionary<string,byte[]> headers)
{
return headers.ContainsKey(DaprHttpStatusHeader);
}
#endregion #endregion
#region State Apis #region State Apis
@ -684,10 +677,11 @@ namespace Dapr.Client
foreach (var state in states) foreach (var state in states)
{ {
var stateOperation = new Autogenerated.TransactionalStateOperation(); var stateOperation = new Autogenerated.TransactionalStateOperation
{
stateOperation.OperationType = state.OperationType.ToString().ToLower(); OperationType = state.OperationType.ToString().ToLower(),
stateOperation.Request = ToAutogeneratedStateItem(state); Request = ToAutogeneratedStateItem(state)
};
executeStateTransactionRequestEnvelope.Operations.Add(stateOperation); executeStateTransactionRequestEnvelope.Operations.Add(stateOperation);
@ -706,8 +700,10 @@ namespace Dapr.Client
private Autogenerated.StateItem ToAutogeneratedStateItem(StateTransactionRequest state) private Autogenerated.StateItem ToAutogeneratedStateItem(StateTransactionRequest state)
{ {
var stateOperation = new Autogenerated.StateItem(); var stateOperation = new Autogenerated.StateItem
stateOperation.Key = state.Key; {
Key = state.Key
};
if (state.Value != null) if (state.Value != null)
{ {

View File

@ -21,10 +21,6 @@ namespace Dapr.Extensions.Configuration.DaprSecretStore
private readonly IEnumerable<DaprSecretDescriptor> secretDescriptors; private readonly IEnumerable<DaprSecretDescriptor> secretDescriptors;
const string localhost = "127.0.0.1";
static string daprPort => Environment.GetEnvironmentVariable("DAPR_GRPC_PORT") ?? "50001";
private readonly DaprClient client; private readonly DaprClient client;
/// <summary> /// <summary>
@ -72,4 +68,4 @@ namespace Dapr.Extensions.Configuration.DaprSecretStore
Data = data; Data = data;
} }
} }
} }

View File

@ -57,14 +57,14 @@ namespace Dapr.Actors.Test
return Task.CompletedTask; return Task.CompletedTask;
} }
public void SaveTestState() public Task SaveTestState()
{ {
this.SaveStateAsync().GetAwaiter().GetResult(); return this.SaveStateAsync();
} }
public void ResetTestStateAsync() public Task ResetTestStateAsync()
{ {
this.ResetStateAsync().GetAwaiter().GetResult(); return this.ResetStateAsync();
} }
public void TimerCallbackNonTaskReturnType() public void TimerCallbackNonTaskReturnType()

View File

@ -7,22 +7,21 @@ namespace Dapr.Actors.Test
{ {
using System; using System;
using System.Buffers; using System.Buffers;
using System.Linq;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks; using System.Threading.Tasks;
using Dapr.Actors; using Dapr.Actors;
using Dapr.Actors.Runtime; using Dapr.Actors.Runtime;
using Xunit;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Linq; using Xunit;
using System.Reflection;
public sealed class ActorRuntimeTests public sealed class ActorRuntimeTests
{ {
private const string RenamedActorTypeName = "MyRenamedActor"; private const string RenamedActorTypeName = "MyRenamedActor";
private ILoggerFactory loggerFactory = new LoggerFactory(); private readonly ILoggerFactory loggerFactory = new LoggerFactory();
private ActorActivatorFactory activatorFactory = new DefaultActorActivatorFactory(); private readonly ActorActivatorFactory activatorFactory = new DefaultActorActivatorFactory();
private interface ITestActor : IActor private interface ITestActor : IActor
{ {
@ -97,7 +96,7 @@ namespace Dapr.Actors.Test
} }
[Fact] [Fact]
public void TestActorSettings() public async Task TestActorSettings()
{ {
var actorType = typeof(TestActor); var actorType = typeof(TestActor);
@ -113,7 +112,7 @@ namespace Dapr.Actors.Test
Assert.Contains(actorType.Name, runtime.RegisteredActors.Select(a => a.Type.ActorTypeName), StringComparer.InvariantCulture); Assert.Contains(actorType.Name, runtime.RegisteredActors.Select(a => a.Type.ActorTypeName), StringComparer.InvariantCulture);
ArrayBufferWriter<byte> writer = new ArrayBufferWriter<byte>(); ArrayBufferWriter<byte> writer = new ArrayBufferWriter<byte>();
runtime.SerializeSettingsAndRegisteredTypes(writer).GetAwaiter().GetResult(); await runtime.SerializeSettingsAndRegisteredTypes(writer);
// read back the serialized json // read back the serialized json
var array = writer.WrittenSpan.ToArray(); var array = writer.WrittenSpan.ToArray();

View File

@ -26,22 +26,22 @@ namespace Dapr.Actors.Test.Runtime
} }
[Fact] [Fact]
public void TestSaveState() public async Task TestSaveState()
{ {
var mockStateManager = new Mock<IActorStateManager>(); var mockStateManager = new Mock<IActorStateManager>();
mockStateManager.Setup(manager => manager.SaveStateAsync(It.IsAny<CancellationToken>())); mockStateManager.Setup(manager => manager.SaveStateAsync(It.IsAny<CancellationToken>()));
var testDemoActor = this.CreateTestDemoActor(mockStateManager.Object); var testDemoActor = this.CreateTestDemoActor(mockStateManager.Object);
testDemoActor.SaveTestState(); await testDemoActor.SaveTestState();
mockStateManager.Verify(manager => manager.SaveStateAsync(It.IsAny<CancellationToken>()), Times.Once); mockStateManager.Verify(manager => manager.SaveStateAsync(It.IsAny<CancellationToken>()), Times.Once);
} }
[Fact] [Fact]
public void TestResetStateAsync() public async Task TestResetStateAsync()
{ {
var mockStateManager = new Mock<IActorStateManager>(); var mockStateManager = new Mock<IActorStateManager>();
mockStateManager.Setup(manager => manager.ClearCacheAsync(It.IsAny<CancellationToken>())); mockStateManager.Setup(manager => manager.ClearCacheAsync(It.IsAny<CancellationToken>()));
var testDemoActor = this.CreateTestDemoActor(mockStateManager.Object); var testDemoActor = this.CreateTestDemoActor(mockStateManager.Object);
testDemoActor.ResetTestStateAsync(); await testDemoActor.ResetTestStateAsync();
mockStateManager.Verify(manager => manager.ClearCacheAsync(It.IsAny<CancellationToken>()), Times.Once); mockStateManager.Verify(manager => manager.ClearCacheAsync(It.IsAny<CancellationToken>()), Times.Once);
} }

View File

@ -17,7 +17,7 @@ namespace Dapr
internal class StateTestClient : DaprClientGrpc internal class StateTestClient : DaprClientGrpc
{ {
public Dictionary<string, object> State { get; } = new Dictionary<string, object>(); public Dictionary<string, object> State { get; } = new Dictionary<string, object>();
static GrpcChannel channel = GrpcChannel.ForAddress("http://localhost"); private static readonly GrpcChannel channel = GrpcChannel.ForAddress("http://localhost");
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="DaprClientGrpc"/> class. /// Initializes a new instance of the <see cref="DaprClientGrpc"/> class.

View File

@ -110,9 +110,11 @@ namespace Dapr.AspNetCore.Test
private async Task SendResponseWithState<T>(T state, TestHttpClient.Entry entry) private async Task SendResponseWithState<T>(T state, TestHttpClient.Entry entry)
{ {
var stateData = TypeConverters.ToJsonByteString(state); var stateData = TypeConverters.ToJsonByteString(state);
var stateResponse = new GetStateResponse(); var stateResponse = new GetStateResponse
stateResponse.Data = stateData; {
stateResponse.Etag = "test"; Data = stateData,
Etag = "test",
};
var streamContent = await GrpcUtils.CreateResponseContent(stateResponse); var streamContent = await GrpcUtils.CreateResponseContent(stateResponse);
var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent); var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);

View File

@ -185,8 +185,10 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
@ -242,8 +244,10 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
@ -272,8 +276,10 @@ namespace Dapr.Client.Test
Request request = new Request() { RequestParameter = "Hello " }; Request request = new Request() { RequestParameter = "Hello " };
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
@ -292,8 +298,10 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
@ -419,9 +427,11 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -450,9 +460,11 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -482,9 +494,11 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -547,10 +561,12 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
invokeResponse.ContentType = Constants.ContentTypeApplicationJson; Data = TypeConverters.ToAny(data),
ContentType = Constants.ContentTypeApplicationJson
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -636,9 +652,11 @@ namespace Dapr.Client.Test
var responseBody = new Response() { Name = "Look, I was invoked!" }; var responseBody = new Response() { Name = "Look, I was invoked!" };
// var dataBytes = new byte[]{1,2,3}; // var dataBytes = new byte[]{1,2,3};
var responseBytes = JsonSerializer.SerializeToUtf8Bytes(responseBody); var responseBytes = JsonSerializer.SerializeToUtf8Bytes(responseBody);
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = new Any { Value = ByteString.CopyFrom(responseBytes), TypeUrl = typeof(byte[]).FullName }; {
Data = new Any { Value = ByteString.CopyFrom(responseBytes), TypeUrl = typeof(byte[]).FullName }
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -687,9 +705,11 @@ namespace Dapr.Client.Test
var client = new MockClient(); var client = new MockClient();
var responseBody = new Response() { Name = "Look, I was invoked!" }; var responseBody = new Response() { Name = "Look, I was invoked!" };
var responseBytes = JsonSerializer.SerializeToUtf8Bytes(responseBody); var responseBytes = JsonSerializer.SerializeToUtf8Bytes(responseBody);
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = new Any { Value = ByteString.CopyFrom(responseBytes), TypeUrl = typeof(byte[]).FullName }; {
Data = new Any { Value = ByteString.CopyFrom(responseBytes), TypeUrl = typeof(byte[]).FullName }
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -739,9 +759,11 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -805,9 +827,11 @@ namespace Dapr.Client.Test
{ {
var client = new MockClient(); var client = new MockClient();
var data = new Response() { Name = "Look, I was invoked!" }; var data = new Response() { Name = "Look, I was invoked!" };
var invokeResponse = new InvokeResponse(); var invokeResponse = new InvokeResponse
invokeResponse.Data = TypeConverters.ToAny(data); {
Data = TypeConverters.ToAny(data)
};
var response = var response =
client.Call<InvokeResponse>() client.Call<InvokeResponse>()
.SetResponse(invokeResponse) .SetResponse(invokeResponse)
@ -952,25 +976,16 @@ namespace Dapr.Client.Test
private async Task SendResponse<T>(T data, TestHttpClient.Entry entry, JsonSerializerOptions options = null) private async Task SendResponse<T>(T data, TestHttpClient.Entry entry, JsonSerializerOptions options = null)
{ {
var dataAny = TypeConverters.ToAny(data, options); var dataAny = TypeConverters.ToAny(data, options);
var dataResponse = new InvokeResponse(); var dataResponse = new InvokeResponse
dataResponse.Data = dataAny; {
Data = dataAny
};
var streamContent = await GrpcUtils.CreateResponseContent(dataResponse); var streamContent = await GrpcUtils.CreateResponseContent(dataResponse);
var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent); var response = GrpcUtils.CreateResponse(HttpStatusCode.OK, streamContent);
entry.Completion.SetResult(response); entry.Completion.SetResult(response);
} }
private async void SendResponseFromHttpServer<T>(T data, TestHttpClient.Entry entry, JsonSerializerOptions options = null)
{
var dataAny = TypeConverters.ToAny(data, options);
var dataResponse = new InvokeResponse();
dataResponse.Data = dataAny;
var streamContent = await GrpcUtils.CreateResponseContent(dataResponse);
var response = GrpcUtils.CreateResponseFromHttpServer(HttpStatusCode.OK, streamContent);
entry.Completion.SetResult(response);
}
private class Request private class Request
{ {
public string RequestParameter { get; set; } public string RequestParameter { get; set; }

View File

@ -26,9 +26,11 @@ namespace Dapr.Client.Test
.UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient })
.Build(); .Build();
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var invokeRequest = new InvokeRequest() { RequestParameter = "Hello " }; var invokeRequest = new InvokeRequest() { RequestParameter = "Hello " };
var task = daprClient.InvokeBindingAsync<InvokeRequest>("test", "create", invokeRequest, metadata); var task = daprClient.InvokeBindingAsync<InvokeRequest>("test", "create", invokeRequest, metadata);
@ -59,9 +61,11 @@ namespace Dapr.Client.Test
CancellationToken ct = ctSource.Token; CancellationToken ct = ctSource.Token;
ctSource.Cancel(); ctSource.Cancel();
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var invokeRequest = new InvokeRequest() { RequestParameter = "Hello " }; var invokeRequest = new InvokeRequest() { RequestParameter = "Hello " };
var task = daprClient.InvokeBindingAsync<InvokeRequest>("test", "create", invokeRequest, metadata, ct); var task = daprClient.InvokeBindingAsync<InvokeRequest>("test", "create", invokeRequest, metadata, ct);

View File

@ -30,9 +30,9 @@ namespace Dapr.Client
public class InvokeApiCallBuilder<TResponse> public class InvokeApiCallBuilder<TResponse>
{ {
private TResponse response; private TResponse response;
private Metadata headers; private readonly Metadata headers;
private Status status; private Status status;
private Metadata trailers; private readonly Metadata trailers;
public InvokeApiCallBuilder() public InvokeApiCallBuilder()
{ {
@ -75,4 +75,4 @@ namespace Dapr.Client
} }
} }
} }
} }

View File

@ -26,9 +26,11 @@ namespace Dapr.Client.Test
.UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient })
.Build(); .Build();
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var task = daprClient.GetSecretAsync("testStore", "test_key", metadata); var task = daprClient.GetSecretAsync("testStore", "test_key", metadata);
// Get Request and validate // Get Request and validate
@ -52,9 +54,11 @@ namespace Dapr.Client.Test
.UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient })
.Build(); .Build();
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var task = daprClient.GetSecretAsync("testStore", "test_key", metadata); var task = daprClient.GetSecretAsync("testStore", "test_key", metadata);
// Get Request and validate // Get Request and validate
@ -69,8 +73,10 @@ namespace Dapr.Client.Test
request.Metadata["key2"].Should().Be("value2"); request.Metadata["key2"].Should().Be("value2");
// Create Response & Respond // Create Response & Respond
var secrets = new Dictionary<string, string>(); var secrets = new Dictionary<string, string>
secrets.Add("redis_secret", "Guess_Redis"); {
{ "redis_secret", "Guess_Redis" }
};
await SendResponseWithSecrets(secrets, entry); await SendResponseWithSecrets(secrets, entry);
// Get response and validate // Get response and validate
@ -89,9 +95,11 @@ namespace Dapr.Client.Test
.UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient }) .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient })
.Build(); .Build();
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var task = daprClient.GetSecretAsync("testStore", "test_key", metadata); var task = daprClient.GetSecretAsync("testStore", "test_key", metadata);
// Get Request and validate // Get Request and validate
@ -106,9 +114,11 @@ namespace Dapr.Client.Test
request.Metadata["key2"].Should().Be("value2"); request.Metadata["key2"].Should().Be("value2");
// Create Response & Respond // Create Response & Respond
var secrets = new Dictionary<string, string>(); var secrets = new Dictionary<string, string>
secrets.Add("redis_secret", "Guess_Redis"); {
secrets.Add("kafka_secret", "Guess_Kafka"); { "redis_secret", "Guess_Redis" },
{ "kafka_secret", "Guess_Kafka" }
};
await SendResponseWithSecrets(secrets, entry); await SendResponseWithSecrets(secrets, entry);
// Get response and validate // Get response and validate
@ -129,9 +139,11 @@ namespace Dapr.Client.Test
.UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient, ThrowOperationCanceledOnCancellation = true }) .UseGrpcChannelOptions(new GrpcChannelOptions { HttpClient = httpClient, ThrowOperationCanceledOnCancellation = true })
.Build(); .Build();
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var ctSource = new CancellationTokenSource(); var ctSource = new CancellationTokenSource();
CancellationToken ct = ctSource.Token; CancellationToken ct = ctSource.Token;

View File

@ -275,8 +275,10 @@ namespace Dapr.Client.Test
{ {
{"a", "b" } {"a", "b" }
}; };
var options1 = new StateOptions(); var options1 = new StateOptions
options1.Concurrency = ConcurrencyMode.LastWrite; {
Concurrency = ConcurrencyMode.LastWrite
};
var state1 = new StateTransactionRequest("stateKey1", JsonSerializer.SerializeToUtf8Bytes(stateValue1), StateOperationType.Upsert, "testEtag", metadata1, options1); var state1 = new StateTransactionRequest("stateKey1", JsonSerializer.SerializeToUtf8Bytes(stateValue1), StateOperationType.Upsert, "testEtag", metadata1, options1);
var stateValue2 = 100; var stateValue2 = 100;
@ -285,10 +287,12 @@ namespace Dapr.Client.Test
var stateValue3 = "teststring"; var stateValue3 = "teststring";
var state3 = new StateTransactionRequest("stateKey3", JsonSerializer.SerializeToUtf8Bytes(stateValue3), StateOperationType.Upsert); var state3 = new StateTransactionRequest("stateKey3", JsonSerializer.SerializeToUtf8Bytes(stateValue3), StateOperationType.Upsert);
var states = new List<StateTransactionRequest>(); var states = new List<StateTransactionRequest>
states.Add(state1); {
states.Add(state2); state1,
states.Add(state3); state2,
state3
};
var task = daprClient.ExecuteStateTransactionAsync("testStore", states); var task = daprClient.ExecuteStateTransactionAsync("testStore", states);
@ -337,8 +341,10 @@ namespace Dapr.Client.Test
var widget1 = new Widget() { Size = "small", Color = "yellow", }; var widget1 = new Widget() { Size = "small", Color = "yellow", };
var state1 = new StateTransactionRequest("stateKey1", JsonSerializer.SerializeToUtf8Bytes(widget1), StateOperationType.Upsert); var state1 = new StateTransactionRequest("stateKey1", JsonSerializer.SerializeToUtf8Bytes(widget1), StateOperationType.Upsert);
var states = new List<StateTransactionRequest>(); var states = new List<StateTransactionRequest>
states.Add(state1); {
state1
};
var task = daprClient.ExecuteStateTransactionAsync("testStore", states); var task = daprClient.ExecuteStateTransactionAsync("testStore", states);
// Create Response & Respond // Create Response & Respond
@ -363,8 +369,10 @@ namespace Dapr.Client.Test
ctSource.Cancel(); ctSource.Cancel();
var operation = new StateTransactionRequest("test", null, StateOperationType.Delete); var operation = new StateTransactionRequest("test", null, StateOperationType.Delete);
var operations = new List<StateTransactionRequest>(); var operations = new List<StateTransactionRequest>
operations.Add(operation); {
operation
};
await FluentActions.Awaiting(async () => await daprClient.ExecuteStateTransactionAsync("testStore", operations, new Dictionary<string, string>(), cancellationToken: ct)) await FluentActions.Awaiting(async () => await daprClient.ExecuteStateTransactionAsync("testStore", operations, new Dictionary<string, string>(), cancellationToken: ct))
.Should().ThrowAsync<OperationCanceledException>(); .Should().ThrowAsync<OperationCanceledException>();
} }
@ -558,9 +566,11 @@ namespace Dapr.Client.Test
Consistency = consistencyMode Consistency = consistencyMode
}; };
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var task = daprClient.SaveStateAsync("testStore", "test", widget, stateOptions, metadata); var task = daprClient.SaveStateAsync("testStore", "test", widget, stateOptions, metadata);
// Get Request and validate // Get Request and validate
@ -608,9 +618,11 @@ namespace Dapr.Client.Test
Consistency = consistencyMode Consistency = consistencyMode
}; };
var metadata = new Dictionary<string, string>(); var metadata = new Dictionary<string, string>
metadata.Add("key1", "value1"); {
metadata.Add("key2", "value2"); { "key1", "value1" },
{ "key2", "value2" }
};
var task = daprClient.TrySaveStateAsync("testStore", "test", widget, "Test_Etag", stateOptions, metadata); var task = daprClient.TrySaveStateAsync("testStore", "test", widget, "Test_Etag", stateOptions, metadata);
// Get Request and validate // Get Request and validate
@ -707,8 +719,10 @@ namespace Dapr.Client.Test
private async Task SendResponseWithState<T>(T state, TestHttpClient.Entry entry, string etag = null) private async Task SendResponseWithState<T>(T state, TestHttpClient.Entry entry, string etag = null)
{ {
var stateDate = TypeConverters.ToJsonByteString(state); var stateDate = TypeConverters.ToJsonByteString(state);
var stateResponse = new Autogenerated.GetStateResponse(); var stateResponse = new Autogenerated.GetStateResponse
stateResponse.Data = stateDate; {
Data = stateDate
};
if (etag != null) if (etag != null)
{ {