Testing idle
This commit is contained in:
parent
2c5adc8f16
commit
23aa313e11
3 changed files with 42 additions and 2 deletions
|
@ -30,6 +30,7 @@ impl Default for ServerCapability {
|
|||
Capability::Enable,
|
||||
Capability::Move,
|
||||
Capability::LiteralPlus,
|
||||
Capability::Idle,
|
||||
capability_unselect(),
|
||||
capability_condstore(),
|
||||
//capability_qresync(),
|
||||
|
|
|
@ -11,6 +11,7 @@ fn main() {
|
|||
rfc6851_imapext_move();
|
||||
rfc7888_imapext_literal();
|
||||
rfc4551_imapext_condstore();
|
||||
rfc2177_imapext_idle();
|
||||
println!("✅ SUCCESS 🌟🚀🥳🙏🥹");
|
||||
}
|
||||
|
||||
|
@ -21,8 +22,6 @@ fn rfc3501_imap4rev1_base() {
|
|||
capability(imap_socket, Extension::None).context("check server capabilities")?;
|
||||
login(imap_socket, Account::Alice).context("login test")?;
|
||||
create_mailbox(imap_socket, Mailbox::Archive).context("created mailbox archive")?;
|
||||
// UNSUBSCRIBE IS NOT IMPLEMENTED YET
|
||||
//unsubscribe_mailbox(imap_socket).context("unsubscribe from archive")?;
|
||||
let select_res =
|
||||
select(imap_socket, Mailbox::Inbox, SelectMod::None).context("select inbox")?;
|
||||
assert!(select_res.contains("* 0 EXISTS"));
|
||||
|
@ -241,3 +240,25 @@ fn rfc4551_imapext_condstore() {
|
|||
})
|
||||
.expect("test fully run");
|
||||
}
|
||||
|
||||
|
||||
fn rfc2177_imapext_idle() {
|
||||
println!("🧪 rfc2177_imapext_idle");
|
||||
common::aerogramme_provider_daemon_dev(|imap_socket, lmtp_socket| {
|
||||
// Test setup
|
||||
connect(imap_socket).context("server says hello")?;
|
||||
capability(imap_socket, Extension::Idle).context("check server capabilities")?;
|
||||
login(imap_socket, Account::Alice).context("login test")?;
|
||||
select(imap_socket, Mailbox::Inbox, SelectMod::None).context("select inbox")?;
|
||||
|
||||
// Check that new messages from LMTP are correctly detected during idling
|
||||
start_idle(imap_socket).context("can't start idling")?;
|
||||
lmtp_handshake(lmtp_socket).context("handshake lmtp done")?;
|
||||
lmtp_deliver_email(lmtp_socket, Email::Basic).context("mail delivered successfully")?;
|
||||
let srv_msg = stop_idle(imap_socket).context("stop idling")?;
|
||||
assert!(srv_msg.contains("* 1 EXISTS"));
|
||||
|
||||
Ok(())
|
||||
})
|
||||
.expect("test fully run");
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ pub enum Extension {
|
|||
Move,
|
||||
Condstore,
|
||||
LiteralPlus,
|
||||
Idle,
|
||||
}
|
||||
|
||||
pub enum Enable {
|
||||
|
@ -114,6 +115,7 @@ pub fn capability(imap: &mut TcpStream, ext: Extension) -> Result<()> {
|
|||
Extension::Move => Some("MOVE"),
|
||||
Extension::Condstore => Some("CONDSTORE"),
|
||||
Extension::LiteralPlus => Some("LITERAL+"),
|
||||
Extension::Idle => Some("IDLE"),
|
||||
};
|
||||
|
||||
let mut buffer: [u8; 6000] = [0; 6000];
|
||||
|
@ -496,6 +498,22 @@ pub fn enable(imap: &mut TcpStream, ask: Enable, done: Option<Enable>) -> Result
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn start_idle(imap: &mut TcpStream) -> Result<()> {
|
||||
let mut buffer: [u8; 1500] = [0; 1500];
|
||||
imap.write(&b"98 IDLE\r\n"[..])?;
|
||||
let read = read_lines(imap, &mut buffer, None)?;
|
||||
assert_eq!(read[0], b'+');
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn stop_idle(imap: &mut TcpStream) -> Result<String> {
|
||||
let mut buffer: [u8; 16536] = [0; 16536];
|
||||
imap.write(&b"DONE\r\n"[..])?;
|
||||
let read = read_lines(imap, &mut buffer, Some(&b"98 OK"[..]))?;
|
||||
let srv_msg = std::str::from_utf8(read)?;
|
||||
Ok(srv_msg.to_string())
|
||||
}
|
||||
|
||||
pub fn logout(imap: &mut TcpStream) -> Result<()> {
|
||||
imap.write(&b"99 logout\r\n"[..])?;
|
||||
let mut buffer: [u8; 1500] = [0; 1500];
|
||||
|
|
Loading…
Reference in a new issue