001: /*-
002: * See the file LICENSE for redistribution information.
003: *
004: * Copyright (c) 2002,2008 Oracle. All rights reserved.
005: *
006: * $Id: DbLsnTest.java,v 1.17.2.3 2008/01/07 15:14:34 cwl Exp $
007: */
008:
009: package com.sleepycat.je.util;
010:
011: import java.io.File;
012:
013: import junit.framework.TestCase;
014:
015: import com.sleepycat.je.DbInternal;
016: import com.sleepycat.je.Environment;
017: import com.sleepycat.je.EnvironmentConfig;
018: import com.sleepycat.je.log.FileManager;
019: import com.sleepycat.je.utilint.DbLsn;
020:
021: public class DbLsnTest extends TestCase {
022: long[] values = { 0xFF, 0xFFFF, 0xFFFFFF, 0x7FFFFFFF, 0xFFFFFFFFL };
023:
024: public void testDbLsn() {
025: for (int i = 0; i < values.length; i++) {
026: long value = values[i];
027: long lsn = DbLsn.makeLsn(value, value);
028: assertTrue((DbLsn.getFileNumber(lsn) == value)
029: && (DbLsn.getFileOffset(lsn) == value));
030: }
031: }
032:
033: public void testComparableEquality() {
034: /* Test equality */
035:
036: /* Don't bother with last values[] entry -- it makes NULL_LSN. */
037: int lastValue = values.length - 1;
038: for (int i = 0; i < lastValue; i++) {
039: long value = values[i];
040: long lsn1 = DbLsn.makeLsn(value, value);
041: long lsn2 = DbLsn.makeLsn(value, value);
042: assertTrue(DbLsn.compareTo(lsn1, lsn2) == 0);
043: }
044:
045: /* Check NULL_LSN. */
046: assertTrue(DbLsn.makeLsn(values[lastValue], values[lastValue]) == DbLsn
047: .makeLsn(values[lastValue], values[lastValue]));
048: }
049:
050: public void testComparableNullPointerException() {
051: /* Check that compareTo throws NullPointerException */
052:
053: try {
054: long lsn1 = DbLsn.makeLsn(0, 0);
055: DbLsn.compareTo(lsn1, DbLsn.NULL_LSN);
056: fail("compareTo(null) didn't throw NullPointerException");
057: } catch (NullPointerException NPE) {
058: }
059:
060: try {
061: long lsn1 = DbLsn.makeLsn(0, 0);
062: DbLsn.compareTo(DbLsn.NULL_LSN, lsn1);
063: fail("compareTo(null) didn't throw NullPointerException");
064: } catch (NullPointerException NPE) {
065: }
066: }
067:
068: public void testComparableInequalityFileNumber() {
069: /* Check for inequality in the file number */
070:
071: /* Don't bother with last values[] entry -- it makes NULL_LSN. */
072: int lastValue = values.length - 1;
073: for (int i = 0; i < lastValue; i++) {
074: long value = values[i];
075: long lsn1 = DbLsn.makeLsn(value, value);
076: long lsn2 = DbLsn.makeLsn(0, value);
077: assertTrue(DbLsn.compareTo(lsn1, lsn2) == 1);
078: assertTrue(DbLsn.compareTo(lsn2, lsn1) == -1);
079: }
080:
081: /* Check against NULL_LSN. */
082: long lsn1 = DbLsn.makeLsn(values[lastValue], values[lastValue]);
083: long lsn2 = DbLsn.makeLsn(0, values[lastValue]);
084: try {
085: assertTrue(DbLsn.compareTo(lsn1, lsn2) == 1);
086: } catch (NullPointerException NPE) {
087: }
088:
089: try {
090: assertTrue(DbLsn.compareTo(lsn2, lsn1) == 1);
091: } catch (NullPointerException NPE) {
092: }
093: }
094:
095: public void testComparableInequalityFileOffset() {
096: /* Check for inequality in the file offset */
097:
098: for (int i = 0; i < values.length - 1; i++) {
099: long value = values[i];
100: long lsn1 = DbLsn.makeLsn(value, value);
101: long lsn2 = DbLsn.makeLsn(value, 0);
102: /* Can't compareTo(NULL_LSN). */
103: if (lsn1 != DbLsn.NULL_LSN && lsn2 != DbLsn.NULL_LSN) {
104: assertTrue(DbLsn.compareTo(lsn1, lsn2) == 1);
105: assertTrue(DbLsn.compareTo(lsn2, lsn1) == -1);
106: }
107: }
108: }
109:
110: public void testSubtractNoCleaning() {
111: long a = DbLsn.makeLsn(1, 10);
112: long b = DbLsn.makeLsn(3, 40);
113: assertEquals(230, DbLsn.getNoCleaningDistance(b, a, 100));
114: assertEquals(230, DbLsn.getNoCleaningDistance(a, b, 100));
115:
116: long c = DbLsn.makeLsn(1, 50);
117: assertEquals(40, DbLsn.getNoCleaningDistance(a, c, 100));
118: assertEquals(40, DbLsn.getNoCleaningDistance(c, a, 100));
119: }
120:
121: public void testSubtractWithCleaning() throws Exception {
122:
123: /* Try with non-consecutive files (due to cleaning). */
124:
125: File envHome = new File(System.getProperty(TestUtils.DEST_DIR));
126: TestUtils.removeLogFiles("TestSubtract", envHome, false);
127: EnvironmentConfig envConfig = TestUtils.initEnvConfig();
128: envConfig.setAllowCreate(true);
129: Environment env = new Environment(envHome, envConfig);
130:
131: try {
132: File file1 = new File(envHome, "00000001.jdb");
133: File file2 = new File(envHome, "00000003.jdb");
134: file1.createNewFile();
135: file2.createNewFile();
136: long a = DbLsn.makeLsn(1, 10);
137: long b = DbLsn.makeLsn(3, 40);
138: FileManager fileManager = DbInternal.envGetEnvironmentImpl(
139: env).getFileManager();
140: assertEquals(130, DbLsn.getWithCleaningDistance(b,
141: fileManager, a, 100));
142: assertEquals(130, DbLsn.getWithCleaningDistance(a,
143: fileManager, b, 100));
144:
145: long c = DbLsn.makeLsn(1, 50);
146: assertEquals(40, DbLsn.getWithCleaningDistance(a,
147: fileManager, c, 100));
148: assertEquals(40, DbLsn.getWithCleaningDistance(c,
149: fileManager, a, 100));
150: } finally {
151: env.close();
152: }
153: }
154: }
|