refactor(src/adapter.rs): reduce code duplication in tests

Signed-off-by: Lars Wirzenius <liw@liw.fi>
This commit is contained in:
Lars Wirzenius
2025-09-09 12:27:17 +03:00
parent 1ca695f4d2
commit 6959f65fcc
+80 -73
View File
@@ -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()?;