public void PersistRestore()
        {
            const string storeName = "TestStore";

            var message = new MyMessage();

            // clean up
            QueueStorage.DeleteQueue(QueueName);
            foreach (var skey in QueueStorage.ListPersisted(storeName))
            {
                QueueStorage.DeletePersisted(storeName, skey);
            }

            // put
            QueueStorage.Put(QueueName, message);

            // get
            var retrieved = QueueStorage.Get <MyMessage>(QueueName, 1).First();

            Assert.AreEqual(message.MyGuid, retrieved.MyGuid, "#A01");

            // persist
            QueueStorage.Persist(retrieved, storeName, "manual test");

            // abandon should fail (since not invisible anymore)
            Assert.IsFalse(QueueStorage.Abandon(retrieved), "#A02");

            // list persisted message
            var key = QueueStorage.ListPersisted(storeName).Single();

            // get persisted message
            var persisted = QueueStorage.GetPersisted(storeName, key);

            Assert.IsTrue(persisted.HasValue, "#A03");
            Assert.IsTrue(persisted.Value.DataXml.HasValue, "#A04");
            var xml      = persisted.Value.DataXml.Value;
            var property = xml.Elements().Single(x => x.Name.LocalName == "MyGuid");

            Assert.AreEqual(message.MyGuid, new Guid(property.Value), "#A05");

            // restore persisted message
            QueueStorage.RestorePersisted(storeName, key);

            // list no longer contains key
            Assert.IsFalse(QueueStorage.ListPersisted(storeName).Any(), "#A06");

            // get
            var retrieved2 = QueueStorage.Get <MyMessage>(QueueName, 1).First();

            Assert.AreEqual(message.MyGuid, retrieved2.MyGuid, "#A07");

            // delete
            Assert.IsTrue(QueueStorage.Delete(retrieved2), "#A08");
        }