Radish alpha
r
rad:zwTxygwuz5LDGBq255RA2CbNGrz8
Radicle CI broker
Radicle
Git
refactor(src/adapter.rs): reduce code duplication in tests
Lars Wirzenius committed 7 months ago
commit 6959f65fcc2cda4368e273639b88869323bc77a4
parent 1ca695f
1 file changed +80 -73
modified src/adapter.rs
@@ -447,9 +447,9 @@ pub enum AdapterError {

#[cfg(test)]
mod test {
-
    use std::{fs::write, io::ErrorKind, time::Duration};
+
    use std::{fs::write, io::ErrorKind, path::PathBuf, time::Duration};

-
    use tempfile::{tempdir, NamedTempFile};
+
    use tempfile::{tempdir, NamedTempFile, TempDir};

    use radicle::git::Oid;
    use radicle::prelude::RepoId;
@@ -485,17 +485,24 @@ mod test {
            .build())
    }

+
    #[allow(clippy::unwrap_used)]
+
    fn adapter(tmp: &TempDir, shell: &'static str) -> PathBuf {
+
        let bin = tmp.path().join("adapter.sh");
+
        mock_adapter(&bin, shell).unwrap();
+
        bin
+
    }
+

    #[test]
    fn adapter_reports_success() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"success"}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -509,15 +516,15 @@ echo '{"response":"finished","result":"success"}'

    #[test]
    fn adapter_reports_failure() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"failure"}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -536,17 +543,17 @@ echo '{"response":"finished","result":"failure"}'

    #[test]
    fn adapter_exits_nonzero() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"failure"}'
echo woe be me 1>&2
exit 1
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -562,13 +569,13 @@ exit 1

    #[test]
    fn adapter_is_killed_before_any_messages() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
-
kill -9 $$
-
"#;
-

        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
+
kill -9 $$
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -583,12 +590,12 @@ kill -9 $$

    #[test]
    fn adapter_ends_ok_before_first_message() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
-
"#;
-

        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -603,15 +610,15 @@ kill -9 $$

    #[test]
    fn adapter_is_killed_before_first_message() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
kill -9 $$
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -626,14 +633,14 @@ kill -9 $$

    #[test]
    fn adapter_ends_ok_before_second_message() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -648,16 +655,16 @@ echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'

    #[test]
    fn adapter_is_killed_after_second_message() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"success"}'
kill -9 $$
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -676,15 +683,15 @@ kill -9 $$

    #[test]
    fn adapter_produces_as_bad_message() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"success","bad":"field"}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -702,14 +709,14 @@ echo '{"response":"finished","result":"success","bad":"field"}'

    #[test]
    fn adapter_first_message_isnt_triggered() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"finished","result":"success"}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -729,16 +736,16 @@ echo '{"response":"finished","result":"success"}'

    #[test]
    fn adapter_outputs_too_many_messages() -> TestResult<()> {
-
        const ADAPTER: &str = r#"#!/bin/sh
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/sh
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"success"}'
echo '{"response":"finished","result":"success"}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;
@@ -813,15 +820,15 @@ echo '{"response":"finished","result":"success"}'
        // paths and errors should happen when a binary can't be
        // loaded due to missing dynamic linker or library or such.

-
        const ADAPTER: &str = r#"#!/bin/does-not-exist
+
        let tmp = tempdir()?;
+
        let bin = adapter(
+
            &tmp,
+
            r#"#!/bin/does-not-exist
read
echo '{"response":"triggered","run_id":{"id":"xyzzy"}}'
echo '{"response":"finished","result":"success"}'
-
"#;
-

-
        let tmp = tempdir()?;
-
        let bin = tmp.path().join("adapter.sh");
-
        mock_adapter(&bin, ADAPTER)?;
+
"#,
+
        );

        let db = db()?;
        let mut run = run()?;