network_transports.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. use async_std::{
  2. io,
  3. io::{ReadExt, WriteExt},
  4. stream::StreamExt,
  5. task,
  6. };
  7. use url::Url;
  8. use darkfi::net::transport::{TcpTransport, TlsTransport, Transport};
  9. #[async_std::test]
  10. async fn tcp_transport() {
  11. let tcp = TcpTransport::new(None, 1024);
  12. let url = Url::parse("tcp://127.0.0.1:5432").unwrap();
  13. let listener = tcp.clone().listen_on(url.clone()).unwrap().await.unwrap();
  14. let _ = task::spawn(async move {
  15. let mut incoming = listener.incoming();
  16. while let Some(stream) = incoming.next().await {
  17. let stream = stream.unwrap();
  18. let (reader, writer) = &mut (&stream, &stream);
  19. io::copy(reader, writer).await.unwrap();
  20. }
  21. });
  22. let payload = b"ohai tcp";
  23. let mut client = tcp.dial(url).unwrap().await.unwrap();
  24. client.write_all(payload).await.unwrap();
  25. let mut buf = vec![0_u8; 8];
  26. client.read_exact(&mut buf).await.unwrap();
  27. assert_eq!(buf, payload);
  28. }
  29. #[async_std::test]
  30. async fn tls_transport() {
  31. let tls = TlsTransport::new(None, 1024);
  32. let url = Url::parse("tls://127.0.0.1:5433").unwrap();
  33. let (acceptor, listener) = tls.clone().listen_on(url.clone()).unwrap().await.unwrap();
  34. let _ = task::spawn(async move {
  35. let mut incoming = listener.incoming();
  36. while let Some(stream) = incoming.next().await {
  37. let stream = stream.unwrap();
  38. let stream = acceptor.accept(stream).await.unwrap();
  39. let (mut reader, mut writer) = smol::io::split(stream);
  40. io::copy(&mut reader, &mut writer).await.unwrap();
  41. }
  42. });
  43. let payload = b"ohai tls";
  44. let mut client = tls.dial(url).unwrap().await.unwrap();
  45. client.write_all(payload).await.unwrap();
  46. let mut buf = vec![0_u8; 8];
  47. client.read_exact(&mut buf).await.unwrap();
  48. assert_eq!(buf, payload);
  49. }