コード例 #1
0
 public void Can_append_record()
 {
     var queueStream = new SingleFileQueueStream(_stream);
     using(var stream = new MemoryStream()) {
         stream.Write(BitConverter.GetBytes(10));
         stream.Seek(0, SeekOrigin.Begin);
         queueStream.AppendRecord(stream, stream.Length);
         AssertRecord(10, 0, false);
         Assert.AreEqual(1, queueStream.UnreadCount);
     }
 }
コード例 #2
0
ファイル: XDocQueueTests.cs プロジェクト: sdether/DReAM
 public void End_to_end_test()
 {
     var file = Path.GetTempFileName();
     try {
         var queueStream = new SingleFileQueueStream(file);
         var serializer = new XDocQueueItemSerializer();
         using(var queue = new TransactionalQueue<XDoc>(queueStream, serializer)) {
             var doc = new XDoc("foo");
             queue.Enqueue(doc);
             var v = queue.Dequeue();
             Assert.AreEqual(doc, v.Value);
             Assert.IsTrue(queue.CommitDequeue(v.Id));
         }
     } finally {
         File.Delete(file);
     }
 }
コード例 #3
0
 public void Can_append_record_to_existing_queue()
 {
     AppendRecord(1, false);
     AppendRecord(2, true);
     var queueStream = new SingleFileQueueStream(_stream);
     using(var stream = new MemoryStream()) {
         stream.Write(BitConverter.GetBytes(10));
         stream.Seek(0, SeekOrigin.Begin);
         var position = _stream.Length;
         queueStream.AppendRecord(stream, stream.Length);
         AssertRecord(10, position, false);
         Assert.AreEqual(2, queueStream.UnreadCount);
     }
 }
コード例 #4
0
 public void Trying_to_open_two_instances_on_same_path_throws()
 {
     var path = Path.GetTempFileName();
     var instance1 = new SingleFileQueueStream(path);
     try {
         var instance2 = new SingleFileQueueStream(path);
     } catch(IOException) {
         return;
     }
     Assert.Fail("didn't throw IOException");
 }
コード例 #5
0
 public void Mix_of_deleted_and_undeleted_initializes_Count_to_undeleted_only()
 {
     AppendRecord(1, false);
     AppendRecord(2, true);
     AppendRecord(3, false);
     AppendRecord(4, true);
     AppendRecord(5, false);
     _log.DebugFormat("stream length: {0}", _stream.Length);
     var queueStream = new SingleFileQueueStream(_stream);
     Assert.AreEqual(3, queueStream.UnreadCount);
 }
コード例 #6
0
 public void Deleting_last_record_truncates_file()
 {
     AppendRecord(1, false);
     AppendRecord(2, true);
     AppendRecord(3, false);
     var queueStream = new SingleFileQueueStream(_stream);
     var handle1 = queueStream.ReadNextRecord().Handle;
     var handle2 = queueStream.ReadNextRecord().Handle;
     queueStream.DeleteRecord(handle1);
     queueStream.DeleteRecord(handle2);
     Assert.AreEqual(0, _stream.Length);
 }
コード例 #7
0
 public void Creates_path_if_not_exists()
 {
     var path = Path.Combine(Path.Combine(Path.GetTempPath(), StringUtil.CreateAlphaNumericKey(6)), "queue.bin");
     var instance1 = new SingleFileQueueStream(path);
     Assert.IsTrue(File.Exists(path));
 }
コード例 #8
0
 public void Count_on_empty_stream_returns_0()
 {
     var queueStream = new SingleFileQueueStream(_stream);
     Assert.AreEqual(0, queueStream.UnreadCount);
 }
コード例 #9
0
 public void Corrupt_record_is_ignored_at_initialization()
 {
     var v1 = "asdsdasdasdasdasd";
     var v2 = "asdasdsadasdwwdsdw";
     AppendRecord(v1, false);
     for(byte i = 0; i < 6; i++) {
         _stream.WriteByte(i);
     }
     AppendRecord(v2, false);
     var queueStream = new SingleFileQueueStream(_stream);
     Assert.AreEqual(2,queueStream.UnreadCount);
     Assert.AreEqual(v1, GetStringValue(queueStream.ReadNextRecord().Stream));
     Assert.AreEqual(v2, GetStringValue(queueStream.ReadNextRecord().Stream));
 }
