aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-css-plugin/src
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-css-plugin/src')
-rw-r--r--sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServer.java13
-rw-r--r--sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java9
-rw-r--r--sonar-css-plugin/src/test/resources/mock-start-server/failedClose.js28
3 files changed, 50 insertions, 0 deletions
diff --git a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServer.java b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServer.java
index b998f4f..424021a 100644
--- a/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServer.java
+++ b/sonar-css-plugin/src/main/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServer.java
@@ -238,11 +238,24 @@ public class CssAnalyzerBridgeServer implements Startable {
void clean() {
if (nodeCommand != null) {
+ callClose();
nodeCommand.destroy();
nodeCommand = null;
}
}
+ private void callClose() {
+ okhttp3.Request request = new okhttp3.Request.Builder()
+ .url(url("close"))
+ .post(RequestBody.create(MediaType.get("application/json"), ""))
+ .build();
+ try (Response response = client.newCall(request).execute()) {
+ // nothing to do here
+ } catch (IOException e) {
+ LOG.warn("Failed to close stylelint-bridge server", e);
+ }
+ }
+
private HttpUrl url(String endpoint) {
HttpUrl.Builder builder = new HttpUrl.Builder();
return builder
diff --git a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java
index d0a2c2f..a880b14 100644
--- a/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java
+++ b/sonar-css-plugin/src/test/java/org/sonar/css/plugin/server/CssAnalyzerBridgeServerTest.java
@@ -215,6 +215,15 @@ public class CssAnalyzerBridgeServerTest {
}
@Test
+ public void should_log_warning_when_failed_to_close() throws Exception {
+ cssAnalyzerBridgeServer = createCssAnalyzerBridgeServer("failedClose.js");
+ cssAnalyzerBridgeServer.startServerLazily(context);
+ cssAnalyzerBridgeServer.stop();
+ assertThat(logTester.logs(WARN)).contains("Failed to close stylelint-bridge server");
+ }
+
+
+ @Test
public void should_fail_if_bad_json_response() throws Exception {
cssAnalyzerBridgeServer = createCssAnalyzerBridgeServer(START_SERVER_SCRIPT);
cssAnalyzerBridgeServer.deploy(context.fileSystem().workDir());
diff --git a/sonar-css-plugin/src/test/resources/mock-start-server/failedClose.js b/sonar-css-plugin/src/test/resources/mock-start-server/failedClose.js
new file mode 100644
index 0000000..3c0039e
--- /dev/null
+++ b/sonar-css-plugin/src/test/resources/mock-start-server/failedClose.js
@@ -0,0 +1,28 @@
+#!/usr/bin/env node
+
+const http = require('http');
+const port = process.argv[2];
+
+const requestHandler = (request, response) => {
+ let data = [];
+ request.on('data', chunk => {
+ data.push(chunk);
+ });
+ if (request.url === '/status') {
+ response.writeHead(200, {'Content-Type': 'text/plain'});
+ response.end('OK!');
+ } else {
+ throw "Failure";
+ }
+};
+
+const server = http.createServer(requestHandler);
+
+server.listen(port, (err) => {
+ if (err) {
+ return console.log('something bad happened', err)
+ }
+
+ console.log(`server is listening on ${port}`)
+});
+