Ejemplo n.º 1
0
 public void Byte_overage_spills_into_consecutive_files()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 4)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         var s3 = GetStream(3);
         var s4 = GetStream(4);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.AppendRecord(s3, s3.Length);
         queueStream.AppendRecord(s4, s4.Length);
         Assert.AreEqual(5, Directory.GetFiles(_path).Length);
     }
 }
Ejemplo n.º 2
0
 public void Load_test_mixed_put_peek_take_with_multi_file_queue()
 {
     var path = Path.Combine(Path.GetTempPath(), StringUtil.CreateAlphaNumericKey(6));
     var serializer = new XDocQueueItemSerializer();
     Func<TransactionalQueue<XDoc>> ctor = () => {
         var queueStream = new MultiFileQueueStream(path, 500 * 1024);
         var q = new TransactionalQueue<XDoc>(queueStream, serializer) { DefaultCommitTimeout = TimeSpan.FromSeconds(5) };
         return q;
     };
     try {
         Load_test(ctor);
     } finally {
         Directory.Delete(path, true);
     }
 }
Ejemplo n.º 3
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);
     var p = AppendRecord(5, false);
     _log.DebugFormat("stream length: {0}", p);
     var queueStream = new MultiFileQueueStream(_path);
     Assert.AreEqual(3, queueStream.UnreadCount);
 }
Ejemplo n.º 4
0
 public void Item_depletion_removes_read_files()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 4)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         var s3 = GetStream(3);
         var s4 = GetStream(4);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.AppendRecord(s3, s3.Length);
         queueStream.AppendRecord(s4, s4.Length);
         var h1 = queueStream.ReadNextRecord();
         var h2 = queueStream.ReadNextRecord();
         var h3 = queueStream.ReadNextRecord();
         var h4 = queueStream.ReadNextRecord();
         Assert.IsNotNull(h4);
         Assert.AreEqual(5, Directory.GetFiles(_path).Length);
         queueStream.DeleteRecord(h2.Handle);
         Assert.AreEqual(4, Directory.GetFiles(_path).Length);
         queueStream.DeleteRecord(h3.Handle);
         Assert.AreEqual(3, Directory.GetFiles(_path).Length);
         queueStream.DeleteRecord(h1.Handle);
         Assert.AreEqual(2, Directory.GetFiles(_path).Length);
         queueStream.DeleteRecord(h4.Handle);
         Assert.AreEqual(1, Directory.GetFiles(_path).Length);
     }
 }
Ejemplo n.º 5
0
 public void Item_depletion_of_non_head_resets_file_numbering_if_all_other_files_are_empty_already()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 14)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         var s3 = GetStream(3);
         var s4 = GetStream(4);
         var s5 = GetStream(5);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.AppendRecord(s3, s3.Length);
         queueStream.AppendRecord(s4, s4.Length);
         queueStream.AppendRecord(s5, s5.Length);
         Assert.AreEqual(3, Directory.GetFiles(_path).Length);
         var h1 = queueStream.ReadNextRecord();
         var h2 = queueStream.ReadNextRecord();
         var h3 = queueStream.ReadNextRecord();
         var h4 = queueStream.ReadNextRecord();
         var h5 = queueStream.ReadNextRecord();
         Assert.IsNotNull(h5);
         queueStream.DeleteRecord(h1.Handle);
         queueStream.DeleteRecord(h2.Handle);
         queueStream.DeleteRecord(h3.Handle);
         queueStream.DeleteRecord(h5.Handle);
         var files = Directory.GetFiles(_path);
         Assert.AreEqual(2, files.Length);
         Assert.AreEqual("data_2.bin", Path.GetFileName(files[0]));
         Assert.AreEqual("data_3.bin", Path.GetFileName(files[1]));
         queueStream.DeleteRecord(h4.Handle);
         files = Directory.GetFiles(_path);
         Assert.AreEqual(1, files.Length);
         Assert.AreEqual("data_1.bin", Path.GetFileName(files[0]));
     }
 }
Ejemplo n.º 6
0
 public void Item_depletion_of_head_does_nothing_to_file_count()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 14)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         var s3 = GetStream(3);
         var s4 = GetStream(4);
         var s5 = GetStream(5);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.AppendRecord(s3, s3.Length);
         queueStream.AppendRecord(s4, s4.Length);
         queueStream.AppendRecord(s5, s5.Length);
         Assert.AreEqual(3, Directory.GetFiles(_path).Length);
         var h1 = queueStream.ReadNextRecord();
         var h2 = queueStream.ReadNextRecord();
         var h3 = queueStream.ReadNextRecord();
         var h4 = queueStream.ReadNextRecord();
         var h5 = queueStream.ReadNextRecord();
         Assert.IsNotNull(h5);
         queueStream.DeleteRecord(h5.Handle);
         Assert.AreEqual(3, Directory.GetFiles(_path).Length);
     }
 }
Ejemplo n.º 7
0
 public void Deleting_last_record_truncates_file()
 {
     AppendRecord(1, false);
     AppendRecord(2, true);
     AppendRecord(3, false);
     using(var queueStream = new MultiFileQueueStream(_path)) {
         var handle1 = queueStream.ReadNextRecord().Handle;
         var handle2 = queueStream.ReadNextRecord().Handle;
         queueStream.DeleteRecord(handle1);
         queueStream.DeleteRecord(handle2);
     }
     Assert.AreEqual(0, File.Open(_firstFile, FileMode.Open).Length);
 }
