aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-css-plugin
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-css-plugin')
-rw-r--r--sonar-css-plugin/css-bundle/src/server.ts7
-rw-r--r--sonar-css-plugin/css-bundle/tests/server.test.ts9
-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
5 files changed, 66 insertions, 0 deletions
diff --git a/sonar-css-plugin/css-bundle/src/server.ts b/sonar-css-plugin/css-bundle/src/server.ts
index 93bb6cb..e9c66c0 100644
--- a/sonar-css-plugin/css-bundle/src/server.ts
+++ b/sonar-css-plugin/css-bundle/src/server.ts
@@ -27,6 +27,13 @@ export function start(port = 0): Promise<Server> {
resp.send("OK!")
);
+ app.post("/close", (_req: express.Request, resp: express.Response) => {
+ console.log("DEBUG stylelint-bridge server will shutdown");
+ resp.end(() => {
+ server.close();
+ });
+ });
+
// every time something is wrong we log error and send empty response (with 0 issues)
// it's important to keep this call last in configuring "app"
app.use(
diff --git a/sonar-css-plugin/css-bundle/tests/server.test.ts b/sonar-css-plugin/css-bundle/tests/server.test.ts
index 84fc617..8574129 100644
--- a/sonar-css-plugin/css-bundle/tests/server.test.ts
+++ b/sonar-css-plugin/css-bundle/tests/server.test.ts
@@ -167,3 +167,12 @@ describe("server", () => {
return postToServer(data, endpoint, server);
}
});
+
+describe("server close", () => {
+ it("should stop listening when closed", async () => {
+ const server = await start();
+ expect(server.listening).toBeTruthy();
+ await postToServer("", "/close", server);
+ expect(server.listening).toBeFalsy();
+ });
+});
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}`)
+});
+