Inheritance: AbstractStoreCommand
        public void When_prepending_item_on_cache_will_not_modify_flags()
        {
            var buffer = new byte[] { 1, 2, 3, 4 };
            ICommand command = new SetCommand();
            command.SetContext(GetStreamWithData(buffer));
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            wait.Reset();

            buffer = new byte[] { 5, 6, 7, 8 };
            MemoryStream stream = GetStreamWithData(buffer);
            command = new PrependCommand();
            command.SetContext(stream);
            command.Init("foo", "15", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            var item = (CachedItem)Cache.Get("foo");

            Assert.AreEqual(1, item.Flags);
        }
        public void When_prepending_item_on_cache_will_prepend_to_data_already_on_cache()
        {
            var buffer = new byte[] { 1, 2, 3, 4 };
            ICommand command = new SetCommand();
            command.SetContext(GetStreamWithData(buffer));
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            wait.Reset();

            buffer = new byte[] { 5, 6, 7, 8 };
            MemoryStream stream = GetStreamWithData(buffer);
            command = new PrependCommand();
            command.SetContext(stream);
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            var item = (CachedItem)Cache.Get("foo");

            CollectionAssert.AreEqual(new byte[] { 5, 6, 7, 8, 1, 2, 3, 4, }, item.Buffer);
        }
        public void When_item_end_in_just_LF_will_send_error()
        {
            var buffer = new byte[] { 1, 2, 3, 4, 10 };
            var stream = new MemoryStream();
            stream.Write(buffer, 0, 5);
            stream.Position = 0;
            var command = new SetCommand();
            command.SetContext(stream);
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            Assert.AreEqual("CLIENT_ERROR Data section should end with a line break (\\r\\n)\r\n", ReadAll(5, stream));
        }
        public void When_prepending_item_on_cache_will_reply_with_stored()
        {
            var buffer = new byte[] { 1, 2, 3, 4 };
            ICommand command = new SetCommand();
            command.SetContext(GetStreamWithData(buffer));
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            wait.Reset();

            buffer = new byte[] { 5, 6, 7, 8 };
            MemoryStream stream = GetStreamWithData(buffer);
            command = new PrependCommand();
            command.SetContext(stream);
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            Assert.AreEqual("STORED\r\n", ReadAll(6, stream));
        }
        public void When_setting_item_will_put_it_in_cache()
        {
            var buffer = new byte[] { 1, 2, 3, 4 };
            var command = new SetCommand();
            command.SetContext(GetStreamWithData(buffer));

            command.Init("foo", "1","6000","4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            var cachedItem = (CachedItem)Cache.Get("foo");
            Assert.IsNotNull(cachedItem);
            CollectionAssert.AreEqual(buffer, cachedItem.Buffer);
            Assert.AreEqual(1, cachedItem.Flags);
        }
        private MemoryStream SetItem()
        {
            wait.Reset();

            var buffer = new byte[] { 1, 2, 3, 4 };
            MemoryStream stream = GetStreamWithData(buffer);
            var command = new SetCommand();
            command.SetContext(stream);
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();
            return stream;
        }
        public void When_setting_item_will_reply_that_it_was_stored()
        {
            var buffer = new byte[] { 1, 2, 3, 4 };
            MemoryStream stream = GetStreamWithData(buffer);
            var command = new SetCommand();
            command.SetContext(stream);
            command.Init("foo", "1", "6000", "4");

            command.FinishedExecuting += () => { wait.Set(); };
            command.Execute();
            wait.WaitOne();

            Assert.AreEqual("STORED\r\n", ReadAll(6, stream));
        }