Skip to content

Commit 5938d2a

Browse files
PemReaderTest: fix assertions and remove unused code
1 parent 03a5cf7 commit 5938d2a

1 file changed

Lines changed: 15 additions & 41 deletions

File tree

src/test/java/com/rabbitmq/client/PemReaderTest.java

Lines changed: 15 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.rabbitmq.client;
1717

1818
import java.security.KeyStore;
19-
import java.security.PrivateKey;
2019
import java.security.cert.X509Certificate;
2120
import java.util.List;
2221
import java.util.Optional;
@@ -44,16 +43,9 @@ class PemReaderTest {
4443
+ "MIICljCCAX4CAQAwDQYJKoZIhvcNAQEEBQAwgaAxCzAJBgNVBAYTAlBUMRMwEQYD\n"
4544
+ "-----END CERTIFICATE REQUEST-----";
4645

47-
private static final String ENCRYPTED_PRIVATE_KEY =
48-
"-----BEGIN ENCRYPTED PRIVATE KEY-----\n"
49-
+ "MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQI1234567890ABCDE\n"
50-
+ "-----END ENCRYPTED PRIVATE KEY-----";
51-
5246
@Test
5347
void testValidCertificateParsing() throws Exception {
54-
List<X509Certificate> certs = PemReader.readCertificateChain(VALID_CERTIFICATE);
55-
assertNotNull(certs);
56-
// Note: parsing may fail due to invalid cert data, but regex should match
48+
assertThrows(Exception.class, () -> PemReader.readCertificateChain(VALID_CERTIFICATE));
5749
}
5850

5951
@Test
@@ -67,7 +59,6 @@ void testEmptyBase64Content() throws Exception {
6759
String emptyBase64Cert = "-----BEGIN CERTIFICATE-----\n" + "-----END CERTIFICATE-----";
6860
List<X509Certificate> certs = PemReader.readCertificateChain(emptyBase64Cert);
6961
assertNotNull(certs);
70-
assertDoesNotThrow(() -> PemReader.readCertificateChain(emptyBase64Cert));
7162
}
7263

7364
@Test
@@ -115,17 +106,12 @@ void testRedosResilienceLongDashString() {
115106
String dosPayload =
116107
"-----BEGIN " + "-".repeat(1000) + "-----\n" + "data\n" + "-----END CERTIFICATE-----";
117108
long startTime = System.nanoTime();
118-
List<X509Certificate> result = null;
119109
try {
120-
result = PemReader.readCertificateChain(dosPayload);
121-
} catch (Exception e) {
122-
// Acceptable to fail, but should not hang
110+
PemReader.readCertificateChain(dosPayload);
111+
} catch (Exception ignored) {
123112
}
124-
long endTime = System.nanoTime();
125-
long elapsedMs = (endTime - startTime) / 1_000_000;
126-
assertTrue(
127-
elapsedMs < 5000,
128-
"ReDoS vulnerability detected: parsing took " + elapsedMs + "ms for malicious input");
113+
long elapsedMs = (System.nanoTime() - startTime) / 1_000_000;
114+
assertTrue(elapsedMs < 5000, "Timeout exceeded: " + elapsedMs + "ms");
129115
}
130116

131117
@Test
@@ -135,16 +121,12 @@ void testRedosResilienceRepeatedPattern() {
135121
+ "CERTIFICATE ".repeat(100)
136122
+ "-----\ndata\n-----END CERTIFICATE-----";
137123
long startTime = System.nanoTime();
138-
List<X509Certificate> result = null;
139124
try {
140-
result = PemReader.readCertificateChain(dosPayload);
141-
} catch (Exception e) {
142-
// Acceptable to fail, but should not hang
125+
PemReader.readCertificateChain(dosPayload);
126+
} catch (Exception ignored) {
143127
}
144-
long endTime = System.nanoTime();
145-
long elapsedMs = (endTime - startTime) / 1_000_000;
146-
assertTrue(
147-
elapsedMs < 5000, "ReDoS vulnerability detected: parsing took " + elapsedMs + "ms");
128+
long elapsedMs = (System.nanoTime() - startTime) / 1_000_000;
129+
assertTrue(elapsedMs < 5000, "Timeout exceeded: " + elapsedMs + "ms");
148130
}
149131

150132
@Test
@@ -157,21 +139,19 @@ void testEmptyCertificateChain() throws Exception {
157139
@Test
158140
void testMultipleCertificates() throws Exception {
159141
String multipleCerts = VALID_CERTIFICATE + "\n" + VALID_CERTIFICATE;
160-
// Should parse without error
161-
assertDoesNotThrow(() -> PemReader.readCertificateChain(multipleCerts));
142+
assertThrows(Exception.class, () -> PemReader.readCertificateChain(multipleCerts));
162143
}
163144

164145
@Test
165146
void testKeyPasswordHandling() {
166-
// Document that password is converted to char array
167147
Optional<String> password = Optional.of("test-password");
168-
assertDoesNotThrow(() -> PemReader.loadPrivateKey(VALID_PRIVATE_KEY_PKCS8, password));
148+
assertThrows(Exception.class, () -> PemReader.loadPrivateKey(VALID_PRIVATE_KEY_PKCS8, password));
169149
}
170150

171151
@Test
172152
void testEmptyPasswordHandling() {
173153
Optional<String> noPassword = Optional.empty();
174-
assertDoesNotThrow(() -> PemReader.loadPrivateKey(VALID_PRIVATE_KEY_PKCS8, noPassword));
154+
assertThrows(Exception.class, () -> PemReader.loadPrivateKey(VALID_PRIVATE_KEY_PKCS8, noPassword));
175155
}
176156

177157
@Test
@@ -214,13 +194,7 @@ void testCaseInsensitivity() throws Exception {
214194
@Test
215195
void testAllAlgorithmsAttempted() {
216196
String invalidKey = "-----BEGIN PRIVATE KEY-----\ninvaliddata\n-----END PRIVATE KEY-----";
217-
Exception exception =
218-
assertThrows(Exception.class, () -> PemReader.loadPrivateKey(invalidKey, Optional.empty()));
219-
String message = exception.getMessage();
220-
assertNotNull(message);
221-
assertFalse(
222-
message.contains("RSA: RSA:"),
223-
"Error message should not duplicate algorithm names");
197+
assertThrows(Exception.class, () -> PemReader.loadPrivateKey(invalidKey, Optional.empty()));
224198
}
225199

226200
@Test
@@ -257,12 +231,12 @@ void testLongCertificateChain() {
257231
for (int i = 0; i < 100; i++) {
258232
longChain.append(VALID_CERTIFICATE).append("\n");
259233
}
260-
assertDoesNotThrow(() -> PemReader.readCertificateChain(longChain.toString()));
234+
assertThrows(Exception.class, () -> PemReader.readCertificateChain(longChain.toString()));
261235
}
262236

263237
@Test
264238
void testMixedContent() {
265239
String mixed = "Some random text\n" + VALID_CERTIFICATE + "\nMore random text";
266-
assertDoesNotThrow(() -> PemReader.readCertificateChain(mixed));
240+
assertThrows(Exception.class, () -> PemReader.readCertificateChain(mixed));
267241
}
268242
}

0 commit comments

Comments
 (0)