2020-02-12 08:35:32 +00:00
|
|
|
|
mod common;
|
|
|
|
|
|
|
|
|
|
pub use common::*; // `pub` only to silence unused code warnings
|
|
|
|
|
use spamassassin_milter::*;
|
|
|
|
|
|
|
|
|
|
#[test]
|
2020-02-23 06:57:49 +00:00
|
|
|
|
fn spam_message() {
|
2020-02-12 08:35:32 +00:00
|
|
|
|
let mut builder = Config::builder();
|
2020-02-17 14:06:25 +00:00
|
|
|
|
builder.spamc_args(vec![format!("--port={}", SPAMD_PORT)]);
|
2020-02-12 08:35:32 +00:00
|
|
|
|
let config = builder.build();
|
|
|
|
|
|
2020-02-14 08:03:38 +00:00
|
|
|
|
let server = spawn_mock_spamd_server(SPAMD_PORT, |spam| {
|
|
|
|
|
let mut spam = spam
|
|
|
|
|
.replacen("Subject: Test message\r\n", "Subject: [SPAM] Test message\r\n", 1)
|
|
|
|
|
.replacen(
|
|
|
|
|
"X-Spam-Checker-Version: BogusChecker 1.0.0\r\n",
|
|
|
|
|
"X-Spam-Checker-Version: MyChecker 1.0.0\r\n",
|
|
|
|
|
1,
|
|
|
|
|
)
|
2020-02-22 07:18:53 +00:00
|
|
|
|
.replacen("X-Spam-Report: Bogus report\r\n", "", 1)
|
2020-02-14 08:03:38 +00:00
|
|
|
|
.replacen(
|
|
|
|
|
"\r\n\r\n",
|
|
|
|
|
"\r\n\
|
|
|
|
|
X-Spam-Flag: YES\r\n\
|
|
|
|
|
X-Spam-Custom: Custom-Value\r\n\
|
|
|
|
|
Content-Type: multipart/mixed; ...\r\n\
|
|
|
|
|
\r\n",
|
|
|
|
|
1,
|
|
|
|
|
);
|
|
|
|
|
|
2020-02-22 07:18:53 +00:00
|
|
|
|
// Replace the message body with the SpamAssassin ‘report’.
|
2020-02-14 08:03:38 +00:00
|
|
|
|
spam.replace_range(
|
|
|
|
|
(spam.find("\r\n\r\n").unwrap() + 4)..,
|
2020-02-22 07:18:53 +00:00
|
|
|
|
"Spam detection software has identified ...",
|
2020-02-14 08:03:38 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
Err(spam)
|
2020-02-12 08:35:32 +00:00
|
|
|
|
});
|
|
|
|
|
let miltertest = spawn_miltertest_runner(file!());
|
|
|
|
|
|
|
|
|
|
run("inet:3333@localhost", config).expect("milter execution failed");
|
|
|
|
|
|
|
|
|
|
let exit_code = miltertest.join().expect("panic in miltertest runner");
|
|
|
|
|
assert!(exit_code.success(), "miltertest returned error exit code");
|
|
|
|
|
|
|
|
|
|
server.join().expect("panic in mock spamd server");
|
|
|
|
|
}
|