public async Task PublishTests(object value) { var connection = ConfigurationHelper.GetNewConnection(); var library = new MemoScriptLibrary(connection); var db = connection.GetDatabase(); var root = Guid.NewGuid().ToString().Substring(0, 8); var key = new MemoKey(root, "key", TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1)); var parameters = new MemoSetValueParameters(key, RedisValue.Unbox(value)); try { await ResetKeys(db, parameters); var message = RedisValue.Null; await connection.GetSubscriber().SubscribeAsync(parameters.MemoChannelKey, (c, v) => message = v); await library.PublishAsync(parameters); await Task.Delay(500); var expectedValue = value == null ? RedisValue.EmptyString : RedisValue.Unbox(value); Assert.Equal(expectedValue, message); Assert.Equal(expectedValue, await db.StringGetAsync(parameters.MemoKey)); } finally { await ResetKeys(db, parameters); } }
private Task ResetKeys(IDatabase db, MemoSetValueParameters parameters) => db.KeyDeleteAsync(new RedisKey[] { parameters.MemoKey, parameters.MemoChannelKey });
public async Task PublishAsync(MemoSetValueParameters parameters) => await(await SetAndPublish.Value.ConfigureAwait(false)) .EvaluateAsync(_connectionMultiplexer.GetDatabase(), parameters, flags: CommandFlags.FireAndForget).ConfigureAwait(false);