Ejemplo n.º 1
0
        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>());
        }
Ejemplo n.º 2
0
 /// <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));
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
        }