public async Task SimpleFailScenario() { var provider = new ServiceCollection() .AddKeySmith(ConfigurationHelper.GetConfiguration()) .BuildServiceProvider(); var service = provider.GetRequiredService <IMemoLockService>(); var root = Guid.NewGuid().ToString().Substring(0, 8); var memoKey = new MemoKey(root, "name", TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2)); var db = provider.GetRequiredService <ConnectionMultiplexer>().GetDatabase(); await ResetKeys(db, memoKey); try { try { await service.MemoLockAsync(memoKey, c => throw new NullReferenceException("oups"), CancellationToken.None); throw new Exception("Nothing was thrown"); } catch (NullReferenceException) { } catch (GenerationException)// we actually get it from redis before we had time to clean the setup. { } try { RedisValue answer = "answer"; await service.MemoLockAsync(memoKey, c => Task.FromResult(answer), CancellationToken.None); throw new Exception("Nothing was thrown"); } catch (GenerationException) { } Assert.False(await db.KeyExistsAsync(memoKey.GetValueKey())); Assert.True(await db.KeyExistsAsync(memoKey.GetErrorKey())); } finally { await ResetKeys(db, memoKey); } }
public async Task SubscribeTests() { var connection = ConfigurationHelper.GetNewConnection(); var library = new MemoScriptLibrary(connection); var db = connection.GetDatabase(); var timeout = 500; var root = Guid.NewGuid().ToString().Substring(0, 8); var key = new MemoKey(root, "key", TimeSpan.FromMilliseconds(timeout), TimeSpan.FromSeconds(1)); var result = false; await library.SubscribeAsync(key.GetSubscribtionChannel(), (c, v) => result = true); await db.PublishAsync(key.GetValueChannel(), "identifier"); await Task.Delay(30); Assert.True(result); }
public ByteBuffer ToBuffer(ByteBuffer buffer = null) { buffer = buffer ?? new ByteBuffer(ByteBuffer.LITTLE_ENDING); MemoKey.ToBuffer(buffer); VotingAccount.ToBuffer(buffer); buffer.WriteUInt16(NumWitness); buffer.WriteUInt16(NumCommittee); buffer.WriteArray(Votes, (b, item) => { if (!item.IsNull()) { item.ToBuffer(b); } }, VoteId.Compare); buffer.WriteArray(Extensions, (b, item) => { if (!item.IsNull()) { ; } }); // todo return(buffer); }
private Task ResetKeys(IDatabase db, MemoKey memoKey) { var key = memoKey.GetLockKey(); return(db.KeyDeleteAsync(new RedisKey[] { memoKey.GetErrorKey(), memoKey.GetValueKey(), key.GetLockKey(), key.GetLockQueueKey(), key.GetLockQueueSetKey() })); }