2020-02-12 08:35:32 +00:00
|
|
|
|
mod common;
|
|
|
|
|
|
2021-12-21 17:40:01 +00:00
|
|
|
|
pub use common::*;
|
2023-01-18 09:23:21 +00:00
|
|
|
|
|
|
|
|
|
use indymilter_test::*;
|
2020-02-12 08:35:32 +00:00
|
|
|
|
use spamassassin_milter::*;
|
|
|
|
|
|
|
|
|
|
/// Runs a ‘live’ test against a real SpamAssassin server instance. This test is
|
|
|
|
|
/// run on demand, as SpamAssassin will actually analyse the input, and do DNS
|
|
|
|
|
/// queries etc.
|
2022-03-06 08:21:05 +00:00
|
|
|
|
#[tokio::test]
|
2023-01-18 09:23:21 +00:00
|
|
|
|
#[ignore = "runs live test against SpamAssassin server"]
|
2022-02-21 17:58:24 +00:00
|
|
|
|
async fn live() {
|
2020-11-28 14:46:08 +00:00
|
|
|
|
// When no port is specified, `spamc` will try to connect to the default
|
2020-02-14 08:03:38 +00:00
|
|
|
|
// `spamd` port 783 (see also `/etc/services`).
|
2020-11-28 14:46:08 +00:00
|
|
|
|
let config = configure_spamc(Config::builder()).build();
|
2020-02-12 08:35:32 +00:00
|
|
|
|
|
2022-02-21 17:58:24 +00:00
|
|
|
|
let milter = SpamAssassinMilter::spawn(LOCALHOST, config).await.unwrap();
|
2020-02-12 08:35:32 +00:00
|
|
|
|
|
2023-01-18 09:23:21 +00:00
|
|
|
|
let mut conn = TestConnection::open(milter.addr()).await.unwrap();
|
2020-02-12 08:35:32 +00:00
|
|
|
|
|
2023-01-18 09:23:21 +00:00
|
|
|
|
let status = conn.connect("client.gluet.ch", [123, 123, 123, 123]).await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.helo("mail.gluet.ch").await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.mail(["<from@gluet.ch>"]).await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.rcpt(["<to@gluet.ch>"]).await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
conn.macros(
|
|
|
|
|
MacroStage::Data,
|
|
|
|
|
[
|
|
|
|
|
("i", "1234567ABC"),
|
|
|
|
|
("j", "localhost"),
|
|
|
|
|
("_", "client.gluet.ch [123.123.123.123]"),
|
|
|
|
|
("{tls_version}", "TLSv1.2"),
|
|
|
|
|
("v", "Postfix 3.3.0"),
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
|
|
let status = conn.data().await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.header("From", "from@gluet.ch").await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.header("To", "to@gluet.ch").await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
2022-02-21 17:58:24 +00:00
|
|
|
|
|
2023-01-18 09:23:21 +00:00
|
|
|
|
let status = conn.header("Subject", "Test message").await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.header("Message-ID", rand_msg_id()).await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let status = conn.header("Date", current_date()).await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
// Add headers here to experiment.
|
|
|
|
|
|
|
|
|
|
let status = conn.eoh().await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
// This is the magic GTUBE value, which makes this message certain spam.
|
|
|
|
|
// See https://spamassassin.apache.org/gtube/.
|
|
|
|
|
let status = conn.body(
|
|
|
|
|
&b"XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"[..],
|
|
|
|
|
)
|
|
|
|
|
.await
|
|
|
|
|
.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
let (_, status) = conn.eom().await.unwrap();
|
|
|
|
|
assert_eq!(status, Status::Continue);
|
|
|
|
|
|
|
|
|
|
conn.close().await.unwrap();
|
|
|
|
|
|
|
|
|
|
milter.shutdown().await.unwrap();
|
2020-02-12 08:35:32 +00:00
|
|
|
|
}
|