Merge branch 'develop'
diff --git a/.travis.yml b/.travis.yml
index 6ebf32d..cef597e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,24 @@
---
+sudo: enabled
+dist: trust
+
language: rust
rust:
- stable
- beta
- nightly
+install:
+ - sudo add-apt-repository -y ppa:fkrull/deadsnakes
+ - sudo apt-get update
+ - sudo apt-get install -y python3.5 python3.5-dev
+ - sudo ln -sf /usr/bin/python3.5 /usr/bin/python3
+ - wget https://bootstrap.pypa.io/get-pip.py
+ - sudo python3 get-pip.py
+ - sudo pip3 install virtualenv
+ - cd tests/tuf-test-vectors && make init && cd ../../
+
script:
- - make travis
+ - RUST_BACKTRACE=full cargo build --verbose --features=cli
+ - ./tests/tuf-test-vectors/server.py --path tuf &>/dev/null &
+ - RUST_BACKTRACE=full cargo test --verbose --features=cli
diff --git a/Cargo.toml b/Cargo.toml
index fc2e715..bf85e91 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "tuf"
-version = "0.1.3"
+version = "0.1.4"
authors = [ "heartsucker <heartsucker@autistici.org>" ]
description = "Library for The Update Framework (TUF)"
homepage = "https://github.com/heartsucker/rust-tuf"
diff --git a/Makefile b/Makefile
deleted file mode 100644
index ad5a83a..0000000
--- a/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-.PHONY: clean help test travis
-.DEFAULT_GOAL := help
-
-clean: ## Remove junk
- @find . -name '*.rs.bk' -delete
-
-help: ## Print this message and exit
- @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%16s\033[0m : %s\n", $$1, $$2}' $(MAKEFILE_LIST)
-
-test: ## Run the tests with logging enabled
- @cargo test --features=cli --no-run && \
- RUST_LOG=debug cargo test --features=cli
-
-travis: ## Run the TravisCI tests
- @RUST_BACKTRACE=full cargo build --verbose --features=cli && \
- RUST_BACKTRACE=full cargo test --verbose --features=cli || \
- { cat Cargo.lock; exit 1; }
diff --git a/src/tuf.rs b/src/tuf.rs
index fcc7fa6..fec0a1d 100644
--- a/src/tuf.rs
+++ b/src/tuf.rs
@@ -623,7 +623,12 @@
buf
}
&FetchType::Http(ref url) => {
- let url = url.join(&format!("{}{}.json", metadata_version_str, role))?;
+ let mut url = url.clone();
+ {
+ url.path_segments_mut()
+ .map_err(|_| Error::Generic("URL path could not be mutated".to_string()))?
+ .push(&format!("{}{}.json", metadata_version_str, role));
+ }
let mut resp = http_client.get(url).send()?;
let mut buf = Vec::new();
@@ -675,7 +680,12 @@
buf
}
&FetchType::Http(ref url) => {
- let url = url.join("root.json")?;
+ let mut url = url.clone();
+ {
+ url.path_segments_mut()
+ .map_err(|_| Error::Generic("URL path could not be mutated".to_string()))?
+ .push("root.json");
+ }
let mut resp = http_client.get(url).send()?;
let mut buf = Vec::new();
resp.read_to_end(&mut buf).map(|_| ())?;
@@ -715,7 +725,12 @@
buf
}
&FetchType::Http(ref url) => {
- let url = url.join("1.root.json")?;
+ let mut url = url.clone();
+ {
+ url.path_segments_mut()
+ .map_err(|_| Error::Generic("URL path could not be mutated".to_string()))?
+ .push("1.root.json");
+ }
let mut resp = http_client.get(url).send()?;
let mut buf = Vec::new();
resp.read_to_end(&mut buf).map(|_| ())?;
diff --git a/tests/vectors.rs b/tests/vectors.rs
index 3640495..0d17c5c 100644
--- a/tests/vectors.rs
+++ b/tests/vectors.rs
@@ -5,6 +5,7 @@
extern crate serde_json as json;
extern crate tempdir;
extern crate tuf;
+extern crate url;
use data_encoding::HEXLOWER;
use std::fs::File;
@@ -13,6 +14,7 @@
use tempdir::TempDir;
use tuf::{Tuf, Config, Error, RemoteRepo};
use tuf::meta::{Key, KeyValue, KeyType};
+use url::Url;
fn load_vector_meta() -> String {
@@ -46,7 +48,12 @@
typ: String,
}
-fn run_test_vector(test_path: &str) {
+enum TestType {
+ File,
+ Http
+}
+
+fn run_test_vector(test_path: &str, test_type: TestType) {
let temp_dir = TempDir::new("rust-tuf").expect("couldn't make temp dir");
let temp_path = temp_dir.into_path();
@@ -93,9 +100,13 @@
})
.collect();
- let config = Config::build()
- .remote(RemoteRepo::File(vector_path.join("repo")))
- .local_path(temp_path.clone())
+ let config = match test_type {
+ TestType::File => Config::build()
+ .remote(RemoteRepo::File(vector_path.join("repo"))),
+ TestType::Http => Config::build()
+ .remote(RemoteRepo::Http(Url::parse(
+ &format!("http://localhost:8080/{}/repo", test_path)).expect("bad url"))),
+ }.local_path(temp_path.clone())
.finish()
.expect("bad config");
@@ -178,234 +189,78 @@
}
}
-#[test]
-fn vector_001() {
- run_test_vector("001")
+
+macro_rules! test_cases {
+ ($name: expr, $md: ident) => {
+ mod $md {
+ use $crate::{run_test_vector, TestType};
+
+ #[test]
+ fn file_test() {
+ run_test_vector($name, TestType::File)
+ }
+
+ // TODO no idea how windows shell scipting works
+ #[cfg(not(windows))]
+ #[test]
+ fn http_test() {
+ run_test_vector($name, TestType::Http)
+ }
+ }
+ }
}
-#[test]
-fn vector_002() {
- run_test_vector("002")
-}
-
-// TODO 003
-// TODO 004
-
-#[test]
-fn vector_005() {
- run_test_vector("005")
-}
-
-// TODO 006
-
-#[test]
-fn vector_007() {
- run_test_vector("007")
-}
-
-#[test]
-fn vector_008() {
- run_test_vector("008")
-}
-
-#[test]
-fn vector_009() {
- run_test_vector("009")
-}
-
-#[test]
-fn vector_010() {
- run_test_vector("010")
-}
-
-#[test]
-fn vector_011() {
- run_test_vector("011")
-}
-
-#[test]
-fn vector_012() {
- run_test_vector("012")
-}
-
-#[test]
-fn vector_013() {
- run_test_vector("013")
-}
-
-#[test]
-fn vector_014() {
- run_test_vector("014")
-}
-
-#[test]
-fn vector_015() {
- run_test_vector("015")
-}
-
-#[test]
-fn vector_016() {
- run_test_vector("016")
-}
-
-#[test]
-fn vector_017() {
- run_test_vector("017")
-}
-
-#[test]
-fn vector_018() {
- run_test_vector("018")
-}
-
-#[test]
-fn vector_019() {
- run_test_vector("019")
-}
-
-#[test]
-fn vector_020() {
- run_test_vector("020")
-}
-
-#[test]
-fn vector_021() {
- run_test_vector("021")
-}
-
-#[test]
-fn vector_022() {
- run_test_vector("022")
-}
-
-#[test]
-fn vector_023() {
- run_test_vector("023")
-}
-
-#[test]
-fn vector_024() {
- run_test_vector("024")
-}
-
-#[test]
-fn vector_025() {
- run_test_vector("025")
-}
-
-#[test]
-fn vector_026() {
- run_test_vector("026")
-}
-
-// TODO 027
-// TODO 028
-
-#[test]
-fn vector_029() {
- run_test_vector("029")
-}
-
-#[test]
-fn vector_030() {
- run_test_vector("030")
-}
-
-#[test]
-fn vector_031() {
- run_test_vector("031")
-}
-
-#[test]
-fn vector_032() {
- run_test_vector("032")
-}
-
-#[test]
-fn vector_033() {
- run_test_vector("033")
-}
-
-#[test]
-fn vector_034() {
- run_test_vector("034")
-}
-
-// TODO 035
-// TODO 036
-
-#[test]
-fn vector_037() {
- run_test_vector("037")
-}
-
-#[test]
-fn vector_038() {
- run_test_vector("038")
-}
-
-#[test]
-fn vector_039() {
- run_test_vector("039")
-}
-
-#[test]
-fn vector_040() {
- run_test_vector("040")
-}
-
-// TODO 041
-// TODO 042
-// TODO 043
-// TODO 044
-
-#[test]
-fn vector_045() {
- run_test_vector("045")
-}
-
-#[test]
-fn vector_046() {
- run_test_vector("046")
-}
-
-#[test]
-fn vector_047() {
- run_test_vector("047")
-}
-
-#[test]
-fn vector_048() {
- run_test_vector("048")
-}
-
-#[test]
-fn vector_049() {
- run_test_vector("049")
-}
-
-
-#[test]
-fn vector_050() {
- run_test_vector("050")
-}
-
-#[test]
-fn vector_051() {
- run_test_vector("051")
-}
-
-#[test]
-fn vector_052() {
- run_test_vector("052")
-}
-
-#[test]
-fn vector_053() {
- run_test_vector("053")
-}
-
-#[test]
-fn vector_054() {
- run_test_vector("054")
-}
+test_cases!("001", _001);
+test_cases!("002", _002);
+// test_cases!("003", _003);
+// test_cases!("004", _004);
+test_cases!("005", _005);
+// test_cases!("006", _006);
+test_cases!("007", _007);
+test_cases!("008", _008);
+test_cases!("009", _009);
+test_cases!("010", _010);
+test_cases!("011", _011);
+test_cases!("012", _012);
+test_cases!("013", _013);
+test_cases!("014", _014);
+test_cases!("015", _015);
+test_cases!("016", _016);
+test_cases!("017", _017);
+test_cases!("018", _018);
+test_cases!("019", _019);
+test_cases!("020", _020);
+test_cases!("021", _021);
+test_cases!("022", _022);
+test_cases!("023", _023);
+test_cases!("024", _024);
+test_cases!("025", _025);
+test_cases!("026", _026);
+// test_cases!("027", _027);
+// test_cases!("028", _028);
+test_cases!("029", _029);
+test_cases!("030", _030);
+test_cases!("031", _031);
+test_cases!("032", _032);
+test_cases!("033", _033);
+test_cases!("034", _034);
+// test_cases!("035", _035);
+// test_cases!("036", _036);
+test_cases!("037", _037);
+test_cases!("038", _038);
+test_cases!("039", _039);
+test_cases!("040", _040);
+// test_cases!("041", _041);
+// test_cases!("042", _042);
+// test_cases!("043", _043);
+// test_cases!("044", _044);
+test_cases!("045", _045);
+test_cases!("046", _046);
+test_cases!("047", _047);
+test_cases!("048", _048);
+test_cases!("049", _049);
+test_cases!("050", _050);
+test_cases!("051", _051);
+test_cases!("052", _052);
+test_cases!("053", _053);
+test_cases!("054", _054);