forked from lavina/lavina
Compare commits
2 Commits
2cf3edd27b
...
e68d699462
Author | SHA1 | Date |
---|---|---|
Mikhail | e68d699462 | |
Mikhail | 3701fb695b |
|
@ -19,10 +19,3 @@ repos:
|
||||||
- --all
|
- --all
|
||||||
types: [ rust ]
|
types: [ rust ]
|
||||||
pass_filenames: false
|
pass_filenames: false
|
||||||
- id: check
|
|
||||||
name: check
|
|
||||||
description: Check
|
|
||||||
entry: cargo check
|
|
||||||
language: system
|
|
||||||
types: [ rust ]
|
|
||||||
pass_filenames: false
|
|
||||||
|
|
|
@ -108,7 +108,6 @@ impl<'a> TestScopeTls<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
struct IgnoreCertVerification;
|
struct IgnoreCertVerification;
|
||||||
|
|
||||||
impl ServerCertVerifier for IgnoreCertVerification {
|
impl ServerCertVerifier for IgnoreCertVerification {
|
||||||
fn verify_server_cert(
|
fn verify_server_cert(
|
||||||
&self,
|
&self,
|
||||||
|
@ -123,79 +122,6 @@ impl ServerCertVerifier for IgnoreCertVerification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Some clients prefer to close their tags, i.e. Gajim.
|
|
||||||
#[tokio::test]
|
|
||||||
async fn scenario_basic_closed_tag() -> Result<()> {
|
|
||||||
tracing_subscriber::fmt::try_init();
|
|
||||||
let config = ServerConfig {
|
|
||||||
listen_on: "127.0.0.1:0".parse().unwrap(),
|
|
||||||
cert: "tests/certs/xmpp.pem".parse().unwrap(),
|
|
||||||
key: "tests/certs/xmpp.key".parse().unwrap(),
|
|
||||||
};
|
|
||||||
let mut metrics = MetricsRegistry::new();
|
|
||||||
let mut storage = Storage::open(StorageConfig {
|
|
||||||
db_path: ":memory:".into(),
|
|
||||||
})
|
|
||||||
.await?;
|
|
||||||
let rooms = RoomRegistry::new(&mut metrics, storage.clone()).unwrap();
|
|
||||||
let players = PlayerRegistry::empty(rooms.clone(), &mut metrics).unwrap();
|
|
||||||
let server = launch(config, players, rooms, metrics, storage.clone()).await.unwrap();
|
|
||||||
|
|
||||||
// test scenario
|
|
||||||
|
|
||||||
storage.create_user("tester").await?;
|
|
||||||
storage.set_password("tester", "password").await?;
|
|
||||||
|
|
||||||
let mut stream = TcpStream::connect(server.addr).await?;
|
|
||||||
let mut s = TestScope::new(&mut stream);
|
|
||||||
tracing::info!("TCP connection established");
|
|
||||||
|
|
||||||
s.send(r#"<?xml version='1.0'?>"#).await?;
|
|
||||||
s.send(r#"
|
|
||||||
<stream:stream xmlns="jabber:client" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" to="sauer" xml:lang="en">
|
|
||||||
"#).await?;
|
|
||||||
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Decl(_) => {});
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Start(b) => assert_eq!(b.local_name().into_inner(), b"stream"));
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Start(b) => assert_eq!(b.local_name().into_inner(), b"features"));
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Start(b) => assert_eq!(b.local_name().into_inner(), b"starttls"));
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Empty(b) => assert_eq!(b.local_name().into_inner(), b"required"));
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::End(b) => assert_eq!(b.local_name().into_inner(), b"starttls"));
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::End(b) => assert_eq!(b.local_name().into_inner(), b"features"));
|
|
||||||
s.send(r#"<starttls/>"#).await?;
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Empty(b) => assert_eq!(b.local_name().into_inner(), b"proceed"));
|
|
||||||
let buffer = s.buffer;
|
|
||||||
tracing::info!("TLS feature negotiation complete");
|
|
||||||
|
|
||||||
let connector = TlsConnector::from(Arc::new(
|
|
||||||
ClientConfig::builder()
|
|
||||||
.with_safe_defaults()
|
|
||||||
.with_custom_certificate_verifier(Arc::new(IgnoreCertVerification))
|
|
||||||
.with_no_client_auth(),
|
|
||||||
));
|
|
||||||
tracing::info!("Initiating TLS connection...");
|
|
||||||
let mut stream = connector.connect(ServerName::IpAddress(server.addr.ip()), stream).await?;
|
|
||||||
tracing::info!("TLS connection established");
|
|
||||||
|
|
||||||
let mut s = TestScopeTls::new(&mut stream, buffer);
|
|
||||||
|
|
||||||
s.send(r#"<?xml version="1.0"?>"#).await?;
|
|
||||||
s.send(r#"
|
|
||||||
<!-- Outgoing Tue 02 Apr 2024 06:39:24 PM CEST (Account Wizard) -->
|
|
||||||
</stream:stream>
|
|
||||||
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" to="127.0.0.1" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns="jabber:client" version="1.0">
|
|
||||||
"#).await?;
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Decl(_) => {});
|
|
||||||
assert_matches!(s.next_xml_event().await?, Event::Start(b) => assert_eq!(b.local_name().into_inner(), b"stream"));
|
|
||||||
|
|
||||||
stream.shutdown().await?;
|
|
||||||
|
|
||||||
// wrap up
|
|
||||||
|
|
||||||
server.terminate().await?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn scenario_basic() -> Result<()> {
|
async fn scenario_basic() -> Result<()> {
|
||||||
tracing_subscriber::fmt::try_init();
|
tracing_subscriber::fmt::try_init();
|
||||||
|
|
Loading…
Reference in New Issue