blob: 18164fb8e10a08e253a834a62c5a9c850395f66d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Francois Chouinard - Initial API and implementation
* Francois Chouinard - Adapted for TMF Trace Model 1.0
* Alexandre Montplaisir - Port to JUnit4
* Marc-Andre Laperle - Adapted to BTree indexer from TmfCheckpointIndexTest
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.tests.trace.indexer.checkpoint;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.File;
import org.eclipse.tracecompass.internal.tmf.core.trace.indexer.BTree;
import org.eclipse.tracecompass.internal.tmf.core.trace.indexer.FlatArray;
import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
import org.eclipse.tracecompass.tmf.core.trace.indexer.TmfBTreeTraceIndexer;
import org.eclipse.tracecompass.tmf.core.trace.indexer.checkpoint.ITmfCheckpointIndex;
import org.junit.Test;
/**
* Test suite for the TmfBTreeTraceIndexer class.
*
* @author Marc-Andre Laperle
*/
public class TmfBTreeIndexTest extends AbstractIndexTest {
/**
* Create the indexer for testing
*
* @param trace
* the trace
* @return the indexer for testing
*/
@Override
protected ITestIndexer createTestIndexer(TestTrace trace) {
return new TestBTreeIndexer(trace);
}
private static class TestBTreeIndexer extends TmfBTreeTraceIndexer implements ITestIndexer {
public TestBTreeIndexer(TestTrace testTrace) {
super(testTrace, BLOCK_SIZE);
}
@Override
public ITmfCheckpointIndex getCheckpoints() {
return getTraceIndex();
}
}
/**
* Test that a fully built index has the same content when reloaded from disk
*
* @throws Exception when error occurs
*/
@Test
public void testReopenIndex() throws Exception {
fTrace.dispose();
fTrace = createTrace(getTracePath());
assertFalse(fTrace.getIndexer().getCheckpoints().isCreatedFromScratch());
fTrace.indexTrace(true);
verifyIndexContent();
}
/**
* Test that the indexer can resume from a partially built index reloaded
* from disk
*
* @throws Exception
* when error occurs
*/
@Test
public void testInsertAfterReopenIndex() throws Exception {
// Make sure we start from a completely non-existing index
fTrace.dispose();
String directory = TmfTraceManager.getSupplementaryFileDir(fTrace);
new File(directory + BTree.INDEX_FILE_NAME).delete();
new File(directory + FlatArray.INDEX_FILE_NAME).delete();
// Index half of the trace
fNbEventsLimit = NB_EVENTS / 2;
fTrace = createTrace(getTracePath());
assertTrue(fTrace.getIndexer().getCheckpoints().isCreatedFromScratch());
// The trace should not have been indexed completely
assertEquals(fNbEventsLimit, fTrace.getNbEvents());
// Finish indexing the trace
fNbEventsLimit = Long.MAX_VALUE;
fTrace = createTrace(getTracePath());
assertFalse(fTrace.getIndexer().getCheckpoints().isCreatedFromScratch());
verifyIndexContent();
}
}