aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2017-11-08 00:00:35 +0100
committerTeddy Wing2017-11-08 00:00:35 +0100
commit7144ae81c8d8308b30a8806370e11a35568ebe51 (patch)
tree0be88d6e4b106f75b570b3b40e4304e641177d2d
parent5e217b98734ea852ed2e6c284b0fe295951766b5 (diff)
downloadkipper-7144ae81c8d8308b30a8806370e11a35568ebe51.tar.bz2
jenkins.rs: Add `result_from_job`
This method will take a job JSON payload returned from the Jenkins API (http://jenkins/job/:project/:id/api/json), and return its status, success, failed, or pending. A new `JobStatus` type represents the status of jobs.
-rw-r--r--src/jenkins.rs62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/jenkins.rs b/src/jenkins.rs
index 609fa37..428b561 100644
--- a/src/jenkins.rs
+++ b/src/jenkins.rs
@@ -20,10 +20,19 @@
// fn request_job(url)
// fn result_from_job(payload)
+extern crate json;
extern crate reqwest;
use self::reqwest::header::{Authorization, Basic};
+#[derive(Debug, PartialEq, Eq)]
+pub enum JobStatus {
+ Success,
+ Failure,
+ Pending,
+ Unknown,
+}
+
pub fn auth_credentials() -> Basic {
Basic {
username: "username".to_string(),
@@ -44,6 +53,24 @@ pub fn get_jobs(repo_name: String) {//-> Vec<String> {
println!("{}", res.status());
}
+pub fn result_from_job(payload: String) -> JobStatus {
+ let mut job = json::parse(payload.as_ref()).unwrap();
+
+ if job["result"].is_null() {
+ return JobStatus::Pending
+ }
+
+ let status = job["result"].take_string().unwrap();
+
+ if status == "SUCCESS" {
+ JobStatus::Success
+ } else if status == "FAILURE" {
+ JobStatus::Failure
+ } else {
+ JobStatus::Unknown
+ }
+}
+
#[cfg(test)]
mod tests {
@@ -53,4 +80,39 @@ mod tests {
fn get_jobs_queries_jobs_from_jenkins_api() {
get_jobs("changes".to_string());
}
+
+ #[test]
+ fn result_from_job_is_success() {
+ let payload = r#"{
+ "result": "SUCCESS"
+ }"#;
+
+ assert_eq!(
+ result_from_job(payload.to_owned()),
+ JobStatus::Success
+ );
+ }
+
+ #[test]
+ fn result_from_job_is_failure() {
+ let payload = r#"{
+ "result": "FAILURE"
+ }"#;
+
+ assert_eq!(
+ result_from_job(payload.to_owned()),
+ JobStatus::Failure
+ );
+ }
+
+ #[test]
+ fn result_from_job_is_pending() {
+ let payload = r#"{
+ }"#;
+
+ assert_eq!(
+ result_from_job(payload.to_owned()),
+ JobStatus::Pending
+ );
+ }
}