From: Stephane Gamard Date: Thu, 7 Aug 2014 11:55:12 +0000 (+0200) Subject: SONAR-4898 - Created a DummyOKApplication for Unit test of ProcessWrapper X-Git-Tag: 4.5-RC1~217 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b4695eb44ce28f23e302b33bb95eafbdfefe6a2e;p=sonarqube.git SONAR-4898 - Created a DummyOKApplication for Unit test of ProcessWrapper --- diff --git a/server/sonar-process-test/pom.xml b/server/sonar-process-test/pom.xml new file mode 100644 index 00000000000..67b012ae4d2 --- /dev/null +++ b/server/sonar-process-test/pom.xml @@ -0,0 +1,87 @@ + + + + org.codehaus.sonar + server + 4.5-SNAPSHOT + ../ + + 4.0.0 + + sonar-process-test + jar + SonarQube :: Search + Wrapper to start Elasticsearch + + + + org.codehaus.sonar + sonar-process + ${project.version} + + + org.elasticsearch + elasticsearch + + + com.google.code.findbugs + jsr305 + provided + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + runtime + + + + + junit + junit + test + + + org.easytesting + fest-assert + test + + + org.mockito + mockito-core + test + + + org.hamcrest + hamcrest-all + test + + + + + + org.apache.maven.plugins + maven-shade-plugin + 2.3 + + + package + + shade + + + true + + + + + + + diff --git a/server/sonar-process-test/src/main/java/org/sonar/DummyOKApplication.java b/server/sonar-process-test/src/main/java/org/sonar/DummyOKApplication.java new file mode 100644 index 00000000000..a862e1b3ab3 --- /dev/null +++ b/server/sonar-process-test/src/main/java/org/sonar/DummyOKApplication.java @@ -0,0 +1,39 @@ +package org.sonar; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.sonar.process.MonitoredProcess; +import org.sonar.process.Props; + +import java.util.Properties; + +public class DummyOKApplication extends MonitoredProcess { + + private static final Logger LOGGER = LoggerFactory.getLogger(DummyOKApplication.class); + + protected DummyOKApplication(Props props) throws Exception { + super(props); + } + + @Override + protected void doStart() { + LOGGER.info("Starting Dummy OK Process"); + } + + @Override + protected void doTerminate() { + LOGGER.info("Terminating Dummy OK Process"); + } + + @Override + protected boolean doIsReady() { + return false; + } + + public static void main(String... args) throws Exception { + Props props = new Props(new Properties()); + props.set(MonitoredProcess.NAME_PROPERTY, DummyOKApplication.class.getSimpleName()); + new DummyOKApplication(props).start(); + System.exit(1); + } +} diff --git a/server/sonar-process-test/src/main/resources/org/sonar/search/logback.xml b/server/sonar-process-test/src/main/resources/org/sonar/search/logback.xml new file mode 100644 index 00000000000..648ece82e28 --- /dev/null +++ b/server/sonar-process-test/src/main/resources/org/sonar/search/logback.xml @@ -0,0 +1,35 @@ + + + + + + + + ${sonar.path.logs}/search.log + + + + + + + + + + + + %d{yyyy.MM.dd HH:mm:ss} %-5level [%logger{20}] %X %msg%n + + + + + + + + + + diff --git a/server/sonar-process-test/src/test/resources/logback-test.xml b/server/sonar-process-test/src/test/resources/logback-test.xml new file mode 100644 index 00000000000..ff2270cc122 --- /dev/null +++ b/server/sonar-process-test/src/test/resources/logback-test.xml @@ -0,0 +1,38 @@ + + + + + + + + + INFO + ACCEPT + DENY + + + + %d{yyyy.MM.dd HH:mm:ss} %-5level %msg%n + + + + + + + + %d{yyyy.MM.dd HH:mm:ss} %-5level %msg%n + + + + + + + + + + diff --git a/server/sonar-process/src/main/java/org/sonar/process/MonitoredProcess.java b/server/sonar-process/src/main/java/org/sonar/process/MonitoredProcess.java index 20cf4e62a07..96cea190695 100644 --- a/server/sonar-process/src/main/java/org/sonar/process/MonitoredProcess.java +++ b/server/sonar-process/src/main/java/org/sonar/process/MonitoredProcess.java @@ -96,6 +96,8 @@ public abstract class MonitoredProcess implements ProcessMXBean { @Override public final void terminate() { if (monitor != null) { + Logger logger = LoggerFactory.getLogger(getClass()); + logger.debug("Process[{}] terminating", name); monitor.shutdownNow(); monitor = null; if (pingTask != null) { @@ -108,6 +110,7 @@ public abstract class MonitoredProcess implements ProcessMXBean { LoggerFactory.getLogger(getClass()).error("Fail to terminate " + name, e); // do not propagate exception } + logger.debug("Process[{}] terminated", name); } } diff --git a/server/sonar-search/src/test/java/org/sonar/search/SearchServerTest.java b/server/sonar-search/src/test/java/org/sonar/search/SearchServerTest.java index 05b073a1a51..8bc1f4bca66 100644 --- a/server/sonar-search/src/test/java/org/sonar/search/SearchServerTest.java +++ b/server/sonar-search/src/test/java/org/sonar/search/SearchServerTest.java @@ -79,6 +79,34 @@ public class SearchServerTest { } } + @Test + public void server_fail_to_start() throws Exception { + Properties properties = new Properties(); + properties.setProperty(MonitoredProcess.NAME_PROPERTY, "ES"); + + + searchServer = new SearchServer(new Props(properties)); + new Thread(new Runnable() { + @Override + public void run() { + searchServer.start(); + } + }).start(); + assertThat(searchServer.isReady()).isFalse(); + + int count = 0; + while (!searchServer.isReady() && count < 100) { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + count++; + } + assertThat(count).isEqualTo(100); + + } + @Test public void can_connect() throws Exception { Properties properties = new Properties();