ocaml-opentelemetry/eio/Eio_mock/index.html
2026-04-06 19:57:49 +00:00

12 lines
6.4 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Eio_mock (eio.Eio_mock)</title><meta charset="utf-8"/><link rel="stylesheet" href="../../_odoc-theme/odoc.css"/><meta name="generator" content="odoc 3.1.0"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">Index</a> &#x00BB; <a href="../index.html">eio</a> &#x00BB; Eio_mock</nav><header class="odoc-preamble"><h1>Module <code><span>Eio_mock</span></code></h1><p>Mocks for testing.</p><p>When testing an Eio program it is often convenient to use mock resources rather than real OS-provided ones. This allows precise control over the test, such as adding delays or simulated faults. You can always just implement the various Eio types directly, but this module provides some convenient pre-built mocks, and some helpers for creating your own mocks.</p><p>Mocks typically use <a href="../Eio/index.html#val-traceln"><code>Eio.traceln</code></a> to record how they were used. This output can be recorded and compared against a known-good copy using e.g. <a href="https://github.com/realworldocaml/mdx">ocaml-mdx</a>.</p><p>Mocks may require configuration. For example, a source flow needs to know what data to return when the application reads from it. This can be done using the various <code>on_*</code> functions. For example:</p><pre class="language-ocaml"><code> let stdin = Eio_mock.Flow.make &quot;stdin&quot; in
let stdout = Eio_mock.Flow.make &quot;stdout&quot; in
Eio_mock.Flow.on_read stdin [
`Return &quot;chunk1&quot;;
`Return &quot;chunk2&quot;;
`Raise End_of_file
];
Eio.Flow.copy stdin stdout</code></pre><p>This will produce:</p><pre class="language-ocaml"><code> +stdin: read &quot;chunk1&quot;
+stdout: wrote &quot;chunk1&quot;
+stdin: read &quot;chunk2&quot;
+stdout: wrote &quot;chunk2&quot;</code></pre></header><div class="odoc-tocs"><nav class="odoc-toc odoc-local-toc"><ul><li><a href="#configuration">Configuration</a></li><li><a href="#pre-defined-mocks">Pre-defined mocks</a></li><li><a href="#backend-for-mocks">Backend for mocks</a></li><li><a href="#mock-errors">Mock errors</a></li></ul></nav></div><div class="odoc-content"><h3 id="configuration"><a href="#configuration" class="anchor"></a>Configuration</h3><div class="odoc-spec"><div class="spec module anchored" id="module-Action"><a href="#module-Action" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Action/index.html">Action</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Actions that can be performed by mock handlers.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Handler"><a href="#module-Handler" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Handler/index.html">Handler</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Control how a mock responds.</p></div></div><h3 id="pre-defined-mocks"><a href="#pre-defined-mocks" class="anchor"></a>Pre-defined mocks</h3><div class="odoc-spec"><div class="spec module anchored" id="module-Flow"><a href="#module-Flow" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Flow/index.html">Flow</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Mock <a href="../Eio/Flow/index.html"><code>Eio.Flow</code></a> sources and sinks.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Net"><a href="#module-Net" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Net/index.html">Net</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>Mock <a href="../Eio/Net/index.html"><code>Eio.Net</code></a> networks and sockets.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Clock"><a href="#module-Clock" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Clock/index.html">Clock</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A mock <a href="../Eio/Time/index.html"><code>Eio.Time</code></a> clock for testing timeouts.</p></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Domain_manager"><a href="#module-Domain_manager" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Domain_manager/index.html">Domain_manager</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A mock <a href="../Eio/Domain_manager/index.html"><code>Eio.Domain_manager</code></a> that runs everything in a single domain.</p></div></div><h3 id="backend-for-mocks"><a href="#backend-for-mocks" class="anchor"></a>Backend for mocks</h3><p>The mocks can be used with any backend, but if you don't need any IO then you can use this one to avoid a dependency on eio_main.</p><div class="odoc-spec"><div class="spec module anchored" id="module-Backend"><a href="#module-Backend" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Backend/index.html">Backend</a></span><span> : <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div><div class="spec-doc"><p>A dummy Eio backend with no actual IO.</p></div></div><h3 id="mock-errors"><a href="#mock-errors" class="anchor"></a>Mock errors</h3><div class="odoc-spec"><div class="spec type extension anchored" id="extension-decl-Simulated_failure"><a href="#extension-decl-Simulated_failure" class="anchor"></a><code><span><span class="keyword">type</span> <a href="../Eio/Exn/Backend/index.html#type-t">Eio.Exn.Backend.t</a> += </span></code><ol><li id="extension-Simulated_failure" class="def variant extension anchored"><a href="#extension-Simulated_failure" class="anchor"></a><code><span>| </span><span><span class="extension">Simulated_failure</span></span></code><div class="def-doc"><span class="comment-delim">(*</span><p>A fake error code you can use for simulated faults.</p><span class="comment-delim">*)</span></div></li></ol></div></div></div></body></html>