From c393fd71620a544680448bb6a90816395e38048a Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:00:55 -0500 Subject: [PATCH 01/14] Add Travis integration testing This uses [GreenMail's Docker image](http://www.icegreen.com/greenmail/#deploy_docker_standalone) to spin up a real SMTP+IMAP server on Travis, and then runs a series of integration tests against it by sending e-mails using [`lettre`](https://crates.io/crates/lettre) and checking that we can receive them correctly. A start on #101. --- .travis.yml | 7 ++ Cargo.toml | 8 ++ tests/integration.rs | 215 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 230 insertions(+) create mode 100644 tests/integration.rs diff --git a/.travis.yml b/.travis.yml index 6c51b8c1..11e50b20 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,6 +6,9 @@ addons: packages: - libssl-dev +services: +- docker + os: - linux - osx @@ -23,6 +26,10 @@ script: - cargo check --all-targets - cargo test +before_install: + - docker pull greenmail/standalone:1.5.8 + - docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8 + after_success: - if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == "stable" ]]; then bash <(curl https://raw.githubusercontent.com/xd009642/tarpaulin/master/travis-install.sh); diff --git a/Cargo.toml b/Cargo.toml index 8142df95..8f6b7f91 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,3 +31,11 @@ bufstream = "0.1" imap-proto = "0.6" nom = "4.0" base64 = "0.10" + +[dev-dependencies] +lettre = "0.9" +lettre_email = "0.9" + +[patch.crates-io] +lettre = { git = "https://github.com/lettre/lettre.git" } +lettre_email = { git = "https://github.com/lettre/lettre.git" } diff --git a/tests/integration.rs b/tests/integration.rs new file mode 100644 index 00000000..b92a7bc1 --- /dev/null +++ b/tests/integration.rs @@ -0,0 +1,215 @@ +extern crate imap; +extern crate lettre; +extern crate lettre_email; +extern crate native_tls; + +use lettre::Transport; +use std::net::TcpStream; + +fn tls() -> native_tls::TlsConnector { + native_tls::TlsConnector::builder() + .danger_accept_invalid_certs(true) + .build() + .unwrap() +} + +fn session(user: &str) -> imap::Session> { + let mut s = imap::connect("127.0.0.1:3993", "imap.example.com", &tls()) + .unwrap() + .login(user, user) + .unwrap(); + s.debug = true; + s +} + +fn smtp(user: &str) -> lettre::SmtpTransport { + let creds = lettre::smtp::authentication::Credentials::new(user.to_string(), user.to_string()); + lettre::SmtpClient::new( + "127.0.0.1:3465", + lettre::ClientSecurity::Wrapper(lettre::ClientTlsParameters { + connector: tls(), + domain: "smpt.example.com".to_string(), + }), + ) + .unwrap() + .credentials(creds) + .transport() +} + +#[test] +fn connect_insecure() { + imap::connect_insecure("127.0.0.1:3143").unwrap(); +} + +#[test] +#[ignore] +fn connect_insecure_then_secure() { + // ignored because of https://github.com/greenmail-mail-test/greenmail/issues/135 + imap::connect_insecure("127.0.0.1:3143") + .unwrap() + .secure("imap.example.com", &tls()) + .unwrap(); +} + +#[test] +fn connect_secure() { + imap::connect("127.0.0.1:3993", "imap.example.com", &tls()).unwrap(); +} + +#[test] +fn login() { + session("readonly-test@localhost"); +} + +#[test] +fn logout() { + let mut s = session("readonly-test@localhost"); + s.logout().unwrap(); +} + +#[test] +#[ignore] +fn inbox_zero() { + // https://github.com/djc/tokio-imap/issues/34 + let mut s = session("readonly-test@localhost"); + s.select("INBOX").unwrap(); + let inbox = s.search("ALL").unwrap(); + assert_eq!(inbox.len(), 0); +} + +#[test] +fn inbox() { + let to = "inbox@localhost"; + + // first log in so we'll see the unsolicited e-mails + let mut c = session(to); + c.select("INBOX").unwrap(); + + // then send the e-mail + let mut s = smtp(to); + let e = lettre_email::Email::builder() + .from("sender@localhost") + .to(to) + .subject("My first e-mail") + .text("Hello world from SMTP") + .build() + .unwrap(); + s.send(e.into()).unwrap(); + + // now we should see the e-mail! + let inbox = c.search("ALL").unwrap(); + // and the one message should have the first message sequence number + assert_eq!(inbox.len(), 1); + assert!(inbox.contains(&1)); + + // we should also get two unsolicited responses: Exists and Recent + c.noop().unwrap(); + let mut unsolicited = Vec::new(); + while let Ok(m) = c.unsolicited_responses.try_recv() { + unsolicited.push(m); + } + assert_eq!(unsolicited.len(), 2); + assert!(unsolicited + .iter() + .any(|m| m == &imap::types::UnsolicitedResponse::Exists(1))); + assert!(unsolicited + .iter() + .any(|m| m == &imap::types::UnsolicitedResponse::Recent(1))); + + // let's see that we can also fetch the e-mail + let fetch = c.fetch("1", "(ALL UID)").unwrap(); + assert_eq!(fetch.len(), 1); + let fetch = &fetch[0]; + assert_eq!(fetch.message, 1); + assert_ne!(fetch.uid, None); + assert_eq!(fetch.size, Some(138)); + let e = fetch.envelope().unwrap(); + assert_eq!(e.subject, Some("My first e-mail")); + assert_ne!(e.from, None); + assert_eq!(e.from.as_ref().unwrap().len(), 1); + let from = &e.from.as_ref().unwrap()[0]; + assert_eq!(from.mailbox, Some("sender")); + assert_eq!(from.host, Some("localhost")); + assert_ne!(e.to, None); + assert_eq!(e.to.as_ref().unwrap().len(), 1); + let to = &e.to.as_ref().unwrap()[0]; + assert_eq!(to.mailbox, Some("inbox")); + assert_eq!(to.host, Some("localhost")); + + // and let's delete it to clean up + c.store("1", "+FLAGS (\\Deleted)").unwrap(); + c.expunge().unwrap(); + + // the e-mail should be gone now + // TODO: https://github.com/djc/tokio-imap/issues/34 + // let inbox = c.search("ALL").unwrap(); + // assert_eq!(inbox.len(), 0); +} + +#[test] +fn inbox_uid() { + let to = "inbox-uid@localhost"; + + // first log in so we'll see the unsolicited e-mails + let mut c = session(to); + c.select("INBOX").unwrap(); + + // then send the e-mail + let mut s = smtp(to); + let e = lettre_email::Email::builder() + .from("sender@localhost") + .to(to) + .subject("My first e-mail") + .text("Hello world from SMTP") + .build() + .unwrap(); + s.send(e.into()).unwrap(); + + // now we should see the e-mail! + let inbox = c.uid_search("ALL").unwrap(); + // and the one message should have the first message sequence number + assert_eq!(inbox.len(), 1); + let uid = inbox.into_iter().next().unwrap(); + + // we should also get two unsolicited responses: Exists and Recent + c.noop().unwrap(); + let mut unsolicited = Vec::new(); + while let Ok(m) = c.unsolicited_responses.try_recv() { + unsolicited.push(m); + } + assert_eq!(unsolicited.len(), 2); + assert!(unsolicited + .iter() + .any(|m| m == &imap::types::UnsolicitedResponse::Exists(1))); + assert!(unsolicited + .iter() + .any(|m| m == &imap::types::UnsolicitedResponse::Recent(1))); + + // let's see that we can also fetch the e-mail + let fetch = c.uid_fetch(format!("{}", uid), "(ALL UID)").unwrap(); + assert_eq!(fetch.len(), 1); + let fetch = &fetch[0]; + assert_eq!(fetch.uid, Some(uid)); + let e = fetch.envelope().unwrap(); + assert_eq!(e.subject, Some("My first e-mail")); + + // and let's delete it to clean up + c.uid_store(format!("{}", uid), "+FLAGS (\\Deleted)") + .unwrap(); + c.expunge().unwrap(); + + // the e-mail should be gone now + // TODO: https://github.com/djc/tokio-imap/issues/34 + // let inbox = c.search("ALL").unwrap(); + // assert_eq!(inbox.len(), 0); +} + +#[test] +fn list() { + let mut s = session("readonly-test@localhost"); + s.select("INBOX").unwrap(); + let subdirs = s.list(None, Some("%")).unwrap(); + assert_eq!(subdirs.len(), 0); + + // TODO: make a subdir +} From 06106fbc58f34ad9f24644977536f343e85c1b60 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:05:00 -0500 Subject: [PATCH 02/14] Don't run integration tests on appveyor It is [possible](https://stefanscherer.github.io/setup-windows-docker-ci-appveyor/) but I don't want to dig into it atm. --- appveyor.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 8fc6e6fd..7e1300f0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -65,4 +65,7 @@ build: false test_script: - cargo check --all-targets - - cargo test + - cargo test --lib + - cargo test --doc + - cargo test --examples +# note that we are not running integration tests! From 4d9cd8c49aad76e67a3302bac6a3b0904cbb1d16 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:10:13 -0500 Subject: [PATCH 03/14] Better code coverage maybe? --- .travis.yml | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 11e50b20..bc44d3ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,26 @@ -sudo: required language: rust -# Dependencies of kcov, used by coverage + +sudo: required + +rust: + - stable + - beta + - nightly + +matrix: + allow_failures: + - rust: nightly + addons: apt: packages: - - libssl-dev + - libcurl4-openssl-dev + - libelf-dev + - libdw-dev + - cmake + - gcc + - binutils-dev + - libiberty-dev services: - docker @@ -30,8 +46,17 @@ before_install: - docker pull greenmail/standalone:1.5.8 - docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8 -after_success: -- if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == "stable" ]]; then - bash <(curl https://raw.githubusercontent.com/xd009642/tarpaulin/master/travis-install.sh); - cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID; - fi +after_success: | + wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && + tar xzf master.tar.gz && + cd kcov-master && + mkdir build && + cd build && + cmake .. && + make && + make install DESTDIR=../../kcov-build && + cd ../.. && + rm -rf kcov-master && + for file in target/debug/imap-*[^\.d]; do mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; done && + bash <(curl -s https://codecov.io/bash) && + echo "Uploaded code coverage" From b85e4cbe9a5f0373266c657b626d6915023df374 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:13:28 -0500 Subject: [PATCH 04/14] No docker on osx --- .travis.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index bc44d3ca..d67a96c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,11 +40,15 @@ matrix: script: - cargo check --all-targets - - cargo test + - cargo test --lib + - cargo test --doc + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cargo test --tests; fi before_install: - - docker pull greenmail/standalone:1.5.8 - - docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8 + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + docker pull greenmail/standalone:1.5.8 && + docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8; + fi after_success: | wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && From f4e1dc81b5b5c954fda31fc158287424984b9cb9 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:26:53 -0500 Subject: [PATCH 05/14] Only check coverage on stable --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d67a96c7..9f72d18c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,6 +51,7 @@ before_install: fi after_success: | + if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == "stable" ]]; then wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && tar xzf master.tar.gz && cd kcov-master && @@ -63,4 +64,5 @@ after_success: | rm -rf kcov-master && for file in target/debug/imap-*[^\.d]; do mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; done && bash <(curl -s https://codecov.io/bash) && - echo "Uploaded code coverage" + echo "Uploaded code coverage"; + fi From e52290e8dd2805ee46b039bf85ca4209f3c352cc Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:28:07 -0500 Subject: [PATCH 06/14] list test isn't done yet --- tests/integration.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration.rs b/tests/integration.rs index b92a7bc1..a61c52ca 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -205,6 +205,7 @@ fn inbox_uid() { } #[test] +#[ignore] fn list() { let mut s = session("readonly-test@localhost"); s.select("INBOX").unwrap(); From 3e034585b3fd56ae5498453019b5ed5d90c73931 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:30:27 -0500 Subject: [PATCH 07/14] Run Greenmail detched --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9f72d18c..68f54e25 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,9 +47,12 @@ script: before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker pull greenmail/standalone:1.5.8 && - docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8; + docker run -d -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8; fi +after_failure: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker logs (docker ps -q); fi + after_success: | if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == "stable" ]]; then wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && From 935349313928ad4eceeb890f4ddc715dc31b9dc7 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:42:57 -0500 Subject: [PATCH 08/14] Make sure tests get run by coverage --- .travis.yml | 3 ++- tests/{integration.rs => imap_integration.rs} | 0 2 files changed, 2 insertions(+), 1 deletion(-) rename tests/{integration.rs => imap_integration.rs} (100%) diff --git a/.travis.yml b/.travis.yml index 68f54e25..4a6151a2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -65,7 +65,8 @@ after_success: | make install DESTDIR=../../kcov-build && cd ../.. && rm -rf kcov-master && - for file in target/debug/imap-*[^\.d]; do mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; done && + ls target/debug/deps && + for file in target/debug/deps/imap*[^\.d]; do mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; done && bash <(curl -s https://codecov.io/bash) && echo "Uploaded code coverage"; fi diff --git a/tests/integration.rs b/tests/imap_integration.rs similarity index 100% rename from tests/integration.rs rename to tests/imap_integration.rs From 13a56381497bfe31ca3a0af770ca398fa192989b Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:57:58 -0500 Subject: [PATCH 09/14] We're using coveralls.io :facepalm: --- .travis.yml | 74 +++++++++++++++++++---------------------------------- 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/.travis.yml b/.travis.yml index 4a6151a2..856d6d62 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,72 +1,50 @@ language: rust - sudo: required +dist: trusty +addons: + apt: + packages: + - libssl-dev +cache: cargo rust: - stable - beta - nightly - -matrix: - allow_failures: - - rust: nightly - -addons: - apt: - packages: - - libcurl4-openssl-dev - - libelf-dev - - libdw-dev - - cmake - - gcc - - binutils-dev - - libiberty-dev - -services: -- docker - os: -- linux -- osx - -rust: -- stable -- beta -- nightly - + - linux + - osx matrix: allow_failures: - rust: nightly +services: + - docker +before_install: + - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then + docker pull greenmail/standalone:1.5.8 && + docker run -d -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8; + fi script: + - cargo clean - cargo check --all-targets - cargo test --lib - cargo test --doc - - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cargo test --tests; fi - -before_install: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - docker pull greenmail/standalone:1.5.8 && - docker run -d -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8; + cargo test --tests; + else; + cargo test --lib; fi +before_cache: | + if [[ "$TRAVIS_RUST_VERSION" == nightly ]]; then + RUSTFLAGS="--cfg procmacro2_semver_exempt" cargo install cargo-tarpaulin + fi + after_failure: - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then docker logs (docker ps -q); fi after_success: | - if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == "stable" ]]; then - wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && - tar xzf master.tar.gz && - cd kcov-master && - mkdir build && - cd build && - cmake .. && - make && - make install DESTDIR=../../kcov-build && - cd ../.. && - rm -rf kcov-master && - ls target/debug/deps && - for file in target/debug/deps/imap*[^\.d]; do mkdir -p "target/cov/$(basename $file)"; ./kcov-build/usr/local/bin/kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; done && - bash <(curl -s https://codecov.io/bash) && - echo "Uploaded code coverage"; + if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == nightly ]]; then + cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID fi From 9be18cc574ea9c976497de19c9b03cae7a080938 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 18:58:57 -0500 Subject: [PATCH 10/14] No need to even install coverage on osx --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 856d6d62..298d2ec4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,7 @@ script: fi before_cache: | - if [[ "$TRAVIS_RUST_VERSION" == nightly ]]; then + if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == nightly ]]; then RUSTFLAGS="--cfg procmacro2_semver_exempt" cargo install cargo-tarpaulin fi From b75e30802afbc2a57cf6c97fb1fc5c92ac9a3dce Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 19:07:39 -0500 Subject: [PATCH 11/14] No need to test --lib twice --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 298d2ec4..2ff2d74d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,6 @@ before_install: script: - cargo clean - cargo check --all-targets - - cargo test --lib - cargo test --doc - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cargo test --tests; From 74fc7456189f79b067aadf407e6196024c87c942 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 19:08:05 -0500 Subject: [PATCH 12/14] Fix typo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2ff2d74d..cf49887e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,7 +31,7 @@ script: - cargo test --doc - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cargo test --tests; - else; + else cargo test --lib; fi From 328144b3f587b019fc3f6d2ff8ee39a5a099fd2e Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 19:27:17 -0500 Subject: [PATCH 13/14] Add testing instructions to README --- README.md | 11 +++++++++++ README.tpl | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/README.md b/README.md index 2c7abb70..4ac8b7a8 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,17 @@ fn fetch_inbox_top() -> imap::error::Result> { } ``` +## Running the test suite + +To run the integration tests, you need to have [GreenMail +running](http://www.icegreen.com/greenmail/#deploy_docker_standalone). The +easiest way to do that is with Docker: + +```console +$ docker pull greenmail/standalone:1.5.8 +$ docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8 +``` + ## License Licensed under either of diff --git a/README.tpl b/README.tpl index 7d9b4c1e..dd57edff 100644 --- a/README.tpl +++ b/README.tpl @@ -12,6 +12,17 @@ {{readme}} +## Running the test suite + +To run the integration tests, you need to have [GreenMail +running](http://www.icegreen.com/greenmail/#deploy_docker_standalone). The +easiest way to do that is with Docker: + +```console +$ docker pull greenmail/standalone:1.5.8 +$ docker run -t -i -e GREENMAIL_OPTS='-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.auth.disabled -Dgreenmail.verbose' -p 3025:3025 -p 3110:3110 -p 3143:3143 -p 3465:3465 -p 3993:3993 -p 3995:3995 greenmail/standalone:1.5.8 +``` + ## License Licensed under either of From 26d8e8e33387160e5e91d32bc3d9d41c68ada025 Mon Sep 17 00:00:00 2001 From: Jon Gjengset Date: Thu, 22 Nov 2018 20:57:18 -0500 Subject: [PATCH 14/14] Actually, now it's codecov.io --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cf49887e..a08fa80f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,5 +45,6 @@ after_failure: after_success: | if [[ "$TRAVIS_OS_NAME" == "linux" && "$TRAVIS_RUST_VERSION" == nightly ]]; then - cargo tarpaulin --ciserver travis-ci --coveralls $TRAVIS_JOB_ID + cargo tarpaulin --out Xml; + bash <(curl -s https://codecov.io/bash); fi