/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* See LICENSE.txt included in this distribution for the specific
* language governing permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at LICENSE.txt.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
*/
package org.opensolaris.opengrok.index;
import java.io.IOException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opensolaris.opengrok.configuration.RuntimeEnvironment;
import org.opensolaris.opengrok.history.HistoryGuru;
import org.opensolaris.opengrok.util.TestRepository;
/**
* Test cleanup of renamed thread pool after indexing.
* @author Vladimir Kotal
*/
public class IndexerRepoTest {
TestRepository repository;
private String ctagsProperty = "org.opensolaris.opengrok.analysis.Ctags";
@BeforeClass
public static void setUpClass() throws Exception {
assertTrue("No point in running indexer tests without valid ctags",
RuntimeEnvironment.getInstance().validateExuberantCtags());
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp() throws IOException {
repository = new TestRepository();
// For these tests we need Mercurial repository with renamed files.
repository.create(HistoryGuru.class.getResourceAsStream("repositories.zip"));
}
@After
public void tearDown() {
repository.destroy();
}
private void checkNumberOfThreads() {
/*
* There should not be any threads in the renamed pool now.
* We need to check it like this since the test framework tears
* down the threads at the end of the test case run so any
* hangs due to executors not being shut down would not be visible.
*/
ThreadGroup mainGroup = Thread.currentThread().getThreadGroup();
Thread[] threads = new Thread[mainGroup.activeCount()];
mainGroup.enumerate(threads);
for (int i = 0; i < threads.length; i++) {
if (threads[i].getName() == null) {
continue;
}
assertEquals(false, threads[i].getName().contains("renamed-handling"));
}
}
@Test
public void testMainWithH() throws IOException {
System.out.println("Generate index by using command line options with -H");
RuntimeEnvironment env = RuntimeEnvironment.getInstance();
env.setCtags(System.getProperty(ctagsProperty, "ctags"));
if (env.validateExuberantCtags()) {
String[] argv = {"-S", "-H", "-s", repository.getSourceRoot(),
"-d", repository.getDataRoot(), "-v"};
Indexer.main(argv);
checkNumberOfThreads();
} else {
System.out.println("Skipping test. Could not find a ctags I could use in path.");
}
}
@Test
public void testMainWithoutH() throws IOException {
System.out.println("Generate index by using command line options without -H");
RuntimeEnvironment env = RuntimeEnvironment.getInstance();
env.setCtags(System.getProperty(ctagsProperty, "ctags"));
if (env.validateExuberantCtags()) {
String[] argv = {"-S", "-P", "-s", repository.getSourceRoot(),
"-d", repository.getDataRoot(), "-v"};
Indexer.main(argv);
checkNumberOfThreads();
} else {
System.out.println("Skipping test. Could not find a ctags I could use in path.");
}
}
}