public void Enqueue_and_dequeue_million_items_restart_queue() { using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int i = 0; i < largeCount; i++) { session.Enqueue(Guid.NewGuid().ToByteArray()); } session.Flush(); } } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int i = 0; i < largeCount; i++) { Ignore(new Guid(session.Dequeue())); } session.Flush(); } } }
public void Can_get_count_from_queue() { using (var queue = new PersistentQueue(path)) { Assert.AreEqual(0, queue.EstimatedCountOfItemsInQueue); } }
//[ExpectedException(typeof(InvalidOperationException),ExpectedMessage = "End of file reached while trying to read queue item")] public void If_data_stream_is_truncated_will_raise_error() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } using (var fs = new FileStream(Path.Combine(path, "data.0"), FileMode.Open)) { fs.SetLength(2);//corrupt the file } var invalidOperationException = Assert.Throws <InvalidOperationException>(() => { using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { session.Dequeue(); } } }); Assert.That(invalidOperationException.Message, Is.EqualTo("End of file reached while trying to read queue item")); }
public void Can_handle_zero_length_entries_at_end() { using (var queue = new PersistentQueue(Path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { using (var session = queue.OpenSession()) { for (int j = 0; j < 19; j++) { session.Enqueue(new byte[] { 1 }); session.Flush(); } session.Enqueue(new byte[0]); session.Flush(); } } using (var queue = new PersistentQueue(Path)) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { Assert.IsNotNull(session.Dequeue()); session.Flush(); } } } }
public void Can_resume_writing_to_second_file_when_restart_queue() { using (var queue = new PersistentQueue(Path, 10)) { for (byte i = 0; i < 11; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } using (var queue = new PersistentQueue(Path, 10)) { for (byte i = 0; i < 2; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } }
public void Enque_remote_files_and_download() { var queue = new PersistentQueue(Path.Combine(_fileStorePath, "_FileQueueTest")); using (var session = queue.OpenSession()) { //clean queue while (session.Dequeue() != null) { ; } for (int i = 0; i < 2; i++) { session.Enqueue(Encoding.UTF8.GetBytes(@"http://jx.taedu.gov.cn:83//Resource.Portal.Web/SubjectResource/DownloadById/030183bb-409f-43be-b3dd-4dd683e7dffc")); session.Enqueue(Encoding.UTF8.GetBytes(@"http://jx.taedu.gov.cn:83/Storages/温秀云/2016/8/1/image/师说2_104707/jpg/师说2.jpg")); session.Enqueue(Encoding.UTF8.GetBytes(@"http://jx.taedu.gov.cn:83/Storages/张华/2016/9/12/image/劝学01_110337/jpg/劝学01.jpg")); session.Enqueue(Encoding.UTF8.GetBytes(@"http://jx.taedu.gov.cn:83/Storages/晁阳/2016/9/8/flash/正多边形内角和_181554/swf/正多边形内角和.swf")); session.Enqueue(Encoding.UTF8.GetBytes(@"http://jx.taedu.gov.cn:83/Storages/周小广/2016/9/13/pdf/一年级英语上册-Unit1-School(2)课件-人教新起点_155027/pdf/一年级英语上册-Unit1-School(2)课件-人教新起点.pdf")); } session.Flush(); } IWorker filePuller = new FilePuller(_fileStorePath, _filePuller_Interval, _filePuller_DownloadTimeout, _filePuller_RetryTimes, queue); filePuller.Start(); Thread.Sleep(100000); }
public void Enque_some_files_and_download_multiThread() { var queue = new PersistentQueue(Path.Combine(_fileStorePath, "_FileQueue")); IWorker fileServer = new FileServer(_fileServer_Port, _fileStorePath, queue); fileServer.Start(); using (var session = queue.OpenSession()) { //clean queue while (session.Dequeue() != null) { ; } //20 images and 1 mp4 foreach (var file in Directory.GetFiles(@"D:\Files\Source", "*", SearchOption.AllDirectories)) { session.Enqueue(Encoding.UTF8.GetBytes(file.Replace(@"D:\Files\Source\", @"http://localhost:9001/file/Source/"))); } session.Flush(); } for (int i = 0; i < 5; i++) { new FilePuller(_fileStorePath, _filePuller_Interval, _filePuller_DownloadTimeout, _filePuller_RetryTimes, queue).Start(); } Thread.Sleep(100000); }
public void Can_dequeue_from_all_files() { using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { Assert.AreEqual(i, session.Dequeue()[0]); session.Flush(); } } } }
public void Enque_remote_files_and_download_multiThread() { var queue = new PersistentQueue(Path.Combine(_fileStorePath, "_FileQueue")); using (var session = queue.OpenSession()) { //加入多个重复文件 //当文件开始下载时就已经创建了,其他线程下载同样文件时,会检测到已下载(比较UpdateTime)而跳过 for (int i = 0; i < 10; i++) { //10m左右 session.Enqueue(Encoding.UTF8.GetBytes(@"http://jx.taedu.gov.cn:83/Resource.Portal.Web/SubjectResource/DownloadById/7923654c-189c-454f-bc0f-58dac38d2f78")); } session.Flush(); } for (int i = 0; i < 5; i++) { new FilePuller(_fileStorePath, _filePuller_Interval, _filePuller_DownloadTimeout, _filePuller_RetryTimes, queue).Start(); } Thread.Sleep(100000); }
public void Can_dequeue_from_all_files() { using (var queue = new PersistentQueue(Path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } using (var queue = new PersistentQueue(Path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { Assert.AreEqual(i, session.Dequeue()[0]); session.Flush(); } } } }
public void Can_limit_amount_of_items_in_queue_file() { using (IPersistentQueue queue = new PersistentQueue(Path, 10)) { Assert.AreEqual(10, queue.MaxFileSize); } }
public void Can_get_count_from_queue() { using (var queue = new PersistentQueue(Path)) { Assert.AreEqual(0, queue.EstimatedCountOfItemsInQueue); } }
public void Enqueue_and_dequeue_large_items_with_restart_queue() { var random = new Random(); var itemsSizes = new List <int>(); using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int i = 0; i < smallCount; i++) { var data = new byte[random.Next(1024 * 512, 1024 * 1024)]; itemsSizes.Add(data.Length); session.Enqueue(data); } session.Flush(); } } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int i = 0; i < smallCount; i++) { Assert.AreEqual(itemsSizes[i], session.Dequeue().Length); } session.Flush(); } } }
public void After_reading_all_items_from_file_that_is_not_the_active_file_should_delete_file() { using (var queue = new PersistentQueue(Path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } using (var queue = new PersistentQueue(Path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { Assert.AreEqual(i, session.Dequeue()[0]); session.Flush(); } } } Assert.IsFalse( File.Exists(System.IO.Path.Combine(Path, "data.0")) ); }
private static PersistentQueue <CommandDefinition> BuildCommandQueue() { var commands = new PersistentQueue <CommandDefinition>(null, new Session { Attributes = new Dictionary <string, object>() }, "testQueue"); commands.Enqueue(new CommandDefinition { IntentName = "1" }); commands.Enqueue(new CommandDefinition { IntentName = "2" }); commands.Enqueue(new CommandDefinition { IntentName = "3" }); commands.Enqueue(new CommandDefinition { IntentName = "4" }); commands.Enqueue(new CommandDefinition { IntentName = "5" }); return(commands); }
public void After_reading_all_items_from_file_that_is_not_the_active_file_should_delete_file() { using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 12; i++) { using (var session = queue.OpenSession()) { Assert.AreEqual(i, session.Dequeue()[0]); session.Flush(); } } } Assert.IsFalse( File.Exists(Path.Combine(path, "data.0")) ); }
public void Will_remove_truncated_transaction() { var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(BitConverter.GetBytes(j)); session.Flush(); } } } using (var txLog = txLogInfo.Open(FileMode.Open)) { txLog.SetLength(5);// corrupt all transactions txLog.Flush(); } new PersistentQueue(path).Dispose(); txLogInfo.Refresh(); Assert.AreEqual(36, txLogInfo.Length);//empty transaction size }
public void Can_handle_transaction_with_only_zero_length_entries() { using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(new byte[0]); session.Flush(); } } } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { Assert.IsEmpty(session.Dequeue()); } Assert.IsNull(session.Dequeue()); session.Flush(); } } }
public void Can_handle_start_separator_used_as_data() { using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(Constants.StartTransactionSeparator); // ??? session.Flush(); } session.Flush(); } } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { Assert.AreEqual(Constants.StartTransactionSeparator, session.Dequeue()); session.Flush(); } } }
public void Transaction_log_size_shrink_after_queue_disposed() { long txSizeWhenOpen; var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path)) { queue.Internals.ParanoidFlushing = false; using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Enqueue(Guid.NewGuid().ToByteArray()); } session.Flush(); } using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Dequeue(); } session.Flush(); } txSizeWhenOpen = txLogInfo.Length; } txLogInfo.Refresh(); Assert.Less(txLogInfo.Length, txSizeWhenOpen); }
public void Count_of_items_will_remain_fixed_after_dequeueing_without_flushing() { using (var queue = new PersistentQueue(path)) { queue.Internals.ParanoidFlushing = false; using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Enqueue(Guid.NewGuid().ToByteArray()); } session.Flush(); } using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Dequeue(); } Assert.IsNull(session.Dequeue()); // session.Flush(); explicitly removed } } using (var queue = new PersistentQueue(path)) { Assert.AreEqual(10, queue.EstimatedCountOfItemsInQueue); } }
public void Can_handle_truncated_start_transaction_seperator() { var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(BitConverter.GetBytes(j)); session.Flush(); } } } using (var txLog = txLogInfo.Open(FileMode.Open)) { txLog.SetLength(5); // truncate log to halfway through start marker txLog.Flush(); } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { Assert.IsNull(session.Dequeue());// the last transaction was corrupted session.Flush(); } } }
public void Can_handle_truncated_start_transaction_seperator() { var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(BitConverter.GetBytes(j)); session.Flush(); } } } using (var txLog = txLogInfo.Open(FileMode.Open)) { txLog.SetLength(5);// corrupt last transaction txLog.Flush(); } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { Assert.IsNull(session.Dequeue());// the last transaction was corrupted session.Flush(); } } }
public void Count_of_items_will_remain_fixed_after_dequeqing_without_flushing() { using (var queue = new PersistentQueue(path)) { queue.Internals.ParanoidFlushing = false; using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Enqueue(Guid.NewGuid().ToByteArray()); } session.Flush(); } using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Dequeue(); } Assert.IsNull(session.Dequeue()); // session.Flush(); explicitly removed } } using (var queue = new PersistentQueue(path)) { Assert.AreEqual(10, queue.EstimatedCountOfItemsInQueue); } }
public void Dequeing_from_empty_queue_will_return_null() { using (var queue = new PersistentQueue(Path)) using (var session = queue.OpenSession()) { Assert.IsNull(session.Dequeue()); } }
internal static void EnqueueMixpanelQueue(PersistentQueue persistentQueue, Value data) { using (PersistentQueueSession session = persistentQueue.OpenSession()) { session.Enqueue(Encoding.UTF8.GetBytes(JsonUtility.ToJson(data))); SeembaMixpanel.Put(data); session.Flush(); } }
public void Can_enqueue_data_in_queue() { using (var queue = new PersistentQueue(Path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } }
private void Enqueue(string queueName, string data) { using (var queue = PersistentQueue.WaitFor(Path.Combine(queryRoot, queueName), TimeSpan.FromSeconds(30))) using (var session = queue.OpenSession()) { session.Enqueue(Encoding.UTF8.GetBytes(data)); session.Flush(); } }
public void Queueing_and_dequeueing_empty_data_is_handled() { using (var queue = new PersistentQueue(Path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[0]); session.Flush(); CollectionAssert.AreEqual(new byte[0], session.Dequeue()); } }
public void Can_dequeue_data_from_queue() { using (var queue = new PersistentQueue(Path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, session.Dequeue()); } }
private void DoFlush(string url, PersistentQueue queue) { int depth = queue.CurrentCountOfItemsInQueue; int count = (depth / BatchSize) + (depth % BatchSize != 0 ? 1 : 0); for (int i = 0; i < count; i++) { StartCoroutine(DoRequest(url, queue)); } }
public void AddingString_UpdatesInputQueue() { var inputQueue = new PersistentQueue <InputItem>(null, new Session { Attributes = new Dictionary <string, object>() }, "testQueue"); inputQueue.Enqueue("test"); Assert.That(inputQueue.LastItem().Value, Is.EqualTo("test")); }
public void Can_dequeue_data_from_queue() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, session.Dequeue()); } }
void AddToQueue(byte[] data) { Thread.Sleep(150); using (var queue = PersistentQueue.WaitFor(SharedStorage, TimeSpan.FromSeconds(30))) using (var session = queue.OpenSession()) { session.Enqueue(data); session.Flush(); } }
byte[] ReadQueue() { Thread.Sleep(150); using (var queue = PersistentQueue.WaitFor(SharedStorage, TimeSpan.FromSeconds(30))) using (var session = queue.OpenSession()) { var data = session.Dequeue(); session.Flush(); return(data); } }
private IEnumerator DoRequest(string url, PersistentQueue queue, int retryCount = 0) { int count = 0; Value batch = Mixpanel.ArrayPool.Get(); using (PersistentQueueSession session = queue.OpenSession()) { while (count < BatchSize) { byte[] data = session.Dequeue(); if (data == null) { break; } batch.Add(JsonUtility.FromJson <Value>(Encoding.UTF8.GetString(data))); ++count; } // If the batch is empty don't send the request if (count == 0) { yield break; } string payload = Convert.ToBase64String(Encoding.UTF8.GetBytes(batch.ToString())); if (MixpanelSettings.Instance.ShowDebug) { Debug.Log($"[Mixpanel] Sending Request - '{url}' with payload '{payload}'"); } WWWForm form = new WWWForm(); form.AddField("data", payload); UnityWebRequest request = UnityWebRequest.Post(url, form); yield return(request.SendWebRequest()); while (!request.isDone) { yield return(new WaitForEndOfFrame()); } if (!request.isNetworkError && !request.isHttpError) { session.Flush(); Mixpanel.Put(batch); yield break; } if (retryCount > RetryMaxTries) { yield break; } } retryCount += 1; // 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 = 2046 seconds total yield return(new WaitForSecondsRealtime((float)Math.Pow(2, retryCount))); StartCoroutine(DoRequest(url, queue, retryCount)); }
public async Task SimpleTest() { var item = new TestDTO(); var config = new PersistentQueueConfiguration(_queueName); config.DataDirectory = Path.GetTempPath(); var sut = new PersistentQueue<TestDTO>(config); await sut.EnqueueAsync(item); var actual = await sut.DequeueAsync(); actual.Id.Should().Be(item.Id); actual.UserName.Should().Be(item.UserName); }
public void Can_enter_items_and_get_count_of_items() { using (var queue = new PersistentQueue(path)) { for (byte i = 0; i < 5; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(5, queue.EstimatedCountOfItemsInQueue); } }
public void After_dequeue_from_queue_item_no_longer_on_queue() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, session.Dequeue()); Assert.IsNull(session.Dequeue()); session.Flush(); } }
public void If_data_stream_is_truncated_will_raise_error() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } using (var fs = new FileStream(Path.Combine(path, "data.0"), FileMode.Open)) { fs.SetLength(2);//corrupt the file } using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Dequeue(); } }
public void Dequeue_items_that_were_not_flushed_will_appear_after_queue_restart() { using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Enqueue(Guid.NewGuid().ToByteArray()); } session.Flush(); } using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Dequeue(); } Assert.IsNull(session.Dequeue()); // session.Flush(); explicitly removed } } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int j = 0; j < 10; j++) { session.Dequeue(); } Assert.IsNull(session.Dequeue()); session.Flush(); } } }
public void Entering_more_than_count_of_items_will_work() { using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 11; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(11, queue.EstimatedCountOfItemsInQueue); } }
public void When_creating_more_items_than_allowed_in_first_file_will_create_additional_file() { using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 11; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } }
public void Dequeing_from_empty_queue_will_return_null() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { Assert.IsNull(session.Dequeue()); } }
public void Truncated_transaction_is_ignored_and_can_continue_to_add_items_to_queue() { var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { queue.Internals.ParanoidFlushing = false; using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(BitConverter.GetBytes(j)); session.Flush(); } } } using (var txLog = txLogInfo.Open(FileMode.Open)) { txLog.SetLength(txLog.Length - 5);// corrupt last transaction txLog.Flush(); } using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { using (var session = queue.OpenSession()) { for (int j = 20; j < 40; j++) { session.Enqueue(BitConverter.GetBytes(j)); } session.Flush(); } } var data = new List<int>(); using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { var dequeue = session.Dequeue(); while (dequeue != null) { data.Add(BitConverter.ToInt32(dequeue, 0)); dequeue = session.Dequeue(); } session.Flush(); } } var expected = 0; foreach (var i in data) { if (expected == 19) continue; Assert.AreEqual(expected, data[i]); expected++; } }
public void If_tx_log_grows_too_large_it_will_be_trimmed_while_queue_is_in_operation() { var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path) { SuggestedMaxTransactionLogSize = 32 // single entry }) { queue.Internals.ParanoidFlushing = false; using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(Guid.NewGuid().ToByteArray()); } session.Flush(); } // there is no way optimize here, so we should get expected size, even though it is bigger than // what we suggested as the max txLogInfo.Refresh(); long txSizeWhenOpen = txLogInfo.Length; using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Dequeue(); } Assert.IsNull(session.Dequeue()); session.Flush(); } txLogInfo.Refresh(); Assert.Less(txLogInfo.Length, txSizeWhenOpen); } }
public void Two_sessions_off_the_same_queue_cannot_get_same_item() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } using (var queue = new PersistentQueue(path)) using (var session2 = queue.OpenSession()) using (var session1 = queue.OpenSession()) { CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, session1.Dequeue()); Assert.IsNull(session2.Dequeue()); } }
public void Can_enqueue_data_in_queue() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } }
public void Can_limit_amount_of_items_in_queue_file() { using (IPersistentQueue queue = new PersistentQueue(path, 10)) { Assert.AreEqual(10, queue.MaxFileSize); } }
public void Can_resume_writing_to_second_file_when_restart_queue() { using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 11; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } using (var queue = new PersistentQueue(path, 10)) { for (byte i = 0; i < 2; i++) { using (var session = queue.OpenSession()) { session.Enqueue(new[] { i }); session.Flush(); } } Assert.AreEqual(1, queue.Internals.CurrentFileNumber); } }
public void Not_flushing_the_session_will_revert_dequequed_items_two_sessions_same_queue() { using (var queue = new PersistentQueue(path)) using (var session = queue.OpenSession()) { session.Enqueue(new byte[] { 1, 2, 3, 4 }); session.Flush(); } using (var queue = new PersistentQueue(path)) using (var session2 = queue.OpenSession()) { using (var session1 = queue.OpenSession()) { CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, session1.Dequeue()); //Explicitly ommitted: session.Flush(); } CollectionAssert.AreEqual(new byte[] { 1, 2, 3, 4 }, session2.Dequeue()); session2.Flush(); } }
public void Truncated_transaction_is_ignored() { var txLogInfo = new FileInfo(Path.Combine(path, "transaction.log")); using (var queue = new PersistentQueue(path) { // avoid auto tx log trimming TrimTransactionLogOnDispose = false }) { queue.Internals.ParanoidFlushing = false; using (var session = queue.OpenSession()) { for (int j = 0; j < 20; j++) { session.Enqueue(BitConverter.GetBytes(j)); session.Flush(); } } } using (var txLog = txLogInfo.Open(FileMode.Open)) { txLog.SetLength(txLog.Length - 5);// corrupt last transaction txLog.Flush(); } using (var queue = new PersistentQueue(path)) { using (var session = queue.OpenSession()) { for (int j = 0; j < 19; j++) { Assert.AreEqual(j, BitConverter.ToInt32(session.Dequeue(), 0)); } Assert.IsNull(session.Dequeue());// the last transaction was corrupted session.Flush(); } } }