Radish alpha
r
rad:zwTxygwuz5LDGBq255RA2CbNGrz8
Radicle CI broker
Radicle
Git
tests: verify that the CI broker always writes the report page
Merged liw opened 1 year ago

Signed-off-by: Lars Wirzenius liw@liw.fi

2 files changed +23 -9 9c822c67 f6d61de9
modified ci-broker.md
@@ -153,6 +153,7 @@ when I run env HOME=../homedir python3 set-rid trigger.json testy
when I run synthetic-events synt.sock trigger.json shutdown.json --log log.txt

given an installed ci-broker
+
given a directory reports
given file broker.yaml
given file dummy.sh
when I run chmod +x dummy.sh
@@ -160,6 +161,7 @@ when I run chmod +x dummy.sh
when I run sed -i 's/"auto"/false/' homedir/.radicle/config.json
when I try to run env HOME=homedir RAD_HOME=homedir/.radicle RAD_SOCKET=synt.sock RUST_LOG=debug ci-broker broker.yaml
then command is successful
+
then file reports/index.html contains "xyzzy"
~~~


modified src/bin/ci-broker.rs
@@ -1,6 +1,6 @@
use std::{
    error::Error,
-
    path::PathBuf,
+
    path::{Path, PathBuf},
    process::exit,
    thread::{sleep, spawn},
    time::Duration,
@@ -16,7 +16,7 @@ use radicle_ci_broker::{
    error::BrokerError,
    event::{BrokerEvent, NodeEventSource},
    msg::RequestBuilder,
-
    pages::{PageBuilder, StatusPage},
+
    pages::{PageBuilder, PageError, StatusPage},
};

fn main() {
@@ -95,8 +95,9 @@ fn fallible_main() -> Result<(), BrokerError> {
    } else {
        PathBuf::from(".")
    };
+
    let report_dir2 = report_dir.clone();
    let interval = Duration::from_secs(config.status_page_update_interval());
-
    let status_thread = spawn(move || status_updater(report_dir, page2, interval));
+
    let status_thread = spawn(move || status_updater(report_dir2, page2, interval));
    debug!(
        "started thread to update status pages in the background: {:?}",
        status_thread.thread().id()
@@ -123,6 +124,22 @@ fn fallible_main() -> Result<(), BrokerError> {
        }
    }

+
    update_report_page(&report_dir, &mut page)?;
+

+
    Ok(())
+
}
+

+
fn update_report_page(dirname: &Path, page: &mut StatusPage) -> Result<(), PageError> {
+
    if dirname.exists() {
+
        page.update_timestamp();
+
        if let Err(e) = page.write(dirname) {
+
            eprintln!(
+
                "ERROR: failed to update repot pages in {}: {e}",
+
                dirname.display()
+
            );
+
            return Err(e);
+
        }
+
    }
    Ok(())
}

@@ -134,12 +151,7 @@ fn status_updater(dirname: PathBuf, mut page: StatusPage, interval: Duration) {
            if let Err(e) = page.write_json(&filename) {
                eprintln!("ERROR: failed to update {}: {e}", filename.display());
            }
-
            if let Err(e) = page.write(&dirname) {
-
                eprintln!(
-
                    "ERROR: failed to update repot pages in {}: {e}",
-
                    dirname.display()
-
                );
-
            }
+
            update_report_page(&dirname, &mut page).ok();
        }
        sleep(interval);
    }