]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10154 CacheWriter closes encapsulated writer once
authorTeryk Bellahsene <teryk.bellahsene@sonarsource.com>
Wed, 10 Jan 2018 13:04:56 +0000 (14:04 +0100)
committerTeryk Bellahsene <teryk@users.noreply.github.com>
Thu, 11 Jan 2018 11:22:56 +0000 (12:22 +0100)
server/sonar-server/src/main/java/org/sonar/server/platform/ws/IndexAction.java
server/sonar-server/src/main/java/org/sonar/server/ws/CacheWriter.java
server/sonar-server/src/test/java/org/sonar/server/ws/CacheWriterTest.java

index 4c69bd770177bd7a866093e5d92c93462d6c75ec..6079ef8110b70074645a9a440af84ceb56323773 100644 (file)
@@ -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();
     }
   }
 }
index b6cfb60b9d3cb364141ad2a658220be715304e62..c91bdb9c787ad29d1477aed8760bd803dae35551 100644 (file)
@@ -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;
   }
 }
index aa498624698108fcacbbc1f9e4fdc7443a631b72..fcddbce55fa6fe4a3d39287e3bee22e6ca65573a 100644 (file)
@@ -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();
+  }
 }