aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/behavior.rs13
-rw-r--r--tests/common/fragments.rs13
-rw-r--r--tests/common/mod.rs2
3 files changed, 26 insertions, 2 deletions
diff --git a/tests/behavior.rs b/tests/behavior.rs
index e62832b..82fdc53 100644
--- a/tests/behavior.rs
+++ b/tests/behavior.rs
@@ -8,6 +8,7 @@ fn main() {
rfc3691_imapext_unselect();
rfc5161_imapext_enable();
rfc6851_imapext_move();
+ rfc7888_imapext_literal();
}
fn rfc3501_imap4rev1_base() {
@@ -105,3 +106,15 @@ fn rfc6851_imapext_move() {
})
.expect("test fully run");
}
+
+fn rfc7888_imapext_literal() {
+ println!("rfc7888_imapext_literal");
+ common::aerogramme_provider_daemon_dev(|imap_socket, _lmtp_socket| {
+ connect(imap_socket).context("server says hello")?;
+
+ capability(imap_socket, Extension::LiteralPlus).context("check server capabilities")?;
+ login_with_literal(imap_socket, Account::Alice).context("use literal to connect Alice")?;
+
+ Ok(())
+ }).expect("test fully run");
+}
diff --git a/tests/common/fragments.rs b/tests/common/fragments.rs
index c8d5ef1..3ed14cc 100644
--- a/tests/common/fragments.rs
+++ b/tests/common/fragments.rs
@@ -35,6 +35,7 @@ pub enum Extension {
Unselect,
Move,
CondStore,
+ LiteralPlus,
}
pub enum Enable {
@@ -72,9 +73,10 @@ pub fn capability(imap: &mut TcpStream, ext: Extension) -> Result<()> {
Extension::Unselect => Some("UNSELECT"),
Extension::Move => Some("MOVE"),
Extension::CondStore => Some("CONDSTORE"),
+ Extension::LiteralPlus => Some("LITERAL+"),
};
- let mut buffer: [u8; 1500] = [0; 1500];
+ let mut buffer: [u8; 6000] = [0; 6000];
let read = read_lines(imap, &mut buffer, Some(&b"5 OK"[..]))?;
let srv_msg = std::str::from_utf8(read)?;
assert!(srv_msg.contains("IMAP4REV1"));
@@ -97,6 +99,15 @@ pub fn login(imap: &mut TcpStream, account: Account) -> Result<()> {
Ok(())
}
+pub fn login_with_literal(imap: &mut TcpStream, account: Account) -> Result<()> {
+ let mut buffer: [u8; 1500] = [0; 1500];
+
+ assert!(matches!(account, Account::Alice));
+ imap.write(&b"10 login {5+}\r\nalice {7+}\r\nhunter2\r\n"[..])?;
+ let _read = read_lines(imap, &mut buffer, Some(&b"10 OK"[..]))?;
+ Ok(())
+}
+
pub fn create_mailbox(imap: &mut TcpStream, mbx: Mailbox) -> Result<()> {
let mut buffer: [u8; 1500] = [0; 1500];
diff --git a/tests/common/mod.rs b/tests/common/mod.rs
index d0f4ed8..810fd79 100644
--- a/tests/common/mod.rs
+++ b/tests/common/mod.rs
@@ -81,7 +81,7 @@ pub fn read_lines<'a, F: Read>(
None => true,
Some(mark) => buffer[..nbytes].windows(mark.len()).any(|w| w == mark),
};
- if pre_condition && &buffer[nbytes - 2..nbytes] == &b"\r\n"[..] {
+ if pre_condition && nbytes >= 2 && &buffer[nbytes - 2..nbytes] == &b"\r\n"[..] {
break;
}
}