[ 
https://issues.apache.org/jira/browse/QPID-2194?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12777102#action_12777102
 ] 

Steve Huston commented on QPID-2194:
------------------------------------

The python test suite sounds like a good idea. With regard to the data dir, 
though, it needs to have a way to deal with persistence that doesn't store in a 
data-dir directory. For example, if stored in SQL, it's not so easy to just 
delete a directory or a file. There should be some kind of hook to allow 
reaching out to SQL, or some other mechanism.

> Universal store client test suite
> ---------------------------------
>
>                 Key: QPID-2194
>                 URL: https://issues.apache.org/jira/browse/QPID-2194
>             Project: Qpid
>          Issue Type: Test
>          Components: C++ Broker
>            Reporter: Kim van der Riet
>         Attachments: Qpid Persistence Provider Test Plan V2.3.pdf
>
>
> <Transferred from the [email protected] mailing list>
> It would be a good idea to standardize store tests if we can. If we can agree 
> that no matter what store is used, the end-result from a client perspective 
> would be the same, then tests would be fairly universal and can be run 
> against any store module.
> All tests outlined below (which are based on some of the current async store 
> tests) assume a clean broker start with the store module loaded (with no 
> store content on disk) and stopping broker on conclusion for each test (which 
> may or may not leave messages in the store) - so there needs to be some 
> mechanism to clean up store artifacts between tests. However, if tests are 
> carefully constructed, it may be possible to avoid a disk cleanup between 
> tests by ensuring exchange and queue names do not overlap between tests. No 
> test should leave the store in an unrecoverable state.
> Tests marked (SERVER-SIDE) may need to be run from the broker itself or on 
> the same machine as the broker in order to gain access to store artifacts.
> Suggestions welcome.
> Kim
> ----------------------------------
> SimpleTest.CreateDelete:  (SERVER-SIDE) Create a persistent queue and delete 
> it again, making sure that the disk artifacts (db tables, files) are created 
> and destroyed as appropriate to the implementation.
> SimpleTest.EmptyRecover: Start stop and restart broker without creating any 
> queues.
> SimpleTest.QueueCreate: Create a persistent queue. Stop broker and restart 
> it. Make sure queue exists after recovery, and that its persistence ID is 
> unchanged.
> SimpleTest.QueueCreateWithSettings: Create a persistent queue with a content 
> policy. Stop and restart broker. Make sure queue exists after recovery, and 
> that its policy is still set with the correct limits.
> SimpleTest.QueueDestroy: Create a persistent queue, then destroy it. Stop 
> broker, then restart. Make sure the queue does not exist.
> SimpleTest.Enqueue: Create a persistent queue. Send three messages to the 
> queue. Stop and restart the broker. Deqeueue the messages, checking the 
> content. Make sure no extra messages exist in the queue.
> SimpleTest.Dequeue: Create a persistent queue. Send three messages to the 
> queue, then consume them. Stop the broker. Restart the broker. Make sure no 
> messages exist in the queue.
> SimpleTest.Staging: Set the frame size to a small value - this will ensure 
> that the message will arrive in parts over the wire. Create a persistent 
> queue with a size policy. Send both a transient and a persistent message 
> which is larger than the size policy and the frame size. This will force the 
> broker to release the content of the message to disk in parts. Now browse the 
> messages, making sure that they are correctly read from the store. Check that 
> the messages are still on the queue. Now stop the broker, then restart. First 
> browse, then consume the messages, making sure the content is as expected. 
> Make sure no other messages remain.
> SimpleTest.DestroyStagedMessage: Create a persistent queue with a size 
> policy. Send both a transient and a persistent message which is larger than 
> the size policy. This will force the broker to release the content of the 
> message to disk. Now consume the messages, making sure that it is correctly 
> read from the store. Now stop the broker, then restart. Make sure no messages 
> are present.
> SimpleTest.ExchangeCreateAndDestroy: Create a persistent exchange. Stop and 
> restart broker. Check exchange still exists. Destroy exchange. Stop and 
> restart broker. Make sure exchange does not exist.
> SimpleTest.ExchangeBindAndUnbind: Create a persistent exchange, a persistent 
> queue and bind them. Stop and restart the broker. Unbind the exchange and the 
> queue. Stop and restart the broker. Check that the exchange and queue are 
> unbound.
> SimpleTest.ExchangeBindAndUnbindWithArgs: Create a persistent exchange with 
> args, a persistent queue and bind them. Stop and restart the broker. Check 
> that the args are still set on the exchange. Unbind the exchange and the 
> queue. Stop and restart the broker. Check that the args are still set on the 
> exchange. Check that the exchange and queue are unbound.
> SimpleTest.ExchangeImplicitUnbind: Create persistent exchange and two 
> persistent queues. Bind both queues to exchange. Destroy one of the queues. 
> Stop and restart broker. Ensure that only one queue remains, and is still 
> bound to the exchange. Delete the exchange. Stop and restart broker. Make 
> sure remaining queue still exists, but is not bound. Delete remaining queue.
> OrderingTest.Basic: Create a persistent queue. Produce 10 messages to the 
> queue. Stop and restart the broker. Consume the 10 messages, making sure that 
> the order is correct.
> OrderingTest.Cycle: Create a persistent queue. Send 10 messages to the queue. 
> Consume 5 messages from the queue, then send another 5 messages to the queue. 
> Stop and restart the broker. Consume the 10 messages, making sure that the 
> order is correct.
> TransactionalTest.Commit: Create two queues. Send a message to queue 1. 
> Opening a transaction, consume the message from queue 1, then send it to 
> queue 2. Commit the transaction, then stop and restart the broker. Check both 
> queues exist. Check queue 1 is empty and queue 2 contains the message.
> TransactionalTest.Abort: Create two queues. Send a message to queue 1. Open a 
> transaction, consume the message from queue 1, then send it to queue 2. Abort 
> the transaction, then stop and restart the broker. Check both queues exist. 
> Check queue 1 contains the message and queue 2 is empty.
> TransactionalTest.MultiQueueCommit: Create a fanout exchange. Create two 
> queues, binding them to the exchange. Transactionally send two messages to 
> the exchange (each queue should contain a copy of each message). Commit the 
> transaction. Stop and restart the exchange. Ensure that both messages exist 
> on both queues. Consume both messages from both queues. Make sure both queues 
> are now empty.
> TransactionalTest.MultiQueueAbort: Create a fanout exchange. Create two 
> queues, binding them to the exchange. Transactionally send two messages to 
> the exchange (each queue should contain a copy of each message). Abort the 
> transaction. Stop and restart the exchange. Make sure both queues are empty.
> TwoPhaseCommitTest.CommitEnqueue: Create two queues. Using a 2PC transaction, 
> send three messages to the first queue. Prepare and commit the transaction. 
> Stop and restart the broker. Consume the three messages from the first queue, 
> checking their content. Check that the second queue is empty.
> TwoPhaseCommitTest.CommitDequeue: Create two queues. Send three messages to 
> the first queue. Using a 2PC transaction, consume the three messages from the 
> first queue, checking their content. Prepare and commit the transaction. Stop 
> and restart the broker. Check that all queues are empty.
> TwoPhaseCommitTest.CommitSwap: Create two queues. Send a message to the first 
> queue. Using a 2PC transaction, consume the message from the first queue and 
> then send that message to the second queue. Prepare and commit the 
> transaction. Stop and restart the broker. Check that the first queue is 
> empty. Consume the message from the second queue, checking its content.
> TwoPhaseCommitTest.PrepareAndAbortEnqueue: Create two queues. Using a 2PC 
> transaction, send three messages to the first queue. Prepare then
> abort the transaction. Stop and restart the broker. Check that all queues are 
> empty.
> TwoPhaseCommitTest.PrepareAndAbortDequeue: Create two queues. Send three 
> messages to the first queue. Using a 2PC transaction, consume the three 
> messages from the first queue, checking their content. Prepare then abort the 
> transaction. Stop and restart the broker. Consume the three messages from the 
> first queue, checking their content. Check that the second queue is empty.
> TwoPhaseCommitTest.PrepareAndAbortSwap: Create two queues. Send a message to 
> the first queue. Using a 2PC transaction, consume the message from the first 
> queue and then send that message to the second queue. Prepare then abort the 
> transaction. Stop and restart the broker. Consume the message from the first 
> queue, checking its content. Check that the second queue is empty.
> TwoPhaseCommitTest.AbortNoPrepareEnqueue: Create two queues. Using a 2PC 
> transaction, send three messages to the first queue. Abort the transaction 
> without a prepare. Stop and restart the broker.  Check that all queues are 
> empty.
> TwoPhaseCommitTest.AbortNoPrepareDequeue: Create two queues. Send three 
> messages to the first queue. Using a 2PC transaction, consume the three
> messages from the first queue, checking their content. Abort the transaction 
> without a prepare. Stop and restart the broker. Consume the three messages 
> from the first queue, checking their content. Check that the second queue is 
> empty.
> TwoPhaseCommitTest.AbortNoPrepareSwap: Create two queues. Send a message to 
> the first queue. Using a 2PC transaction, consume the message from the first 
> queue and then send that message to the second queue. Abort the transaction 
> without a prepare. Stop and restart the broker. Consume the message from the 
> first queue, checking its content. Check that the second queue is empty.
> TwoPhaseCommitTest.Prepared: Create two queues. Send a message to the first 
> queue. Using a 2PC transaction, consume the message from the first queue and 
> then send that message to the second queue. Prepare the transaction, but do 
> not commit or abort. Stop and restart the broker. We assume that prepared 
> transactions roll forward on recovery. Check that the first queue is empty. 
> Consume the message from the second queue, checking its content.
> TwoPhaseCommitTest.MultiQueueCommit: Create two queues, and bind them to a 
> fanout exchange. Using a 2PC transaction, send two messages. Both messages 
> should be on both queues. Prepare, then commit the transaction. Stop and 
> restart the broker. Consume both messages from each of the two queues, 
> checking their content.
> TwoPhaseCommitTest.MultiQueueAbort: Create two queues, and bind them to a 
> fanout exchange. Using a 2PC transaction, send two messages. Both messages 
> should be on both queues. Prepare, then abort the transaction. Stop and 
> restart the broker. Check that both queues are empty.
> TwoPhaseCommitTest.MultiQueuePrepare: Create two queues, and bind them to a 
> fanout exchange. Using a 2PC transaction, send two messages. Both messages 
> should be on both queues. Prepare the transaction, but neither commit nor 
> abort it.  Stop and restart the broker. We assume that prepared transactions 
> roll forward on recovery.  Consume both messages from each of the two queues, 
> checking their content.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:[email protected]

Reply via email to