Skip to content

Commit 37fdfb9

Browse files
committed
WIP test updates
1 parent f78fcc0 commit 37fdfb9

File tree

5 files changed

+143
-126
lines changed

5 files changed

+143
-126
lines changed

src/test/java/io/split/android/client/network/HttpClientTunnellingProxyTest.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import java.io.BufferedReader;
1616
import java.io.File;
17-
import java.io.FileOutputStream;
1817
import java.io.FileWriter;
1918
import java.io.IOException;
2019
import java.io.InputStream;
@@ -261,13 +260,14 @@ public void proxyMtlsProxyTunnelling() throws Exception {
261260
writer.write(proxyCa.certificatePem());
262261
}
263262

264-
// Create a PKCS#12 file containing the client certificate and private key
265-
File clientP12File = File.createTempFile("client", ".p12");
266-
KeyStore ks = KeyStore.getInstance("PKCS12");
267-
ks.load(null, null);
268-
ks.setKeyEntry("key", clientCert.keyPair().getPrivate(), "password".toCharArray(), new java.security.cert.Certificate[]{clientCert.certificate()});
269-
try (FileOutputStream fos = new FileOutputStream(clientP12File)) {
270-
ks.store(fos, "password".toCharArray());
263+
// Write client certificate and key to separate files (PEM format)
264+
File clientCertFile = File.createTempFile("client", ".crt");
265+
File clientKeyFile = File.createTempFile("client", ".key");
266+
try (FileWriter writer = new FileWriter(clientCertFile)) {
267+
writer.write(clientCert.certificatePem());
268+
}
269+
try (FileWriter writer = new FileWriter(clientKeyFile)) {
270+
writer.write(clientCert.privateKeyPkcs8Pem());
271271
}
272272

273273
// 2. Start HTTP origin server (not HTTPS to avoid SSL layering issues)
@@ -296,7 +296,11 @@ public MockResponse dispatch(RecordedRequest request) {
296296

297297
// 4. Configure HttpProxy with mTLS (client cert, key, and CA)
298298
HttpProxy proxy = HttpProxy.newBuilder("localhost", assignedProxyPort)
299-
.mtlsAuth(Files.newInputStream(clientP12File.toPath()), "password", Files.newInputStream(proxyCaFile.toPath()))
299+
.mtlsAuth(
300+
Files.newInputStream(clientCertFile.toPath()),
301+
Files.newInputStream(clientKeyFile.toPath()),
302+
Files.newInputStream(proxyCaFile.toPath())
303+
)
300304
.build();
301305

302306
// 5. Build client (let builder/factory handle trust)
@@ -325,7 +329,6 @@ public MockResponse dispatch(RecordedRequest request) {
325329
proxyCertFile.delete();
326330
proxyKeyFile.delete();
327331
proxyCaFile.delete();
328-
clientP12File.delete();
329332
}
330333

331334
// Helper to create SSLSocketFactory from HeldCertificate

src/test/java/io/split/android/client/network/HttpResponseParserTest.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
import java.io.ByteArrayInputStream;
1212
import java.io.IOException;
1313
import java.io.InputStream;
14+
import java.security.cert.Certificate;
1415

1516
public class HttpResponseParserTest {
1617

18+
private final Certificate[] mServerCertificates = new Certificate[]{};
19+
1720
@Test
1821
public void parseHttpResponse_withValidResponse_succeeds() throws Exception {
1922
// Arrange
@@ -28,7 +31,7 @@ public void parseHttpResponse_withValidResponse_succeeds() throws Exception {
2831
HttpResponseParser parser = new HttpResponseParser();
2932

3033
// Act
31-
HttpResponse response = parser.parseHttpResponse(inputStream, serverCertificates);
34+
HttpResponse response = parser.parseHttpResponse(inputStream, mServerCertificates);
3235

3336
// Assert
3437
assertNotNull("Response should not be null", response);
@@ -51,7 +54,7 @@ public void parseHttpResponse_withErrorStatus_returnsErrorResponse() throws Exce
5154
HttpResponseParser parser = new HttpResponseParser();
5255

5356
// Act
54-
HttpResponse response = parser.parseHttpResponse(inputStream, serverCertificates);
57+
HttpResponse response = parser.parseHttpResponse(inputStream, mServerCertificates);
5558

5659
// Assert
5760
assertNotNull("Response should not be null", response);
@@ -76,7 +79,7 @@ public void parseHttpResponse_withNoContentLength_readsUntilEnd() throws Excepti
7679
HttpResponseParser parser = new HttpResponseParser();
7780

7881
// Act
79-
HttpResponse response = parser.parseHttpResponse(inputStream, serverCertificates);
82+
HttpResponse response = parser.parseHttpResponse(inputStream, mServerCertificates);
8083

8184
// Assert
8285
assertNotNull("Response should not be null", response);
@@ -100,7 +103,7 @@ public void parseHttpResponse_withNoBody_returnsEmptyData() throws Exception {
100103
HttpResponseParser parser = new HttpResponseParser();
101104

102105
// Act
103-
HttpResponse response = parser.parseHttpResponse(inputStream, serverCertificates);
106+
HttpResponse response = parser.parseHttpResponse(inputStream, mServerCertificates);
104107

105108
// Assert
106109
assertNotNull("Response should not be null", response);
@@ -119,7 +122,7 @@ public void parseHttpResponse_withInvalidStatusLine_throwsException() throws Exc
119122

120123
// Act & Assert
121124
try {
122-
parser.parseHttpResponse(inputStream, serverCertificates);
125+
parser.parseHttpResponse(inputStream, mServerCertificates);
123126
fail("Should have thrown exception for invalid status line");
124127
} catch (IOException e) {
125128
assertTrue("Exception should mention invalid status",
@@ -135,7 +138,7 @@ public void parseHttpResponse_withEmptyStream_throwsException() throws Exception
135138

136139
// Act & Assert
137140
try {
138-
parser.parseHttpResponse(inputStream, serverCertificates);
141+
parser.parseHttpResponse(inputStream, mServerCertificates);
139142
fail("Should have thrown exception for empty stream");
140143
} catch (IOException e) {
141144
assertTrue("Exception should mention no response",
@@ -160,7 +163,7 @@ public void parseHttpResponse_withChunkedEncoding_handlesCorrectly() throws Exce
160163
HttpResponseParser parser = new HttpResponseParser();
161164

162165
// Act
163-
HttpResponse response = parser.parseHttpResponse(inputStream, serverCertificates);
166+
HttpResponse response = parser.parseHttpResponse(inputStream, mServerCertificates);
164167

165168
// Assert
166169
assertNotNull("Response should not be null", response);

src/test/java/io/split/android/client/network/ProxySslContextFactoryImplTest.java

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,36 +53,52 @@ public void creatingWithInvalidCaCertThrows() throws Exception {
5353
public void creatingWithValidMtlsParamsCreatesSocketFactory() throws Exception {
5454
// Create CA cert and client cert & key
5555
HeldCertificate ca = getCaCert();
56+
HeldCertificate clientCert = getClientCert(ca);
5657
File caCertFile = createCaCertFile(ca);
57-
File clientP12File = createClientP12File(getClientCert(ca));
58+
File clientCertFile = tempFolder.newFile("client.crt");
59+
File clientKeyFile = tempFolder.newFile("client.key");
60+
61+
// Write client certificate and key to separate files
62+
try (FileWriter writer = new FileWriter(clientCertFile)) {
63+
writer.write(clientCert.certificatePem());
64+
}
65+
try (FileWriter writer = new FileWriter(clientKeyFile)) {
66+
writer.write(clientCert.privateKeyPkcs8Pem());
67+
}
5868

5969
// Create socket factory
6070
ProxySslContextFactoryImpl factory = new ProxySslContextFactoryImpl();
6171
SSLSocketFactory sslSocketFactory = null;
62-
try (FileInputStream caCert = new FileInputStream(caCertFile);
63-
FileInputStream clientCertAndKey = new FileInputStream(clientP12File)) {
64-
sslSocketFactory = factory.create(caCert, clientCertAndKey, "password");
72+
try (FileInputStream caCertStream = new FileInputStream(caCertFile);
73+
FileInputStream clientCertStream = new FileInputStream(clientCertFile);
74+
FileInputStream clientKeyStream = new FileInputStream(clientKeyFile)) {
75+
sslSocketFactory = factory.create(caCertStream, clientCertStream, clientKeyStream);
6576
}
6677

6778
assertNotNull(sslSocketFactory);
6879
}
6980

7081
@Test(expected = Exception.class)
7182
public void creatingWithInvalidMtlsParamsThrows() throws Exception {
72-
// Create valid CA cert but invalid client P12
83+
// Create valid CA cert but invalid client cert/key files
7384
HeldCertificate ca = getCaCert();
7485
File caCertFile = createCaCertFile(ca);
75-
File invalidP12File = tempFolder.newFile("invalid-client.p12");
86+
File invalidClientCertFile = tempFolder.newFile("invalid-client.crt");
87+
File invalidClientKeyFile = tempFolder.newFile("invalid-client.key");
7688

77-
// Write invalid data to P12 file
78-
try (FileWriter writer = new FileWriter(invalidP12File)) {
79-
writer.write("invalid file");
89+
// Write invalid data to cert and key files
90+
try (FileWriter writer = new FileWriter(invalidClientCertFile)) {
91+
writer.write("invalid certificate");
92+
}
93+
try (FileWriter writer = new FileWriter(invalidClientKeyFile)) {
94+
writer.write("invalid key");
8095
}
8196

8297
ProxySslContextFactoryImpl factory = new ProxySslContextFactoryImpl();
83-
try (FileInputStream caCert = new FileInputStream(caCertFile);
84-
FileInputStream invalidClientCertAndKey = new FileInputStream(invalidP12File)) {
85-
factory.create(caCert, invalidClientCertAndKey, "password");
98+
try (FileInputStream caCertStream = new FileInputStream(caCertFile);
99+
FileInputStream invalidClientCertStream = new FileInputStream(invalidClientCertFile);
100+
FileInputStream invalidClientKeyStream = new FileInputStream(invalidClientKeyFile)) {
101+
factory.create(caCertStream, invalidClientCertStream, invalidClientKeyStream);
86102
}
87103
}
88104

0 commit comments

Comments
 (0)