コード例 #10
0
 public void Corrupt_record_does_not_stop_further_appending_dequeueing()
 {
     var v1 = "asdsdasdasdasdasd";
     var v2 = "asdasdsadasdwwdsdw";
     AppendRecord(v1, false);
     for(byte i = 0; i < 6; i++) {
         _stream.WriteByte(i);
     }
     var position = _stream.Position;
     var queueStream = new SingleFileQueueStream(_stream);
     Assert.AreEqual(1, queueStream.UnreadCount);
     using(var stream = new MemoryStream()) {
         stream.Write(Encoding.UTF8.GetBytes(v2));
         stream.Seek(0, SeekOrigin.Begin);
         queueStream.AppendRecord(stream, stream.Length);
         AssertRecord(v2, position, false);
         Assert.AreEqual(2, queueStream.UnreadCount);
     }
     Assert.AreEqual(v1, GetStringValue(queueStream.ReadNextRecord().Stream));
     Assert.AreEqual(v2, GetStringValue(queueStream.ReadNextRecord().Stream));
 }
コード例 #11
0
 public void Can_read_consecutive_records()
 {
     AppendRecord(1, false);
     AppendRecord(2, true);
     AppendRecord(3, false);
     var queueStream = new SingleFileQueueStream(_stream);
     Assert.AreEqual(1, GetIntValue(queueStream.ReadNextRecord().Stream));
     Assert.AreEqual(3, GetIntValue(queueStream.ReadNextRecord().Stream));
     Assert.AreEqual(0, queueStream.UnreadCount);
 }
コード例 #12
0
 public void Can_delete_record()
 {
     AppendRecord(1, false);
     AppendRecord(2, false);
     var queueStream = new SingleFileQueueStream(_stream);
     var handle = queueStream.ReadNextRecord().Handle;
     queueStream.DeleteRecord(handle);
     AssertRecord(1, 0, true);
 }
コード例 #13
0
 public void Can_append_record_to_truncated_file()
 {
     AppendRecord(1, false);
     var queueStream = new SingleFileQueueStream(_stream);
     var handle = queueStream.ReadNextRecord().Handle;
     queueStream.DeleteRecord(handle);
     using(var stream = new MemoryStream()) {
         stream.Write(BitConverter.GetBytes(10));
         stream.Seek(0, SeekOrigin.Begin);
         queueStream.AppendRecord(stream, stream.Length);
         AssertRecord(10, 0, false);
         Assert.AreEqual(1, queueStream.UnreadCount);
     }
 }
コード例 #14
0
ファイル: XDocQueueTests.cs プロジェクト: sdether/DReAM
 public void Load_test_mixed_put_peek_take_with_single_file_queue()
 {
     var file = Path.GetTempFileName();
     var serializer = new XDocQueueItemSerializer();
     Func<TransactionalQueue<XDoc>> ctor = () => {
         var queueStream = new SingleFileQueueStream(file);
         var q = new TransactionalQueue<XDoc>(queueStream, serializer) { DefaultCommitTimeout = TimeSpan.FromSeconds(5) };
         return q;
     };
     try {
         Load_test(ctor);
     } finally {
         File.Delete(file);
     }
 }
コード例 #15
0
ファイル: XDocQueueTests.cs プロジェクト: sdether/DReAM
 public void Perf_test_single_thread_put_peek_and_take_with_single_file_queue()
 {
     var file = Path.GetTempFileName();
     try {
         var queueStream = new SingleFileQueueStream(file);
         var serializer = new XDocQueueItemSerializer();
         using(ITransactionalQueue<XDoc> queue = new TransactionalQueue<XDoc>(queueStream, serializer)) {
             Perf_test_single_thread_put_peek_and_take(queue);
         }
     } finally {
         _log.DebugFormat("wiping xdoc queue");
         File.Delete(file);
     }
 }
コード例 #16
0
ファイル: XDocQueueTests.cs プロジェクト: sdether/DReAM
 public void Perf_test_single_thread_put_peek_and_take_with_memorystream_queue()
 {
     using(var stream = new MemoryStream()) {
         var queueStream = new SingleFileQueueStream(stream);
         var serializer = new XDocQueueItemSerializer();
         using(ITransactionalQueue<XDoc> queue = new TransactionalQueue<XDoc>(queueStream, serializer)) {
             Perf_test_single_thread_put_peek_and_take(queue);
         }
     }
 }