File: DbLsnTest.java

package info (click to toggle)
libdb-je-java 3.3.98-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 13,052 kB
  • sloc: java: 153,077; xml: 2,034; makefile: 3
file content (158 lines) | stat: -rw-r--r-- 4,962 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/*-
 * See the file LICENSE for redistribution information.
 *
 * Copyright (c) 2002,2010 Oracle.  All rights reserved.
 *
 * $Id: DbLsnTest.java,v 1.20.2.2 2010/01/04 15:30:48 cwl Exp $
 */

package com.sleepycat.je.util;

import java.io.File;

import junit.framework.TestCase;

import com.sleepycat.je.DbInternal;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.log.FileManager;
import com.sleepycat.je.utilint.DbLsn;

public class DbLsnTest extends TestCase {
    long[] values = { 0xFF, 0xFFFF, 0xFFFFFF, 0x7FFFFFFF, 0xFFFFFFFFL };

    public void testDbLsn() {
	for (int i = 0; i < values.length; i++) {
	    long value = values[i];
	    long lsn = DbLsn.makeLsn(value, value);
	    assertTrue((DbLsn.getFileNumber(lsn) == value) &&
		       (DbLsn.getFileOffset(lsn) == value));
	}
    }

    public void testComparableEquality() {
	/* Test equality */

	/* Don't bother with last values[] entry -- it makes NULL_LSN. */
	int lastValue = values.length - 1;
	for (int i = 0; i < lastValue; i++) {
	    long value = values[i];
	    long lsn1 = DbLsn.makeLsn(value, value);
	    long lsn2 = DbLsn.makeLsn(value, value);
	    assertTrue(DbLsn.compareTo(lsn1, lsn2) == 0);
	}

	/* Check NULL_LSN. */
	assertTrue(DbLsn.makeLsn(values[lastValue],
				 values[lastValue]) ==
		   DbLsn.makeLsn(values[lastValue],
				 values[lastValue]));
    }

    public void testComparableNullPointerException() {
	/* Check that compareTo throws NullPointerException */

	try {
	    long lsn1 = DbLsn.makeLsn(0, 0);
	    DbLsn.compareTo(lsn1, DbLsn.NULL_LSN);
	    fail("compareTo(null) didn't throw NullPointerException");
	} catch (NullPointerException NPE) {
	}

	try {
	    long lsn1 = DbLsn.makeLsn(0, 0);
	    DbLsn.compareTo(DbLsn.NULL_LSN, lsn1);
	    fail("compareTo(null) didn't throw NullPointerException");
	} catch (NullPointerException NPE) {
	}
    }

    public void testComparableInequalityFileNumber() {
	/* Check for inequality in the file number */

	/* Don't bother with last values[] entry -- it makes NULL_LSN. */
	int lastValue = values.length - 1;
	for (int i = 0; i < lastValue; i++) {
	    long value = values[i];
	    long lsn1 = DbLsn.makeLsn(value, value);
	    long lsn2 = DbLsn.makeLsn(0, value);
	    assertTrue(DbLsn.compareTo(lsn1, lsn2) == 1);
	    assertTrue(DbLsn.compareTo(lsn2, lsn1) == -1);
	}

	/* Check against NULL_LSN. */
	long lsn1 = DbLsn.makeLsn(values[lastValue], values[lastValue]);
	long lsn2 = DbLsn.makeLsn(0, values[lastValue]);
	try {
	    assertTrue(DbLsn.compareTo(lsn1, lsn2) == 1);
	} catch (NullPointerException NPE) {
	}

	try {
	    assertTrue(DbLsn.compareTo(lsn2, lsn1) == 1);
	} catch (NullPointerException NPE) {
	}
    }

    public void testComparableInequalityFileOffset() {
	/* Check for inequality in the file offset */

	for (int i = 0; i < values.length - 1; i++) {
	    long value = values[i];
	    long lsn1 = DbLsn.makeLsn(value, value);
	    long lsn2 = DbLsn.makeLsn(value, 0);
	    /* Can't compareTo(NULL_LSN). */
	    if (lsn1 != DbLsn.NULL_LSN &&
		lsn2 != DbLsn.NULL_LSN) {
		assertTrue(DbLsn.compareTo(lsn1, lsn2) == 1);
		assertTrue(DbLsn.compareTo(lsn2, lsn1) == -1);
	    }
	}
    }

    public void testSubtractNoCleaning() {
        long a = DbLsn.makeLsn(1, 10);
        long b = DbLsn.makeLsn(3, 40);
        assertEquals(230, DbLsn.getNoCleaningDistance(b, a, 100));
        assertEquals(230, DbLsn.getNoCleaningDistance(a, b, 100));

        long c = DbLsn.makeLsn(1, 50);
        assertEquals(40, DbLsn.getNoCleaningDistance(a, c, 100));
        assertEquals(40, DbLsn.getNoCleaningDistance(c, a, 100));
    }

    public void testSubtractWithCleaning()
        throws Exception {

        /* Try with non-consecutive files (due to cleaning). */

        File envHome = new File(System.getProperty(TestUtils.DEST_DIR));
        TestUtils.removeLogFiles("TestSubtract", envHome, false);
        EnvironmentConfig envConfig = TestUtils.initEnvConfig();
        envConfig.setAllowCreate(true);
        Environment env = new Environment(envHome, envConfig);

        try {
            File file1 = new File (envHome, "00000001.jdb");
            File file2 = new File (envHome, "00000003.jdb");
            file1.createNewFile();
            file2.createNewFile();
            long a = DbLsn.makeLsn(1, 10);
            long b = DbLsn.makeLsn(3, 40);
            FileManager fileManager =
                DbInternal.envGetEnvironmentImpl(env).getFileManager();
            assertEquals(130, DbLsn.getWithCleaningDistance
			 (b, fileManager, a, 100));
            assertEquals(130, DbLsn.getWithCleaningDistance
			 (a, fileManager, b, 100));

            long c = DbLsn.makeLsn(1, 50);
            assertEquals(40, DbLsn.getWithCleaningDistance
			 (a, fileManager, c, 100));
            assertEquals(40, DbLsn.getWithCleaningDistance
			 (c, fileManager, a, 100));
        } finally {
            env.close();
        }
    }
}