1   /*** 
2    * 
3    * Copyright 2004 Protique Ltd
4    * 
5    * Licensed under the Apache License, Version 2.0 (the "License"); 
6    * you may not use this file except in compliance with the License. 
7    * You may obtain a copy of the License at 
8    * 
9    * http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS, 
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
14   * See the License for the specific language governing permissions and 
15   * limitations under the License. 
16   * 
17   **/
18  package org.codehaus.activemq.store.bdb;
19  
20  import com.sleepycat.je.*;
21  import junit.framework.TestCase;
22  
23  /***
24   * @version $Revision: 1.2 $
25   */
26  public class OrderTest extends TestCase {
27      protected Environment env;
28      protected Database database;
29      protected TransactionConfig transactionConfig = new TransactionConfig();
30      protected DatabaseConfig config = BDbHelper.createDatabaseConfig();
31      protected SecondaryCursor cursor;
32      protected Transaction transaction;
33      protected SecondaryDatabase secondaryDatabase;
34      protected SecondaryConfig secondaryConfig = new SecondaryConfig();
35  
36  
37      public void testOrder() throws Exception {
38          doInsert("B", "b123");
39          doInsert("D", "d123");
40          doInsert("A", "a123");
41          doInsert("C", "c123");
42  
43          // now lets iterate through
44          DatabaseEntry keyEntry = new DatabaseEntry();
45          DatabaseEntry valueEntry = new DatabaseEntry();
46          DatabaseEntry counterEntry = new DatabaseEntry();
47          assertStatusOK(cursor.getFirst(counterEntry, keyEntry, valueEntry, LockMode.DEFAULT));
48          printKeyValue(counterEntry, keyEntry, valueEntry);
49          while (true) {
50              OperationStatus status = cursor.getNext(counterEntry, keyEntry, valueEntry, LockMode.DEFAULT);
51              System.out.println("Status: " + status);
52  
53              if (status != OperationStatus.SUCCESS) {
54                  break;
55              }
56              printKeyValue(counterEntry, keyEntry, valueEntry);
57          }
58      }
59  
60      private void printKeyValue(DatabaseEntry counterEntry, DatabaseEntry keyEntry, DatabaseEntry valueEntry) {
61          System.out.println("Got row with counter: " + BDbHelper.longFromBytes(counterEntry.getData())
62                  + " key: " + asString(keyEntry) + " and value: " + asString(valueEntry));
63      }
64  
65  
66      protected void doInsert(String key, String value) throws DatabaseException {
67          assertStatusOK(database.put(transaction, asEntry(key), asEntry(value)));
68      }
69  
70      protected void assertStatusOK(OperationStatus status) {
71          assertEquals("Status should be OK", OperationStatus.SUCCESS, status);
72      }
73  
74      protected DatabaseEntry asEntry(String key) {
75          return new DatabaseEntry(key.getBytes());
76      }
77  
78      protected String asString(DatabaseEntry entry) {
79          return new String(entry.getData(), entry.getOffset(), entry.getSize());
80      }
81  
82      protected void setUp() throws Exception {
83          env = BDbQueueMessageContainerTest.createEnvironment();
84  
85          database = env.openDatabase(null, "orderTest", config);
86  
87          secondaryConfig.setKeyCreator(new StubSecondaryKeyGenerator());
88          secondaryConfig.setAllowCreate(true);
89          secondaryConfig.setAllowPopulate(true);
90          secondaryConfig.setTransactional(true);
91          secondaryDatabase = env.openSecondaryDatabase(null, "orderIndexTest", database, secondaryConfig);
92  
93          transaction = env.beginTransaction(null, null);
94          cursor = secondaryDatabase.openSecondaryCursor(transaction, null);
95      }
96  
97      protected void tearDown() throws Exception {
98          /*
99          transaction.commit();
100         cursor.close();
101         database.close();
102         env.close();
103         */
104     }
105 
106 }