示例#1
0
        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
                       ));
        }
示例#2
0
            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);
            }
示例#3
0
        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);
        }
示例#4
0
 public virtual Task <OpResponse> ProcessRequest(RequestOp request)
 {
     if (HandleRequest != null)
     {
         return(HandleRequest(this, request));
     }
     throw new NotImplementedException("Attach HandleRequest or override this");
 }
示例#5
0
            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);
            }
示例#6
0
            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);
            }
示例#7
0
            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);
            }
示例#8
0
            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);
            }