Ejemplo n.º 8
0
 public void Count_on_empty_stream_returns_0()
 {
     var queueStream = new MultiFileQueueStream(_path);
     Assert.AreEqual(0, queueStream.UnreadCount);
 }
Ejemplo n.º 9
0
 public void Can_delete_record()
 {
     AppendRecord(1, false);
     AppendRecord(2, false);
     using(var queueStream = new MultiFileQueueStream(_path)) {
         var handle = queueStream.ReadNextRecord().Handle;
         queueStream.DeleteRecord(handle);
     }
     AssertRecord(1, 0, true);
 }
Ejemplo n.º 10
0
 public void Can_read_consecutive_records()
 {
     AppendRecord(1, false);
     AppendRecord(2, true);
     AppendRecord(3, false);
     var queueStream = new MultiFileQueueStream(_path);
     Assert.AreEqual(1, GetValue(queueStream.ReadNextRecord().Stream));
     Assert.AreEqual(3, GetValue(queueStream.ReadNextRecord().Stream));
     Assert.AreEqual(0, queueStream.UnreadCount);
 }
Ejemplo n.º 11
0
 public void Can_append_record_to_truncated_file()
 {
     AppendRecord(1, false);
     using(var queueStream = new MultiFileQueueStream(_path)) {
         var handle = queueStream.ReadNextRecord().Handle;
         queueStream.DeleteRecord(handle);
         var s1 = GetStream(10);
         queueStream.AppendRecord(s1, s1.Length);
         Assert.AreEqual(1, queueStream.UnreadCount);
     }
     AssertRecord(10, 0, false);
 }
Ejemplo n.º 12
0
 public void Can_append_record_to_existing_queue()
 {
     AppendRecord(1, false);
     var p = AppendRecord(2, true);
     using(var queueStream = new MultiFileQueueStream(_path)) {
         var stream = GetStream(10);
         queueStream.AppendRecord(stream, stream.Length);
         Assert.AreEqual(2, queueStream.UnreadCount);
     }
     AssertRecord(10, p, false);
 }
Ejemplo n.º 13
0
 public void Can_append_record()
 {
     using(var queueStream = new MultiFileQueueStream(_path)) {
         var stream = GetStream(10);
         queueStream.AppendRecord(stream, stream.Length);
         Assert.AreEqual(1, queueStream.UnreadCount);
     }
     AssertRecord(10, 0, false);
 }
Ejemplo n.º 14
0
 public void Truncate_removes_files()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 14)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         var s3 = GetStream(3);
         var s4 = GetStream(4);
         var s5 = GetStream(5);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.AppendRecord(s3, s3.Length);
         queueStream.AppendRecord(s4, s4.Length);
         queueStream.AppendRecord(s5, s5.Length);
         Assert.AreEqual(3, Directory.GetFiles(_path).Length);
         queueStream.Truncate();
         Assert.AreEqual(1, Directory.GetFiles(_path).Length);
         Assert.AreEqual(0, queueStream.UnreadCount);
         Assert.AreEqual(QueueStreamRecord.Empty, queueStream.ReadNextRecord());
     }
 }
Ejemplo n.º 15
0
 public void Creates_path_if_not_exists()
 {
     var path = Path.Combine(Path.GetTempPath(), StringUtil.CreateAlphaNumericKey(6));
     var instance1 = new MultiFileQueueStream(path);
     Assert.IsTrue(Directory.Exists(path));
 }
Ejemplo n.º 16
0
 public void Trying_to_open_two_instances_on_same_path_throws()
 {
     var path = Path.GetTempPath();
     var instance1 = new MultiFileQueueStream(path);
     try {
         var instance2 = new MultiFileQueueStream(path);
     } catch(IOException) {
         return;
     }
     Assert.Fail("didn't throw IOException");
 }
Ejemplo n.º 17
0
 public void Creating_queue_from_chunks_reports_proper_unreadcount()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 4)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         var s3 = GetStream(3);
         var s4 = GetStream(4);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.AppendRecord(s3, s3.Length);
         queueStream.AppendRecord(s4, s4.Length);
     }
     using(var queueStream = new MultiFileQueueStream(_path, 4)) {
         Assert.AreEqual(4, queueStream.UnreadCount);
     }
 }
Ejemplo n.º 18
0
 public void Can_append_read_after_truncate()
 {
     using(var queueStream = new MultiFileQueueStream(_path, 14)) {
         var s1 = GetStream(1);
         var s2 = GetStream(2);
         queueStream.AppendRecord(s1, s1.Length);
         queueStream.AppendRecord(s2, s2.Length);
         queueStream.Truncate();
         var s3 = GetStream(3);
         queueStream.AppendRecord(s3, s3.Length);
         Assert.AreEqual(1, queueStream.UnreadCount);
         var h3 = queueStream.ReadNextRecord();
         Assert.AreEqual(0, queueStream.UnreadCount);
         Assert.AreEqual(GetValue(s3),GetValue(h3.Stream));
     }
 }
Ejemplo n.º 19
0
 public void Perf_test_single_thread_put_peek_and_take_with_multi_file_queue()
 {
     var path = Path.Combine(Path.GetTempPath(), StringUtil.CreateAlphaNumericKey(6));
     try {
         var serializer = new XDocQueueItemSerializer();
         var queueStream = new MultiFileQueueStream(path, 500 * 1024);
         using(ITransactionalQueue<XDoc> queue = new TransactionalQueue<XDoc>(queueStream, serializer) { DefaultCommitTimeout = TimeSpan.FromSeconds(5) }) {
             Perf_test_single_thread_put_peek_and_take(queue);
         }
     } finally {
         Directory.Delete(path, true);
     }
 }