diff --git a/.travis.yml b/.travis.yml index 5e78af7..ac83b7c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ cache: - kcov-master sudo: true dist: trusty +services: postgres addons: apt: @@ -21,7 +22,7 @@ addons: - libiberty-dev stages: - build - - code coverage + - test and coverage jobs: include: - stage: build @@ -34,21 +35,22 @@ jobs: env: - MIGRATION_DIR=migrations/sqlite FEATURES=sqlite DATABASE_URL=plume.sqlite3 script: cargo build --no-default-features --features="${FEATURES}" - - stage: code coverage - name: "Calculate code coverage" + - stage: test and coverage + name: "Test with potgresql backend" env: + - MIGRATION_DIR=migrations/postgres FEATURES=postgres DATABASE_URL=postgres://postgres@localhost/plume_tests + - RUSTFLAGS='-C link-dead-code' + before_script: psql -c 'create database plume_tests;' -U postgres + script: + - | + cargo test --features "${FEATURES}" --no-default-features --all && + ./script/compute_coverage.sh + - stage: test and coverage + name: "Test with Sqlite backend" + env: + - MIGRATION_DIR=migrations/sqlite FEATURES=sqlite DATABASE_URL=plume.sqlite3 - RUSTFLAGS='-C link-dead-code' script: - | - cargo test --features sqlite --no-default-features --all && ( - wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && - tar xzf master.tar.gz && - mkdir -p kcov-master/build && - cd kcov-master/build && - cmake .. && - make && - sudo make install && - cd ../.. && - for crate in plume plume_common plume_models plume_api plm lib; do for file in target/debug/$crate-*[^\.d]; do mkdir -p "target/cov/$(basename $file)"; kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$(basename $file)" "$file"; done; done && - bash <(curl -s https://codecov.io/bash) && - echo "Uploaded code coverage" || true ) + cargo test --features "${FEATURES}" --no-default-features --all && + ./script/compute_coverage.sh diff --git a/plume-models/tests/lib.rs b/plume-models/tests/lib.rs index 57bdd5c..210a8f8 100644 --- a/plume-models/tests/lib.rs +++ b/plume-models/tests/lib.rs @@ -5,15 +5,20 @@ extern crate plume_models; use diesel::Connection; use plume_models::{ + DATABASE_URL, Connection as Conn, instance::*, safe_string::SafeString, }; +#[cfg(feature = "sqlite")] embed_migrations!("../migrations/sqlite"); +#[cfg(feature = "postgres")] +embed_migrations!("../migrations/postgres"); + fn db() -> Conn { - let conn = Conn::establish(":memory:").expect("Couldn't connect to the database"); + let conn = Conn::establish(&*DATABASE_URL.as_str()).expect("Couldn't connect to the database"); embedded_migrations::run(&conn).expect("Couldn't run migrations"); conn } @@ -21,19 +26,22 @@ fn db() -> Conn { #[test] fn instance_insert() { let conn = &db(); - Instance::insert(conn, NewInstance { - default_license: "WTFPL".to_string(), - local: true, - long_description: SafeString::new("This is my instance."), - long_description_html: "

This is my instance

".to_string(), - short_description: SafeString::new("My instance."), - short_description_html: "

My instance

".to_string(), - name: "My instance".to_string(), - open_registrations: true, - public_domain: "plu.me".to_string(), + conn.test_transaction::<_, (), _>(|| { + Instance::insert(conn, NewInstance { + default_license: "WTFPL".to_string(), + local: true, + long_description: SafeString::new("This is my instance."), + long_description_html: "

This is my instance

".to_string(), + short_description: SafeString::new("My instance."), + short_description_html: "

My instance

".to_string(), + name: "My instance".to_string(), + open_registrations: true, + public_domain: "plu.me".to_string(), + }); + let inst = Instance::get_local(conn); + assert!(inst.is_some()); + let inst = inst.unwrap(); + assert_eq!(inst.name, "My instance".to_string()); + Ok(()) }); - let inst = Instance::get_local(conn); - assert!(inst.is_some()); - let inst = inst.unwrap(); - assert_eq!(inst.name, "My instance".to_string()); } diff --git a/script/compute_coverage.sh b/script/compute_coverage.sh new file mode 100755 index 0000000..33a45b0 --- /dev/null +++ b/script/compute_coverage.sh @@ -0,0 +1,19 @@ +#!/bin/bash +wget https://github.com/SimonKagstrom/kcov/archive/master.tar.gz && +tar xzf master.tar.gz && +mkdir -p kcov-master/build && +cd kcov-master/build && +cmake .. && +make && +sudo make install && +cd ../.. && +for file in target/debug/*-*[^\.d]; do + if [[ -x "$file" ]] + then + filename=$(basename $file) + mkdir -p "target/cov/$filename" + kcov --exclude-pattern=/.cargo,/usr/lib --verify "target/cov/$filename" "$file" + fi +done && +bash <(curl -s https://codecov.io/bash) && +echo "Uploaded code coverage"