KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sleepycat > je > cleaner > SR13061Test


1 /*-
2  * See the file LICENSE for redistribution information.
3  *
4  * Copyright (c) 2005,2006 Oracle. All rights reserved.
5  *
6  * $Id: SR13061Test.java,v 1.4 2006/10/30 21:14:42 bostic Exp $
7  */

8
9 package com.sleepycat.je.cleaner;
10
11 import junit.framework.TestCase;
12
13 import com.sleepycat.bind.tuple.TupleOutput;
14 import com.sleepycat.je.DatabaseException;
15 import com.sleepycat.je.cleaner.FileSummary;
16 import com.sleepycat.je.tree.FileSummaryLN;
17
18 /**
19  * Tests that a FileSummaryLN with an old style string key can be read. When
20  * we relied solely on log entry version to determine whether an LN had a
21  * string key, we could fail when an old style LN was migrated by the cleaner.
22  * In that case the key was still a string key but the log entry version was
23  * updated to something greater than zero. See FileSummaryLN.hasStringKey for
24  * details of how we now guard against this.
25  */

26 public class SR13061Test extends TestCase {
27
28     public SR13061Test() {
29     }
30
31     public void testSR13061()
32     throws DatabaseException {
33
34         FileSummaryLN ln = new FileSummaryLN(new FileSummary());
35
36         /*
37          * All of these tests failed before checking that the byte array must
38          * be eight bytes for integer keys.
39          */

40         assertTrue(ln.hasStringKey(stringKey(0)));
41         assertTrue(ln.hasStringKey(stringKey(1)));
42         assertTrue(ln.hasStringKey(stringKey(12)));
43         assertTrue(ln.hasStringKey(stringKey(123)));
44         assertTrue(ln.hasStringKey(stringKey(1234)));
45         assertTrue(ln.hasStringKey(stringKey(12345)));
46         assertTrue(ln.hasStringKey(stringKey(123456)));
47         assertTrue(ln.hasStringKey(stringKey(1234567)));
48         assertTrue(ln.hasStringKey(stringKey(123456789)));
49         assertTrue(ln.hasStringKey(stringKey(1234567890)));
50
51         /*
52          * These tests failed before checking that the first byte of the
53          * sequence number (in an eight byte key) must not be '0' to '9' for
54          * integer keys.
55          */

56         assertTrue(ln.hasStringKey(stringKey(12345678)));
57         assertTrue(ln.hasStringKey(stringKey(12340000)));
58
59         /* These tests are just for good measure. */
60         assertTrue(!ln.hasStringKey(intKey(0, 1)));
61         assertTrue(!ln.hasStringKey(intKey(1, 1)));
62         assertTrue(!ln.hasStringKey(intKey(12, 1)));
63         assertTrue(!ln.hasStringKey(intKey(123, 1)));
64         assertTrue(!ln.hasStringKey(intKey(1234, 1)));
65         assertTrue(!ln.hasStringKey(intKey(12345, 1)));
66         assertTrue(!ln.hasStringKey(intKey(123456, 1)));
67         assertTrue(!ln.hasStringKey(intKey(1234567, 1)));
68         assertTrue(!ln.hasStringKey(intKey(12345678, 1)));
69         assertTrue(!ln.hasStringKey(intKey(123456789, 1)));
70         assertTrue(!ln.hasStringKey(intKey(1234567890, 1)));
71     }
72
73     private byte[] stringKey(long fileNum) {
74
75         try {
76             return String.valueOf(fileNum).getBytes("UTF-8");
77         } catch (Exception JavaDoc e) {
78             fail(e.toString());
79             return null;
80         }
81     }
82
83     private byte[] intKey(long fileNum, long seqNum) {
84
85         TupleOutput out = new TupleOutput();
86         out.writeUnsignedInt(fileNum);
87         out.writeUnsignedInt(seqNum);
88         return out.toByteArray();
89     }
90 }
91
Popular Tags