diff --git a/mooncake-store/tests/e2e/store_client_e2e.py b/mooncake-store/tests/e2e/store_client_e2e.py index 9e0616777..f976fcc80 100644 --- a/mooncake-store/tests/e2e/store_client_e2e.py +++ b/mooncake-store/tests/e2e/store_client_e2e.py @@ -11,6 +11,19 @@ def make_payload(seq: int, size: int) -> bytes: return (seed * repeat)[:size] +def result_exit_code( + put_ok: int, put_fail: int, get_ok: int, get_fail: int, mismatch: int +) -> int: + """Return a failing status for any incomplete or incorrect I/O workload.""" + if mismatch > 0: + return 20 + if put_fail > 0 or get_fail > 0: + return 21 + if put_ok == 0 or get_ok == 0: + return 22 + return 0 + + def main() -> int: parser = argparse.ArgumentParser( description="Continuous MooncakeDistributedStore put/get workload" @@ -101,7 +114,9 @@ def main() -> int: f"get_ok={get_ok} get_fail={get_fail} mismatch={mismatch}", flush=True, ) - return 0 if mismatch == 0 else 20 + exit_code = result_exit_code(put_ok, put_fail, get_ok, get_fail, mismatch) + print(f"workload_exit_code {exit_code}", flush=True) + return exit_code if __name__ == "__main__": diff --git a/mooncake-store/tests/e2e/test_store_client_e2e_exit_code.py b/mooncake-store/tests/e2e/test_store_client_e2e_exit_code.py new file mode 100644 index 000000000..37ab527b4 --- /dev/null +++ b/mooncake-store/tests/e2e/test_store_client_e2e_exit_code.py @@ -0,0 +1,27 @@ +import unittest + +from store_client_e2e import result_exit_code + + +class ResultExitCodeTest(unittest.TestCase): + def test_successful_workload_passes(self) -> None: + self.assertEqual(result_exit_code(10, 0, 10, 0, 0), 0) + + def test_put_failures_fail_even_without_mismatches(self) -> None: + self.assertEqual(result_exit_code(0, 5, 0, 0, 0), 21) + + def test_get_failures_fail_even_without_mismatches(self) -> None: + self.assertEqual(result_exit_code(10, 0, 9, 1, 0), 21) + + def test_mismatch_has_its_own_failure_code(self) -> None: + self.assertEqual(result_exit_code(10, 0, 9, 0, 1), 20) + + def test_no_successful_puts_fails(self) -> None: + self.assertEqual(result_exit_code(0, 0, 0, 0, 0), 22) + + def test_no_successful_gets_fails(self) -> None: + self.assertEqual(result_exit_code(10, 0, 0, 0, 0), 22) + + +if __name__ == "__main__": + unittest.main()