From 6ec0b4ca815d390c6441acf535f0c0e5281e6f32 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 9 Oct 2014 14:17:18 +0100 Subject: [PATCH] Only consider letters when checking if a name is upper-case MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, for a string to be considered upper-case, EmbeddedServerPortFileWriter required every character in the string to be upper-case. This meant that strings containing numbers were considered lower-case even if every letter in the string was upper-case. OS X’s case-preserving, case-insensitive file system masked this problem as the tests were still able to find the created file, even though the case of its name was not as expected. This commit updates EmbeddedServerPortFileWriter to only require characters that are letters (as defined by Character.isLetter()) to be upper-case. It also updates the tests to verify that the case of the created file’s name is correct in such a way that it will fail, even on OS X, when it is not. Fixes gh-1676 --- .../system/EmbeddedServerPortFileWriter.java | 5 ++++- .../EmbeddedServerPortFileWriterTests.java | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriter.java b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriter.java index 2bf26637e6..539cf1bc13 100644 --- a/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriter.java +++ b/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriter.java @@ -35,6 +35,8 @@ import org.springframework.util.StringUtils; * * @author David Liu * @author Phillip Webb + * @author Andy Wilkinson + * * @since 1.2.0 */ public class EmbeddedServerPortFileWriter implements @@ -122,7 +124,8 @@ public class EmbeddedServerPortFileWriter implements private boolean isUpperCase(String name) { for (int i = 0; i < name.length(); i++) { - if (!Character.isUpperCase(name.charAt(i))) { + if (Character.isLetter(name.charAt(i)) + && !Character.isUpperCase(name.charAt(i))) { return false; } } diff --git a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriterTests.java b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriterTests.java index 31f9455e9a..5393cf0c55 100644 --- a/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriterTests.java +++ b/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/system/EmbeddedServerPortFileWriterTests.java @@ -18,6 +18,8 @@ package org.springframework.boot.actuate.system; import java.io.File; import java.io.FileReader; +import java.util.HashSet; +import java.util.Set; import org.junit.After; import org.junit.Before; @@ -31,6 +33,7 @@ import org.springframework.util.FileCopyUtils; import org.springframework.util.StringUtils; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasItem; import static org.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; @@ -40,6 +43,7 @@ import static org.mockito.Mockito.mock; * * @author David Liu * @author Phillip Webb + * @author Andy Wilkinson */ public class EmbeddedServerPortFileWriterTests { @@ -84,6 +88,7 @@ public class EmbeddedServerPortFileWriterTests { + StringUtils.getFilenameExtension(file.getName()); assertThat(FileCopyUtils.copyToString(new FileReader(new File(file .getParentFile(), managementFile))), equalTo("9090")); + assertThat(collectFileNames(file.getParentFile()), hasItem(managementFile)); } @Test @@ -99,7 +104,7 @@ public class EmbeddedServerPortFileWriterTests { + StringUtils.getFilenameExtension(file.getName()); assertThat(FileCopyUtils.copyToString(new FileReader(new File(file .getParentFile(), managementFile))), equalTo("9090")); - + assertThat(collectFileNames(file.getParentFile()), hasItem(managementFile)); } private EmbeddedServletContainerInitializedEvent mockEvent(String name, int port) { @@ -112,4 +117,14 @@ public class EmbeddedServerPortFileWriterTests { return event; } + private Set collectFileNames(File directory) { + Set names = new HashSet(); + if (directory.isDirectory()) { + for (File file : directory.listFiles()) { + names.add(file.getName()); + } + } + return names; + } + }