diff options
| author | Tibor Blenessy | 2020-01-13 11:44:34 +0100 | 
|---|---|---|
| committer | GitHub | 2020-01-13 11:44:34 +0100 | 
| commit | 13d52b7dd495c68c72ad8ab3f5063307bf42cfad (patch) | |
| tree | 057fd574afec4bd7f32283088c9fa2d8b8c66360 /sonar-css-plugin/src | |
| parent | c0ba07e77931f187a788c7b1ab5420ead525e3d3 (diff) | |
| download | sonar-css-13d52b7dd495c68c72ad8ab3f5063307bf42cfad.tar.bz2 | |
Implement close endpoint to shutdown the Node.js process (#243)
Diffstat (limited to 'sonar-css-plugin/src')
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}`) +}); + | 
