mirror of
https://github.com/mjl-/mox.git
synced 2025-06-28 14:58:15 +03:00

to compress the entire IMAP connection. tested with thunderbird, meli, k9, ios mail. the initial implementation had interoperability issues with some of these clients: if they write the deflate stream and flush in "partial mode", the go stdlib flate reader does not return any data (until there is an explicit zero-length "sync flush" block, or until the history/sliding window is full), blocking progress, resulting in clients closing the seemingly stuck connection after considering the connection timed out. this includes a coy of the flate package with a new reader that returns partially flushed blocks earlier. this also adds imap trace logging to imapclient.Conn, which was useful for debugging.
40 lines
999 B
Go
40 lines
999 B
Go
package imapserver
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"testing"
|
|
)
|
|
|
|
func TestCompress(t *testing.T) {
|
|
tc := start(t)
|
|
defer tc.close()
|
|
|
|
tc.client.Login("mjl@mox.example", password0)
|
|
|
|
tc.transactf("bad", "compress")
|
|
tc.transactf("bad", "compress bogus ")
|
|
tc.transactf("no", "compress bogus")
|
|
|
|
tc.client.CompressDeflate()
|
|
tc.transactf("no", "compress deflate") // Cannot have multiple.
|
|
tc.xcode("COMPRESSIONACTIVE")
|
|
|
|
tc.client.Select("inbox")
|
|
tc.transactf("ok", "append inbox (\\seen) {%d+}\r\n%s", len(exampleMsg), exampleMsg)
|
|
tc.transactf("ok", "noop")
|
|
tc.transactf("ok", "fetch 1 body.peek[1]")
|
|
}
|
|
|
|
func TestCompressStartTLS(t *testing.T) {
|
|
tc := start(t)
|
|
defer tc.close()
|
|
|
|
tc.client.Starttls(&tls.Config{InsecureSkipVerify: true})
|
|
tc.client.Login("mjl@mox.example", password0)
|
|
tc.client.CompressDeflate()
|
|
tc.client.Select("inbox")
|
|
tc.transactf("ok", "append inbox (\\seen) {%d+}\r\n%s", len(exampleMsg), exampleMsg)
|
|
tc.transactf("ok", "noop")
|
|
tc.transactf("ok", "fetch 1 body.peek[1]")
|
|
}
|