Ejemplo n.º 1
0
        public void MsgQueueFileStore_Basic()
        {
            MsgQueueFileStore store = null;
            int           count;
            QueuedMsgInfo msgInfo;
            QueuedMsg     msg, msgTest;
            object        persistID;

            ClearFolders();

            try
            {
                store = new MsgQueueFileStore(root);
                store.Open();

                // Should initialize with no persisted messages

                Assert.AreEqual(0, store.Count);
                count = 0;
                foreach (QueuedMsgInfo i in store)
                {
                    count++;
                }
                Assert.AreEqual(0, store.Count);

                // Try some basic operations while the store is open.

                msg            = new QueuedMsg();
                msg.TargetEP   = "logical://target";
                msg.ResponseEP = "logical://response";
                msg.SessionID  = Helper.NewGuid();
                msg.SendTime   = new DateTime(2000, 1, 1);
                msg.ExpireTime = new DateTime(2000, 1, 2);
                msg.Body       = "Hello World!";

                msgInfo = new QueuedMsgInfo(null, msg);
                Assert.IsNull(store.GetPersistID(msg.ID));
                store.Add(msgInfo, msg);

                Assert.AreEqual(1, store.Count);
                count = 0;
                foreach (QueuedMsgInfo i in store)
                {
                    count++;
                }

                Assert.AreEqual(1, store.Count);

                persistID = store.GetPersistID(msg.ID);
                Assert.IsNotNull(persistID);

                msgTest = store.Get(persistID);
                msgTest.DeserializedBody();
                Assert.AreEqual(msg, msgTest);

                store.SetDeliveryAttempt(persistID, 10, new DateTime(2001, 1, 1));
                msgInfo = store.GetInfo(persistID);
                Assert.AreEqual(10, msgInfo.DeliveryAttempts);
                Assert.AreEqual(new DateTime(2001, 1, 1), msgInfo.DeliveryTime);

                store.SetPriority(persistID, DeliveryPriority.Low);
                msgInfo = store.GetInfo(persistID);
                Assert.AreEqual(DeliveryPriority.Low, msgInfo.Priority);
                msgTest = store.Get(persistID);
                msgTest.DeserializedBody();
                Assert.AreEqual(DeliveryPriority.Low, msgTest.Priority);

                store.Modify(persistID, "logical://target2", new DateTime(2002, 1, 1), new DateTime(2002, 1, 2), DeliveryStatus.Poison);
                msgInfo = store.GetInfo(persistID);
                Assert.AreEqual((MsgEP)"logical://target2", msgInfo.TargetEP);
                Assert.AreEqual(new DateTime(2002, 1, 1), msgInfo.DeliveryTime);
                Assert.AreEqual(new DateTime(2002, 1, 2), msgInfo.ExpireTime);
                Assert.AreEqual(DeliveryStatus.Poison, msgInfo.Status);
                msgTest = store.Get(persistID);
                msgTest.DeserializedBody();
                Assert.AreEqual(DeliveryPriority.Low, msgTest.Priority);
                Assert.AreEqual(new DateTime(2002, 1, 2), msgTest.ExpireTime);

                Assert.AreEqual((MsgEP)"logical://target2", msgTest.TargetEP);
                Assert.AreEqual(msg.ID, msgTest.ID);
                Assert.AreEqual(msg.SessionID, msgTest.SessionID);
                Assert.AreEqual(msg.SendTime, msgTest.SendTime);
                Assert.AreEqual(new DateTime(2002, 1, 2), msgTest.ExpireTime);
                Assert.AreEqual(msg.Body, msgTest.Body);

                store.Remove(persistID);
                Assert.AreEqual(0, store.Count);
                Assert.IsNull(store.GetPersistID(msg.ID));
                Assert.IsNull(store.Get(persistID));
                msgTest.DeserializedBody();
                Assert.IsNull(store.GetInfo(persistID));

                // Persist another message and then close and reopen
                // the store and confirm that the message is still
                // there.

                msg            = new QueuedMsg();
                msg.TargetEP   = "logical://target2";
                msg.ResponseEP = "logical://response2";
                msg.SessionID  = Helper.NewGuid();
                msg.SendTime   = new DateTime(2000, 1, 1);
                msg.ExpireTime = new DateTime(2000, 1, 2);
                msg.Body       = "Hello World!";

                msgInfo = new QueuedMsgInfo(null, msg);
                store.Add(msgInfo, msg);

                store.Close();
                store = new MsgQueueFileStore(root);
                store.Open();

                persistID = store.GetPersistID(msg.ID);
                Assert.IsNotNull(persistID);

                msgTest = store.Get(persistID);
                msgTest.DeserializedBody();
                Assert.AreEqual(msg, msgTest);
            }
            finally
            {
                if (store != null)
                {
                    store.Close();
                }
            }
        }