[COLLECTIONS-833] Intermittent failure in EmptyPropertiesTest
Ignore second line of properties files since contain a timestamp, which is a problem when the time ticks to the next second within some tests
This commit is contained in:
parent
6ba199c691
commit
f1e2c878b8
|
@ -31,16 +31,39 @@ import java.io.ByteArrayOutputStream;
|
|||
import java.io.IOException;
|
||||
import java.io.PrintStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.apache.commons.io.input.NullReader;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class EmptyPropertiesTest {
|
||||
|
||||
/**
|
||||
* Returns the first line from multi-lined string separated by a line separator character
|
||||
*
|
||||
* @param x the multi-lined String
|
||||
* @return the first line from x
|
||||
*/
|
||||
private String getFirstLine(final String x) {
|
||||
return x.split("\\R", 2)[0];
|
||||
}
|
||||
|
||||
private PrintStream newPrintStream(final ByteArrayOutputStream baos) throws UnsupportedEncodingException {
|
||||
return new PrintStream(baos, true, StandardCharsets.UTF_8.name());
|
||||
}
|
||||
|
||||
private String removeLine2(final ByteArrayOutputStream baos) {
|
||||
return removeLine2(toString(baos));
|
||||
}
|
||||
|
||||
private String removeLine2(final String x) {
|
||||
final String[] s = x.split("\\R", 2);
|
||||
return s[0] + System.lineSeparator() + (s.length > 2 ? s[2] : "");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testClear() {
|
||||
PropertiesFactory.EMPTY_PROPERTIES.clear();
|
||||
|
@ -133,8 +156,7 @@ public class EmptyPropertiesTest {
|
|||
|
||||
@Test
|
||||
public void testHashCode() {
|
||||
assertEquals(PropertiesFactory.EMPTY_PROPERTIES.hashCode(),
|
||||
PropertiesFactory.EMPTY_PROPERTIES.hashCode());
|
||||
assertEquals(PropertiesFactory.EMPTY_PROPERTIES.hashCode(), PropertiesFactory.EMPTY_PROPERTIES.hashCode());
|
||||
// Should be equals?
|
||||
// assertEquals(PropertiesFactory.EMPTY_PROPERTIES.hashCode(), new Properties().hashCode());
|
||||
}
|
||||
|
@ -184,7 +206,8 @@ public class EmptyPropertiesTest {
|
|||
|
||||
@Test
|
||||
public void testLoadFromXML() throws IOException {
|
||||
assertThrows(UnsupportedOperationException.class, () -> PropertiesFactory.EMPTY_PROPERTIES.loadFromXML(new ByteArrayInputStream(ArrayUtils.EMPTY_BYTE_ARRAY)));
|
||||
assertThrows(UnsupportedOperationException.class,
|
||||
() -> PropertiesFactory.EMPTY_PROPERTIES.loadFromXML(new ByteArrayInputStream(ArrayUtils.EMPTY_BYTE_ARRAY)));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -265,35 +288,25 @@ public class EmptyPropertiesTest {
|
|||
PropertiesFactory.INSTANCE.createProperties().store(expected, comments);
|
||||
|
||||
// Properties.store stores the specified comment appended with current time stamp in the next line
|
||||
String expectedComment = getFirstLine(expected.toString("UTF-8"));
|
||||
String actualComment = getFirstLine(actual.toString("UTF-8"));
|
||||
assertEquals(expectedComment, actualComment, () ->
|
||||
String.format("Expected String '%s' with length '%s'", expectedComment, expectedComment.length()));
|
||||
final String expectedComment = getFirstLine(expected.toString("UTF-8"));
|
||||
final String actualComment = getFirstLine(actual.toString("UTF-8"));
|
||||
assertEquals(expectedComment, actualComment,
|
||||
() -> String.format("Expected String '%s' with length '%s'", expectedComment, expectedComment.length()));
|
||||
expected.reset();
|
||||
try (PrintStream out = new PrintStream(expected)) {
|
||||
new Properties().store(out, comments);
|
||||
}
|
||||
String[] expectedLines = expected.toString(StandardCharsets.UTF_8.displayName()).split("\\n");
|
||||
String[] actualLines = actual.toString(StandardCharsets.UTF_8.displayName()).split("\\n");
|
||||
final String[] expectedLines = expected.toString(StandardCharsets.UTF_8.displayName()).split("\\n");
|
||||
final String[] actualLines = actual.toString(StandardCharsets.UTF_8.displayName()).split("\\n");
|
||||
assertEquals(expectedLines.length, actualLines.length);
|
||||
// The assertion below checks that the comment is the same in both files
|
||||
assertEquals(expectedLines[0], actualLines[0]);
|
||||
// N.B.: We must not expect expectedLines[1] and actualLines[1] to have the same value as
|
||||
// it contains the timestamp of when the data was written to the stream, which makes
|
||||
// this test brittle, causing intermitent failures, see COLLECTIONS-812
|
||||
// it contains the timestamp of when the data was written to the stream, which makes
|
||||
// this test brittle, causing intermitent failures, see COLLECTIONS-812
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the first line from multi-lined string separated by a line separator character
|
||||
* @param x the multi-lined String
|
||||
* @return the first line from x
|
||||
*/
|
||||
private String getFirstLine(final String x) {
|
||||
return x.split("\\R", 2)[0];
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSetProperty() {
|
||||
assertThrows(UnsupportedOperationException.class, () -> PropertiesFactory.EMPTY_PROPERTIES.setProperty("Key", "Value"));
|
||||
|
@ -306,63 +319,91 @@ public class EmptyPropertiesTest {
|
|||
|
||||
@Test
|
||||
public void testStoreToOutputStream() throws IOException {
|
||||
// Note: The second line is always a comment with a timestamp.
|
||||
final String comments = "Hello world!";
|
||||
// actual
|
||||
final ByteArrayOutputStream actual = new ByteArrayOutputStream();
|
||||
PropertiesFactory.EMPTY_PROPERTIES.store(new PrintStream(actual), comments);
|
||||
try (PrintStream ps = newPrintStream(actual)) {
|
||||
PropertiesFactory.EMPTY_PROPERTIES.store(ps, comments);
|
||||
}
|
||||
// expected
|
||||
final ByteArrayOutputStream expected = new ByteArrayOutputStream();
|
||||
PropertiesFactory.INSTANCE.createProperties().store(new PrintStream(expected), comments);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
PropertiesFactory.INSTANCE.createProperties().store(ps, comments);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual));
|
||||
expected.reset();
|
||||
new Properties().store(new PrintStream(expected), comments);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
new Properties().store(ps, comments);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual), () -> removeLine2(actual));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreToPrintWriter() throws IOException {
|
||||
// Note: The second line is always a comment with a timestamp.
|
||||
final String comments = "Hello world!";
|
||||
// actual
|
||||
final ByteArrayOutputStream actual = new ByteArrayOutputStream();
|
||||
PropertiesFactory.EMPTY_PROPERTIES.store(new PrintWriter(actual), comments);
|
||||
try (PrintStream ps = newPrintStream(actual)) {
|
||||
PropertiesFactory.EMPTY_PROPERTIES.store(ps, comments);
|
||||
}
|
||||
// expected
|
||||
final ByteArrayOutputStream expected = new ByteArrayOutputStream();
|
||||
PropertiesFactory.INSTANCE.createProperties().store(new PrintWriter(expected), comments);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
PropertiesFactory.INSTANCE.createProperties().store(ps, comments);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual));
|
||||
expected.reset();
|
||||
new Properties().store(new PrintWriter(expected), comments);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
new Properties().store(ps, comments);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreToXMLOutputStream() throws IOException {
|
||||
// Note: The second line is always a comment with a timestamp.
|
||||
final String comments = "Hello world!";
|
||||
// actual
|
||||
final ByteArrayOutputStream actual = new ByteArrayOutputStream();
|
||||
PropertiesFactory.EMPTY_PROPERTIES.storeToXML(new PrintStream(actual), comments);
|
||||
try (PrintStream ps = newPrintStream(actual)) {
|
||||
PropertiesFactory.EMPTY_PROPERTIES.storeToXML(ps, comments);
|
||||
}
|
||||
// expected
|
||||
final ByteArrayOutputStream expected = new ByteArrayOutputStream();
|
||||
PropertiesFactory.INSTANCE.createProperties().storeToXML(new PrintStream(expected), comments);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
PropertiesFactory.INSTANCE.createProperties().storeToXML(ps, comments);
|
||||
}
|
||||
assertEquals(toString(expected), toString(actual));
|
||||
expected.reset();
|
||||
new Properties().storeToXML(new PrintStream(expected), comments);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = new PrintStream(expected)) {
|
||||
new Properties().storeToXML(ps, comments);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStoreToXMLOutputStreamWithEncoding() throws IOException {
|
||||
// Note: The second line is always a comment with a timestamp.
|
||||
final String comments = "Hello world!";
|
||||
final String encoding = StandardCharsets.UTF_8.name();
|
||||
// actual
|
||||
final ByteArrayOutputStream actual = new ByteArrayOutputStream();
|
||||
PropertiesFactory.EMPTY_PROPERTIES.storeToXML(new PrintStream(actual), comments, encoding);
|
||||
try (PrintStream ps = newPrintStream(actual)) {
|
||||
PropertiesFactory.EMPTY_PROPERTIES.storeToXML(ps, comments, encoding);
|
||||
}
|
||||
// expected
|
||||
final ByteArrayOutputStream expected = new ByteArrayOutputStream();
|
||||
PropertiesFactory.INSTANCE.createProperties().storeToXML(new PrintStream(expected), comments, encoding);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
PropertiesFactory.INSTANCE.createProperties().storeToXML(ps, comments, encoding);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual));
|
||||
expected.reset();
|
||||
new Properties().storeToXML(new PrintStream(expected), comments, encoding);
|
||||
assertArrayEquals(expected.toByteArray(), actual.toByteArray());
|
||||
try (PrintStream ps = newPrintStream(expected)) {
|
||||
new Properties().storeToXML(ps, comments, encoding);
|
||||
}
|
||||
assertEquals(removeLine2(expected), removeLine2(actual));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -379,4 +420,8 @@ public class EmptyPropertiesTest {
|
|||
public void testValues() {
|
||||
assertTrue(PropertiesFactory.EMPTY_PROPERTIES.isEmpty());
|
||||
}
|
||||
|
||||
private String toString(final ByteArrayOutputStream expected) {
|
||||
return new String(expected.toByteArray(), StandardCharsets.UTF_8);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue