public String getEffort() {
return StringUtils.lowerCase(project.getConfiguration().getString(CoreProperties.FINDBUGS_EFFORT_PROPERTY, CoreProperties.FINDBUGS_EFFORT_DEFAULT_VALUE));
}
+
+ public long getTimeout() {
+ return project.getConfiguration().getLong(CoreProperties.FINDBUGS_TIMEOUT_PROPERTY, FindbugsConstants.FINDBUGS_TIMEOUT_DEFAULT_VALUE);
+ }
}
import java.io.File;
import java.io.OutputStream;
import java.io.PrintStream;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
/**
* @since 2.4
engine.finishSettings();
- engine.execute();
+ Executors.newSingleThreadExecutor()
+ .submit(new FindbugsTask(engine))
+ .get(configuration.getTimeout(), TimeUnit.MILLISECONDS);
profiler.stop();
return xmlReport;
}
}
+ private class FindbugsTask implements Callable<Object> {
+ private FindBugs2 engine;
+
+ public FindbugsTask(FindBugs2 engine) {
+ this.engine = engine;
+ }
+
+ public Object call() throws Exception {
+ engine.execute();
+ return null;
+ }
+ }
}
import org.apache.commons.io.FileUtils;
import org.junit.Test;
+import org.sonar.api.utils.SonarException;
import edu.umd.cs.findbugs.Project;
FindbugsConfiguration conf = mockConf();
File report = new File("target/test-tmp/findbugs-report.xml");
when(conf.getTargetXMLReport()).thenReturn(report);
- FindbugsExecutor executor = new FindbugsExecutor(conf);
- executor.execute();
+
+ new FindbugsExecutor(conf).execute();
assertThat(report.exists(), is(true));
assertThat(FileUtils.readFileToString(report), containsString("<BugInstance"));
}
+ @Test(expected = SonarException.class)
+ public void shouldTerminateOnTimeout() throws Exception {
+ FindbugsConfiguration conf = mockConf();
+ when(conf.getTimeout()).thenReturn(1L);
+
+ new FindbugsExecutor(conf).execute();
+ }
+
private FindbugsConfiguration mockConf() throws Exception {
FindbugsConfiguration conf = mock(FindbugsConfiguration.class);
Project project = new Project();
when(conf.saveExcludeConfigXml()).thenReturn(new File("test-resources/findbugs-exclude.xml"));
when(conf.saveIncludeConfigXml()).thenReturn(new File("test-resources/findbugs-include.xml"));
when(conf.getEffort()).thenReturn("default");
+ when(conf.getTimeout()).thenReturn(FindbugsConstants.FINDBUGS_TIMEOUT_DEFAULT_VALUE);
return conf;
}