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"))); }
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"))); }