rust: bssl-tls: Simplify the tests

Let us move some common configurations out and share it between other tests.

Signed-off-by: Xiangfei Ding <xfding@google.com>
Change-Id: I2fb65a0f0b025c620708561f068b84ff6a6a6964
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/98796
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/rust/bssl-tls/src/tests.rs b/rust/bssl-tls/src/tests.rs
index 35108cc..17997a0 100644
--- a/rust/bssl-tls/src/tests.rs
+++ b/rust/bssl-tls/src/tests.rs
@@ -31,10 +31,7 @@
         TlsConnection, //
     },
     context::TlsContextBuilder,
-    credentials::{
-        Certificate,
-        TlsCredentialBuilder, //
-    },
+    credentials::{Certificate, TlsCredential, TlsCredentialBuilder},
     errors::Error,
     io::{
         AbstractReader,
@@ -49,7 +46,10 @@
     certificates::X509Certificate,
     keys::PrivateKey,
     params::Trust,
-    store::X509StoreBuilder, //
+    store::{
+        X509Store,
+        X509StoreBuilder, //
+    },
 };
 use futures::future::join;
 
@@ -70,28 +70,13 @@
 
 /// Dumb server-client pair that does no certificate verification.
 fn dumb_server_client() -> Result<(TlsConnection<Server>, TlsConnection<Client>), Error> {
-    let ca = Certificate::parse_one_from_pem(CA, None)?;
-    let server_cert = Certificate::parse_one_from_pem(RSA_SERVER_CERT, None)?;
-    let server_key = PrivateKey::from_pem(RSA_SERVER_KEY, || unreachable!())?;
-
     let mut server_ctx_builder = TlsContextBuilder::new_tls();
-    let server_cred = {
-        let mut builder = TlsCredentialBuilder::new();
-        builder
-            .with_certificate_chain(&[server_cert, ca])?
-            .with_private_key(server_key)?;
-        builder.build()
-    };
-    server_ctx_builder.with_credential(server_cred.unwrap())?;
+    server_ctx_builder.with_credential(load_x509_credential())?;
     let server_ctx = server_ctx_builder.build();
     let server_conn = server_ctx.new_server_connection().build();
 
     let mut client_ctx_builder = TlsContextBuilder::new_tls();
-    let mut cert_store = X509StoreBuilder::new();
-    cert_store
-        .set_trust(Trust::SslServer)?
-        .add_cert(X509Certificate::parse_one_from_pem(CA)?)?;
-    let cert_store = cert_store.build();
+    let cert_store = load_trust_store(Trust::SslServer);
     client_ctx_builder.with_certificate_store(&cert_store);
     let client_ctx = client_ctx_builder.build();
     let client_conn = client_ctx.new_client_connection().build();
@@ -376,6 +361,33 @@
     create_mock_socket::<MockDatagram>()
 }
 
+/// Builds a [`TlsCredential`] from the test RSA certificate chain (server cert + CA)
+/// and private key.
+pub(crate) fn load_x509_credential() -> TlsCredential {
+    let ca = Certificate::parse_one_from_pem(CA, None).unwrap();
+    let server_cert = Certificate::parse_one_from_pem(RSA_SERVER_CERT, None).unwrap();
+    let server_key = PrivateKey::from_pem(RSA_SERVER_KEY, || unreachable!()).unwrap();
+
+    let mut builder = TlsCredentialBuilder::new();
+    builder
+        .with_certificate_chain(&[server_cert, ca])
+        .unwrap()
+        .with_private_key(server_key)
+        .unwrap();
+    builder.build().unwrap()
+}
+
+/// Builds an X509 trust store with the test CA certificate.
+pub(crate) fn load_trust_store(trust: Trust) -> X509Store {
+    let mut cert_store = X509StoreBuilder::new();
+    cert_store
+        .set_trust(trust)
+        .unwrap()
+        .add_cert(X509Certificate::parse_one_from_pem(CA).unwrap())
+        .unwrap();
+    cert_store.build()
+}
+
 #[test]
 fn test_async() -> Result<(), Error> {
     let (mut server_conn, mut client_conn) = dumb_server_client()?;