瀏覽代碼

net: Correct TLS transport integration

x 2 周之前
父節點
當前提交
f932d2ef85
共有 1 個文件被更改,包括 51 次插入2 次删除
  1. 51 2
      tests/network_transports.rs

+ 51 - 2
tests/network_transports.rs

@@ -16,11 +16,34 @@
  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
  */
 
+use std::sync::Arc;
+
+use async_trait::async_trait;
 use darkfi_serial::{AsyncDecodable, AsyncEncodable};
 use smol::{io, LocalExecutor};
 use url::Url;
 
-use darkfi::net::transport::{Dialer, Listener};
+use darkfi::net::{
+    channel::Channel,
+    session::{Session, SessionBitFlag, SESSION_OUTBOUND},
+    transport::{Dialer, Listener},
+    P2pPtr,
+};
+
+struct TestSession;
+
+#[async_trait]
+impl Session for TestSession {
+    fn p2p(&self) -> P2pPtr {
+        unreachable!("channel address tests do not access P2P state")
+    }
+
+    fn type_id(&self) -> SessionBitFlag {
+        SESSION_OUTBOUND
+    }
+
+    async fn reload(self: Arc<Self>) {}
+}
 
 #[test]
 fn tcp_transport() {
@@ -54,6 +77,32 @@ fn tcp_transport() {
     }));
 }
 
+#[test]
+fn transport_mixed_channel_addresses() {
+    let executor = LocalExecutor::new();
+
+    smol::block_on(executor.run(async {
+        let (stream, _peer) = smol::net::unix::UnixStream::pair().unwrap();
+        let session: Arc<dyn Session + Send + Sync> = Arc::new(TestSession);
+        let canonical = Url::parse("tcp+tls://peer.example:28880").unwrap();
+        let derived = Url::parse("tor+tls://peer.example:28880").unwrap();
+
+        let channel = Channel::new(
+            Box::new(stream),
+            Some(derived.clone()),
+            canonical.clone(),
+            Arc::downgrade(&session),
+            true,
+        )
+        .await;
+
+        assert_eq!(channel.address(), &canonical);
+        assert_eq!(channel.connect_addr(), &canonical);
+        assert_eq!(channel.display_address(), &derived);
+        assert_eq!(channel.resolve_addr(), Some(derived));
+    }));
+}
+
 #[test]
 fn tcp_tls_transport() {
     // Register a CryptoProvider for rustls
@@ -66,7 +115,7 @@ fn tcp_tls_transport() {
         let listener = std::net::TcpListener::bind("127.0.0.1:0").unwrap();
         let port = listener.local_addr().unwrap().port();
         drop(listener);
-        let url = Url::parse(&format!("tcp://127.0.0.1:{port}")).unwrap();
+        let url = Url::parse(&format!("tcp+tls://127.0.0.1:{port}")).unwrap();
 
         let listener =
             Listener::new(url.clone(), None, true).await.unwrap().listen().await.unwrap();