Exemplo n.º 1
0
        public void TestHighLowBuffer()
        {
            List <int>        output         = new List <int>();
            ManualResetEvent  sinkWaitHandle = new ManualResetEvent(false);
            HiLowBuffer <int> buffer         = new HiLowBuffer <int>(1, l =>
            {
                sinkWaitHandle.WaitOne();
                output.Add(l);
            }, new InMemoryQueue <int>(100));

            Task.Run(() =>
            {
                for (int i = 0; i < 2; i++)
                {
                    buffer.Add(i);
                }
            });
            //shoud block
            Thread.Sleep(500);
            buffer.Requeue(-1, false);
            sinkWaitHandle.Set();
            Thread.Sleep(500);
            Assert.Equal(3, output.Count);
            Assert.Equal(-1, output[2]); //Requeue item come out last
        }
        public void TestHighLowBufferWithPersistentQueue()
        {
            List <int>       output         = new List <int>();
            ManualResetEvent sinkWaitHandle = new ManualResetEvent(false);
            var dataDir  = Path.Combine(AppContext.BaseDirectory, Guid.NewGuid().ToString());
            var queueDir = Path.Combine(dataDir, "HighLowTest");

            Directory.CreateDirectory(queueDir);
            if (Directory.Exists(queueDir))
            {
                Directory.Delete(queueDir, true);
            }
            BinarySerializer <int> integerSerializer = new BinarySerializer <int>(
                (w, i) => w.Write(i),
                (r) => r.ReadInt32());
            FilePersistentQueue <int> queue = new FilePersistentQueue <int>(
                100,
                queueDir,
                integerSerializer,
                new ProtectedAppDataFileProvider(dataDir),
                NullLogger.Instance);
            HiLowBuffer <int> buffer = new HiLowBuffer <int>(1, null, l =>
            {
                sinkWaitHandle.WaitOne();
                output.Add(l);
            }, queue);

            Task.Run(() =>
            {
                for (int i = 0; i < 2; i++)
                {
                    buffer.Add(i);
                }
            });
            //should block
            Thread.Sleep(500);
            buffer.Requeue(-1, false);
            sinkWaitHandle.Set();
            Thread.Sleep(500);
            Assert.Equal(3, output.Count);
            Assert.Equal(-1, output[2]); //Requeue item come out last
            Assert.True(File.Exists(Path.Combine(queueDir, "index")));
        }
Exemplo n.º 3
0
        public void TestHighLowBufferWithPersistentQueue()
        {
            List <int>       output         = new List <int>();
            ManualResetEvent sinkWaitHandle = new ManualResetEvent(false);
            string           directory      = Path.Combine(FilePersistenceQueueTest.QueueDirectory, "HighLowTest");

            if (Directory.Exists(directory))
            {
                Directory.Delete(directory, true);
            }
            BinarySerializer <int> integerSerializer = new BinarySerializer <int>(
                (w, i) => w.Write(i),
                (r) => r.ReadInt32());
            FilePersistentQueue <int> queue = new FilePersistentQueue <int>(
                100,
                directory,
                integerSerializer);
            HiLowBuffer <int> buffer = new HiLowBuffer <int>(1, l =>
            {
                sinkWaitHandle.WaitOne();
                output.Add(l);
            }, queue);

            Task.Run(() =>
            {
                for (int i = 0; i < 2; i++)
                {
                    buffer.Add(i);
                }
            });
            //shoud block
            Thread.Sleep(500);
            buffer.Requeue(-1, false);
            sinkWaitHandle.Set();
            Thread.Sleep(500);
            Assert.Equal(3, output.Count);
            Assert.Equal(-1, output[2]); //Requeue item come out last
            Assert.True(File.Exists(Path.Combine(directory, "index")));
        }