public void SimpleTest() { QueueConfig config = new QueueConfig() { QueueDirectory = @"d:\workspace\data\test-queue", DataConverter = new ObjectConverter(), QueueName = "test01" }; TestObject t1 = new TestObject() { Str = "t1-str", Num = 123, Flo = 1.3234f, To = new TestObject() { Str = "t2-str", Num = 35654, Flo = 4935.2394f, } }; IFileQueue <TestObject> fq = FileQueue <TestObject> .Create(config); fq.Enqueue(t1); TestObject t2 = fq.Dequeue(); Assert.AreEqual(t1.Str, t2.Str); Assert.AreEqual(t1.Num, t2.Num); Assert.AreEqual(t1.Flo, t2.Flo); Assert.AreEqual(t1.To.Str, t2.To.Str); Assert.AreEqual(t1.To.Num, t2.To.Num); Assert.AreEqual(t1.To.Flo, t2.To.Flo); }
public void Enqueue(string data) { var fileName = fileQueue.GetNewFileName(); // Add file name to use to the queue fileQueue.Enqueue(fileName); // Write message to file using (var stream = fileQueue.GetWriter(fileName)) { stream.Write(data); } }
public void DequeueTimeoutExceptionBrokenTest() { QueueConfig config = new QueueConfig() { QueueDirectory = @"d:\workspace\data\test-queue", DataConverter = new Utf8Converter(), QueueName = "test06", DequeueTimeoutMilliseconds = 5000 }; IFileQueue <string> fq = FileQueue <string> .Create(config); StringBuilder data = new StringBuilder(); for (int j = 0; j < 1000; ++j) { data.Append(Guid.NewGuid().ToString()); } fq.Enqueue(data.ToString()); try { string result = fq.Dequeue(); Assert.Fail(); } catch (DequeueTimeoutException e) { byte[] remain = fq.DequeueRawData(); byte[] whole = new byte[e.QueueData.Length + remain.Length]; using (MemoryStream wholeStream = new MemoryStream(whole)) { wholeStream.Write(e.QueueData, 0, e.QueueData.Length); wholeStream.Write(remain, 0, remain.Length); } string result = fq.DeserializeQueueData(whole); Assert.AreEqual(data.ToString(), result); } }
public void RawDataTest() { QueueConfig config = new QueueConfig() { QueueDirectory = @"d:\workspace\data\test-queue", DataConverter = new Utf8Converter(), QueueName = "test05", DequeueTimeoutMilliseconds = 5000 }; IFileQueue <string> fq = FileQueue <string> .Create(config); StringBuilder data = new StringBuilder(); for (int j = 0; j < 20; ++j) { data.Append(Guid.NewGuid().ToString()); } fq.Enqueue(data.ToString()); byte[] raw = fq.DequeueRawData(); string result = fq.DeserializeQueueData(raw); Assert.AreEqual(data.ToString(), result); }
private void RenamedHandler(object sender, RenamedEventArgs e) { _queue.Enqueue( new FileAction(e.FullPath, FileActionTypesConverter.Convert(e.ChangeType), e.OldFullPath) ); }
public void MultiThreadTest() { QueueConfig config = new QueueConfig() { QueueDirectory = @"d:\workspace\data\test-queue", DataConverter = new Utf8Converter(), QueueName = "test02", ReadBufferSize = 1024 * 1024 }; IFileQueue <string> fq = FileQueue <string> .Create(config); HashSet <string> writeData = new HashSet <string>(); int successCount = 0; int failCount = 0; Thread[] ta = new Thread[400]; for (int i = 0; i < ta.Length; ++i) { if (i % 2 == 0) { ta[i] = new Thread(() => { StringBuilder data = new StringBuilder(); for (int j = 0; j < 20; ++j) { data.Append(Guid.NewGuid().ToString()); } lock (writeData) { writeData.Add(data.ToString()); } fq.Enqueue(data.ToString()); }); } else if (i % 2 == 1) { ta[i] = new Thread(() => { while (true) { string data = fq.Dequeue(); if (data != null) { lock (writeData) { if (writeData.Contains(data)) { writeData.Remove(data); Interlocked.Increment(ref successCount); } else { Interlocked.Increment(ref failCount); } } break; } } }); } } for (int i = 0; i < ta.Length; ++i) { ta[i].Start(); } while (true) { if (successCount + failCount == ta.Length / 2) { break; } Thread.Sleep(1000); } Assert.AreEqual(successCount, ta.Length / 2); }
public void MoveFileTest() { QueueConfig config = new QueueConfig() { QueueDirectory = @"d:\workspace\data\test-queue", DataConverter = new Utf8Converter(), MaxQueueSize = 1024 * 500, QueueName = "test03", ReadBufferSize = 1024 * 1024 * 3 }; IFileQueue <string> fq = FileQueue <string> .Create(config); HashSet <string> writeData = new HashSet <string>(); int successCount = 0; int failCount = 0; int dataCount = 20000; Thread t1 = new Thread(() => { for (int i = 0; i < dataCount; ++i) { StringBuilder data = new StringBuilder(); for (int j = 0; j < 20; ++j) { data.Append(Guid.NewGuid().ToString()); } lock (writeData) { writeData.Add(data.ToString()); } fq.Enqueue(data.ToString()); } }); Thread t2 = new Thread(() => { for (int i = 0; i < dataCount; ++i) { while (true) { string data = fq.Dequeue(); if (data != null) { lock (writeData) { if (writeData.Contains(data)) { writeData.Remove(data); Interlocked.Increment(ref successCount); } else { Interlocked.Increment(ref failCount); } } break; } } } }); t1.Start(); t2.Start(); while (true) { if (successCount + failCount == dataCount) { break; } Thread.Sleep(1000); } Assert.AreEqual(successCount, dataCount); }