public override async Task <OpResponse> ProcessRequest(RequestOp request) { RequestCount += 1; object?result = null; var co = classOrigins[request.Type]; switch (request.Verb) { case RequestVerb.Query: result = await co.Query(request.Criteria, request.Key !); break; case RequestVerb.Get: result = await co.Get(request.Id); break; default: throw new NotImplementedException(); } return(new OpResponse( request, NowMs, true, true, NowMs, result )); }
public override RequestOp ToRequestOp() { TxnRequest txn = new TxnRequest(); if (cmps != null) { foreach (Cmp <object> cmp in cmps) { txn.Compare.Add(cmp.ToCompare()); } } if (thenOps != null) { foreach (Op thenOp in thenOps) { txn.Success.Add(thenOp.ToRequestOp()); } } if (elseOps != null) { foreach (Op elseOp in elseOps) { txn.Failure.Add(elseOp.ToRequestOp()); } } RequestOp op = new RequestOp(); op.RequestTxn = txn; return(op); }
public void LockLeader(long expectedLeaseId, long?returnedLeaseId, bool expectedResult) { var fixture = new Fixture(); string serverUri = fixture.Create <string>(); Mock <IEtcdCompoundClient> clientMock = new Mock <IEtcdCompoundClient>(); clientMock .Setup(p => p.Transaction(It.IsAny <TxnRequest>())) .Callback <TxnRequest> ( r => { Assert.AreEqual(1, r.Compare.Count); Compare compare = r.Compare[0]; Assert.AreEqual(EtcdWrapper.KEY_LEADER_ELECTION, compare.Key.ToStringUtf8()); Assert.AreEqual(Compare.Types.CompareTarget.Create, compare.Target); Assert.AreEqual(Compare.Types.CompareResult.Greater, compare.Result); Assert.Zero(compare.CreateRevision); Assert.AreEqual(1, r.Failure.Count); RequestOp requestOp = r.Failure[0]; PutRequest putRequest = requestOp.RequestPut; Assert.IsNotNull(putRequest); Assert.AreEqual(EtcdWrapper.KEY_LEADER_ELECTION, putRequest.Key.ToStringUtf8()); Assert.AreEqual(expectedLeaseId.ToString(), putRequest.Value.ToStringUtf8()); Assert.AreEqual(expectedLeaseId, putRequest.Lease); } ); clientMock.Setup(p => p.Get(EtcdWrapper.KEY_LEADER_ELECTION)).Returns ( returnedLeaseId.HasValue ? new RangeResponse { Count = 1, Kvs = { new RepeatedField <KeyValue> { new KeyValue { Value = ByteString.CopyFromUtf8(returnedLeaseId.ToString()) } } } } : new RangeResponse() ); Mock <IEtcdCompoundClientFactory> etcdCompoundClientFactoryMock = new Mock <IEtcdCompoundClientFactory>(); etcdCompoundClientFactoryMock.Setup(p => p.CreateClient(It.IsAny <string>())).Returns(clientMock.Object); EtcdWrapper wrapper = new EtcdWrapper(etcdCompoundClientFactoryMock.Object); bool isLeader = wrapper.LockLeader(serverUri, expectedLeaseId); etcdCompoundClientFactoryMock.Verify(p => p.CreateClient(serverUri), Times.Once); Assert.AreEqual(expectedResult, isLeader); clientMock.Verify(p => p.Transaction(It.IsAny <TxnRequest>()), Times.Once); clientMock.Verify(p => p.Get(EtcdWrapper.KEY_LEADER_ELECTION), Times.Once); }
public virtual Task <OpResponse> ProcessRequest(RequestOp request) { if (HandleRequest != null) { return(HandleRequest(this, request)); } throw new NotImplementedException("Attach HandleRequest or override this"); }
RequestOp toRequestOp() { PutRequest put = new PutRequest(); put.Key = this.key; put.Value = this.value; put.Lease = this.option.getLeaseId(); put.PrevKv = this.option.getPrevKV(); RequestOp op = new RequestOp(); op.RequestPut = put; return(op); }
RequestOp toRequestOp() { DeleteRangeRequest delete = new DeleteRangeRequest(); delete.Key = this.key; delete.PrevKv = this.option.IsPrevKV; if (this.option.EndKey.IsPresent) { delete.RangeEnd = ByteString.CopyFrom(this.option.EndKey.GetBytes()); } RequestOp op = new RequestOp(); op.RequestDeleteRange = delete; return(op); }
RequestOp toRequestOp() { PutRequest put = new PutRequest { Key = this.key, Value = this.value, Lease = this.option.LeaseId, PrevKv = this.option.PrevKV }; RequestOp op = new RequestOp { RequestPut = put }; return(op); }
RequestOp toRequestOp() { RangeRequest range = new RangeRequest() { Key = this.key, CountOnly = this.option.IsCountOnly(), Limit = this.option.GetLimit(), Revision = this.option.GetRevision(), KeysOnly = this.option.IsKeysOnly(), Serializable = this.option.isSerializable(), SortOrder = OptionsUtil.ToRangeRequestSortOrder(this.option.GetSortOrder()), SortTarget = OptionsUtil.ToRangeRequestSortTarget(this.option.GetSortField()) }; range.RangeEnd = ByteString.CopyFrom(this.option.GetEndKey().getBytes()); RequestOp op = new RequestOp(); op.RequestRange = range; return(op); }