public void Handle_ReturnsNotFoundWhenObjectIsNotInTheCache() { // arrange byte[] obj = SerializationUtils.Serialize(RequestStatusCode.NotFound); byte[] response; bool expected = false; var request = new GetRequest(); var processor = new GetProcessor(); var storage = Substitute.For <IStorage>(); storage.TryGet(request.Key, out response).Returns(x => { x[1] = obj; return(expected); }); byte[] expectedBytes = SerializationUtils.SerializeToStreamWithLength(obj); var socket = Substitute.For <Socket>(); socket.Send(Arg.Any <byte[]>(), Arg.Any <int>(), Arg.Any <int>(), Arg.Any <SocketFlags>()) .Returns(expectedBytes.Length); // act processor.Handle(ref request, storage, socket); // assert socket.Received(1).Send(Arg.Is <byte[]>(x => x.SequenceEqual(expectedBytes)), Arg.Any <int>(), Arg.Any <int>(), Arg.Any <SocketFlags>()); }
/// <summary> /// Processes the get message. /// </summary> /// <param name="message">The message.</param> /// <param name="messageContext">The message context.</param> private void ProcessGetMessage(RelayMessage message, MessageContext messageContext) { byte[] payloadByteArray = GetProcessor.Process(messageContext, storeContext); if (payloadByteArray != null) { bool compress = storeContext.GetCompressOption(message.TypeId); message.Payload = new RelayPayload(message.TypeId, message.Id, payloadByteArray, compress); } else { LoggingUtil.Log.InfoFormat("Miss in CacheIndexStorage for Id : {0}, ExtendedId : ", message.Id, IndexCacheUtils.GetReadableByteArray(message.ExtendedId)); } }
public void Handle_ReturnsNotFoundWhenObjectIsNotInTheCache() { // arrange var request = new GetRequest(); var processor = new GetProcessor(); var storage = Substitute.For <IStorage>(); storage.TryGet(request.Key, out ByteString _).Returns(false); // Act GetResponse response = processor.Reply(request, storage); // assert Assert.False(response.Exists); Assert.True(response.Data.IsEmpty); }
public void Handle_ReturnsObjectFromCache() { // arrange ByteString obj = ByteString.CopyFromUtf8("lorem ipsum"); var request = new GetRequest(); var processor = new GetProcessor(); var storage = Substitute.For <IStorage>(); storage.TryGet(request.Key, out ByteString dummy).Returns(x => { x[1] = obj; return(true); }); // Act GetResponse response = processor.Reply(request, storage); // assert Assert.True(response.Exists); Assert.Equal(obj, response.Data); }
static async Task Main(string[] args) { Init(); var ctrlPut = new PutProcessor(1); var ctrlGet = new GetProcessor(3); var ctrlAck = new AckProcessor(1); TaskCompletionSource tcs = new(); var ss = new SocketServer(new IPEndPoint(IPAddress.Any, 88)); await Task.Factory.StartNew(async() => { while (true) { var stream = new CStream(await ss.AcceptAsync()); //var stream = await ss.AcceptAsync(); var requestQueue = new BColl <Message>(); var responseQueue = new BColl <Message>(); _ = Task.Factory.StartNew(() => { while (true) { requestQueue.Add(stream.ReadJ <Message>()); } }, TaskCreationOptions.LongRunning); _ = Task.Factory.StartNew(() => { while (true) { foreach (var m in responseQueue.Take(1000)) { stream.WriteJ(m); } if (responseQueue.Count == 0) { stream.Flush(); } } }, TaskCreationOptions.LongRunning); _ = Task.Factory.StartNew(() => { while (true) { var req = requestQueue.Take(); if (req.Params["method"] == "get") { ctrlGet .Get(new MsgKey { QueueName = req.Params["queueName"], Partition = req.Params["partition"], Selector = req.Params["selector"] }) .ContinueWith(t => { var resp = new Message { ID = req.ID }; resp.Params["messageId"] = t.Result.ToString(); responseQueue.Add(resp); }); } if (req.Params["method"] == "put") { ctrlPut .Put(new Msg { Key = new MsgKey { QueueName = req.Params["queueName"], Partition = req.Params["partition"], Selector = req.Params["selector"] }, ID = Guid.Parse(req.Params["messageId"]) }) .ContinueWith(t => { var resp = new Message { ID = req.ID }; resp.Params["result"] = t.Result.ToString(); responseQueue.Add(resp); }); } if (req.Params["method"] == "ack") { ctrlAck .Ack(Guid.Parse(req.Params["messageId"])) .ContinueWith(t => { var resp = new Message { ID = req.ID }; resp.Params["result"] = t.Result.ToString(); responseQueue.Add(resp); }); } } }, TaskCreationOptions.LongRunning); } }); await tcs.Task; }