liminal-server 0.25.4

Standalone server for the liminal messaging bus
Documentation
use super::build_script::{BuildMetadata, write_metadata};
use std::io::{self, Write};
use std::path::PathBuf;

type TestResult = Result<(), Box<dyn std::error::Error>>;

#[test]
fn build_metadata_emits_the_commit_and_each_watched_reference() -> TestResult {
    let metadata = BuildMetadata {
        commit: "fixture-commit".to_owned(),
        watched: vec![
            PathBuf::from("git/HEAD"),
            PathBuf::from("git/refs/heads/main"),
        ],
        warning: None,
    };
    let mut output = Vec::new();
    write_metadata(&metadata, &mut output)?;
    assert_eq!(
        String::from_utf8(output)?,
        concat!(
            "cargo:rerun-if-changed=build.rs\n",
            "cargo:rerun-if-changed=git/HEAD\n",
            "cargo:rerun-if-changed=git/refs/heads/main\n",
            "cargo:rustc-env=LIMINAL_BUILD_COMMIT=fixture-commit\n"
        )
    );
    Ok(())
}

#[test]
fn build_metadata_emits_a_named_warning_with_the_unknown_commit() -> TestResult {
    let metadata = BuildMetadata {
        commit: "unknown".to_owned(),
        watched: Vec::new(),
        warning: Some("workspace has no git metadata".to_owned()),
    };
    let mut output = Vec::new();
    write_metadata(&metadata, &mut output)?;
    assert_eq!(
        String::from_utf8(output)?,
        concat!(
            "cargo:rerun-if-changed=build.rs\n",
            "cargo:warning=SELF_STREAM_BUILD_UNKNOWN: workspace has no git metadata\n",
            "cargo:rustc-env=LIMINAL_BUILD_COMMIT=unknown\n"
        )
    );
    Ok(())
}

struct RefusedWriter;

impl Write for RefusedWriter {
    fn write(&mut self, _: &[u8]) -> io::Result<usize> {
        Err(io::Error::other("fixture metadata output refused"))
    }

    fn flush(&mut self) -> io::Result<()> {
        Ok(())
    }
}

#[test]
fn build_metadata_propagates_the_output_failure() -> TestResult {
    let metadata = BuildMetadata {
        commit: "unknown".to_owned(),
        watched: Vec::new(),
        warning: None,
    };
    let error = write_metadata(&metadata, &mut RefusedWriter)
        .err()
        .ok_or("metadata output failure was swallowed")?;
    assert_eq!(error.to_string(), "fixture metadata output refused");
    Ok(())
}