From 898f6155cabbbe43a4cd50d01ec90754ff139929 Mon Sep 17 00:00:00 2001 From: Teryk Bellahsene Date: Wed, 10 Jan 2018 14:04:56 +0100 Subject: [PATCH] SONAR-10154 CacheWriter closes encapsulated writer once --- .../sonar/server/platform/ws/IndexAction.java | 2 +- .../java/org/sonar/server/ws/CacheWriter.java | 7 +++++++ .../org/sonar/server/ws/CacheWriterTest.java | 17 ++++++++++++++++- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/IndexAction.java b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/IndexAction.java index 4c69bd77017..6079ef8110b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/ws/IndexAction.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/ws/IndexAction.java @@ -80,7 +80,7 @@ public class IndexAction implements WsAction { json.beginObject(); i18n.getPropertyKeys().forEach(messageKey -> json.prop(messageKey, i18n.message(locale, messageKey, messageKey))); json.endObject(); - json.endObject().close(); + json.endObject(); } } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/ws/CacheWriter.java b/server/sonar-server/src/main/java/org/sonar/server/ws/CacheWriter.java index b6cfb60b9d3..c91bdb9c787 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/ws/CacheWriter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/ws/CacheWriter.java @@ -30,10 +30,12 @@ import org.apache.commons.io.IOUtils; class CacheWriter extends Writer { private final StringWriter bufferWriter; private final Writer outputWriter; + private boolean isClosed; CacheWriter(Writer outputWriter) { this.bufferWriter = new StringWriter(); this.outputWriter = outputWriter; + this.isClosed = false; } @Override @@ -48,7 +50,12 @@ class CacheWriter extends Writer { @Override public void close() throws IOException { + if (isClosed) { + return; + } + IOUtils.write(bufferWriter.toString(), outputWriter); outputWriter.close(); + this.isClosed = true; } } diff --git a/server/sonar-server/src/test/java/org/sonar/server/ws/CacheWriterTest.java b/server/sonar-server/src/test/java/org/sonar/server/ws/CacheWriterTest.java index aa498624698..fcddbce55fa 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/ws/CacheWriterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/ws/CacheWriterTest.java @@ -21,12 +21,16 @@ package org.sonar.server.ws; import java.io.IOException; import java.io.StringWriter; +import java.io.Writer; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; public class CacheWriterTest { - private StringWriter writer = new StringWriter(); + private Writer writer = new StringWriter(); private CacheWriter underTest = new CacheWriter(writer); @Test @@ -38,4 +42,15 @@ public class CacheWriterTest { assertThat(writer.toString()).isEqualTo("content"); } + + @Test + public void close_encapsulated_writer_once() throws IOException { + writer = mock(Writer.class); + underTest = new CacheWriter(writer); + + underTest.close(); + underTest.close(); + + verify(writer, times(1)).close(); + } } -- 2.39.5