blob: e898a4100cff83f36c943fae9f206cf2ef80d0dd [file] [log] [blame]
<h1>example_test.rb</h1>
<div class="highlight"><pre><span></span><span class="nb">require</span> <span class="s1">&#39;minitest/autorun&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;qpid_proton&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;socket&#39;</span>
<span class="nb">require</span> <span class="s1">&#39;rbconfig&#39;</span>
<span class="k">begin</span>
<span class="no">MiniTest</span><span class="o">::</span><span class="no">Test</span>
<span class="k">rescue</span> <span class="no">NameError</span> <span class="c1"># For older versions of MiniTest</span>
<span class="no">MiniTest</span><span class="o">::</span><span class="no">Test</span> <span class="o">=</span> <span class="no">MiniTest</span><span class="o">::</span><span class="no">Unit</span><span class="o">::</span><span class="no">TestCase</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">listening_port</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="sr">/Listening on ([0-9]+)/</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">s</span><span class="p">)</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">listening_url</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
<span class="s2">&quot;:</span><span class="si">#{</span><span class="n">listening_port</span> <span class="n">s</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">ExampleTest</span> <span class="o">&lt;</span> <span class="no">MiniTest</span><span class="o">::</span><span class="no">Test</span>
<span class="k">def</span> <span class="nf">run_script</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="no">IO</span><span class="o">.</span><span class="n">popen</span><span class="p">(</span><span class="o">[</span> <span class="no">RbConfig</span><span class="o">.</span><span class="n">ruby</span> <span class="o">]</span> <span class="o">+</span> <span class="n">args</span><span class="o">.</span><span class="n">map</span> <span class="p">{</span> <span class="o">|</span><span class="n">a</span><span class="o">|</span> <span class="n">a</span><span class="o">.</span><span class="n">to_s</span> <span class="p">})</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">assert_output</span><span class="p">(</span><span class="n">want</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="n">assert_equal</span><span class="p">(</span><span class="n">want</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">run_script</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">strip</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">test_helloworld</span>
<span class="n">assert_output</span><span class="p">(</span><span class="s2">&quot;Hello world!&quot;</span><span class="p">,</span> <span class="s2">&quot;helloworld.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">test_client_server</span>
<span class="n">want</span> <span class="o">=</span> <span class="o">&lt;&lt;</span><span class="dl">EOS</span>
<span class="sh">-&gt; Twas brillig, and the slithy toves</span>
<span class="sh">&lt;- TWAS BRILLIG, AND THE SLITHY TOVES</span>
<span class="sh">-&gt; Did gire and gymble in the wabe.</span>
<span class="sh">&lt;- DID GIRE AND GYMBLE IN THE WABE.</span>
<span class="sh">-&gt; All mimsy were the borogroves,</span>
<span class="sh">&lt;- ALL MIMSY WERE THE BOROGROVES,</span>
<span class="sh">-&gt; And the mome raths outgrabe.</span>
<span class="sh">&lt;- AND THE MOME RATHS OUTGRABE.</span>
<span class="dl">EOS</span>
<span class="n">server</span> <span class="o">=</span> <span class="n">run_script</span><span class="p">(</span><span class="s2">&quot;server.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="n">assert_output</span><span class="p">(</span><span class="n">want</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="s2">&quot;client.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="k">ensure</span>
<span class="no">Process</span><span class="o">.</span><span class="n">kill</span> <span class="ss">:TERM</span><span class="p">,</span> <span class="n">server</span><span class="o">.</span><span class="n">pid</span> <span class="k">if</span> <span class="n">server</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">test_send_recv</span>
<span class="n">assert_output</span><span class="p">(</span><span class="s2">&quot;All 10 messages confirmed!&quot;</span><span class="p">,</span> <span class="s2">&quot;simple_send.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="n">want</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="o">..</span><span class="mi">9</span><span class="p">)</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="o">|</span> <span class="n">x</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;Received: sequence </span><span class="si">#{</span><span class="n">y</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="p">}</span>
<span class="n">assert_output</span><span class="p">(</span><span class="n">want</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="s2">&quot;simple_recv.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">test_ssl_send_recv</span>
<span class="n">skip</span> <span class="s1">&#39;SSL not available&#39;</span> <span class="k">unless</span> <span class="no">Qpid</span><span class="o">::</span><span class="no">Proton</span><span class="o">::</span><span class="no">SSL</span><span class="o">.</span><span class="n">present?</span>
<span class="n">out</span> <span class="o">=</span> <span class="n">run_script</span><span class="p">(</span><span class="s2">&quot;ssl_send.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">strip</span>
<span class="n">assert_match</span><span class="p">(</span><span class="sr">/Connection secured with &quot;...*\&quot;\nAll 10 messages confirmed!/</span><span class="p">,</span> <span class="n">out</span><span class="p">)</span>
<span class="n">want</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="o">..</span><span class="mi">9</span><span class="p">)</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="o">|</span> <span class="n">x</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;Received: sequence </span><span class="si">#{</span><span class="n">y</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="p">}</span>
<span class="n">assert_output</span><span class="p">(</span><span class="n">want</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="s2">&quot;simple_recv.rb&quot;</span><span class="p">,</span> <span class="vg">$url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">test_direct_recv</span>
<span class="nb">p</span> <span class="o">=</span> <span class="n">run_script</span><span class="p">(</span><span class="s2">&quot;direct_recv.rb&quot;</span><span class="p">,</span> <span class="s2">&quot;:0&quot;</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="n">url</span> <span class="o">=</span> <span class="n">listening_url</span><span class="p">(</span><span class="nb">p</span><span class="o">.</span><span class="n">readline</span><span class="p">)</span> <span class="c1"># Wait till ready</span>
<span class="n">assert_output</span><span class="p">(</span><span class="s2">&quot;All 10 messages confirmed!&quot;</span><span class="p">,</span> <span class="s2">&quot;simple_send.rb&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="n">want</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="o">..</span><span class="mi">9</span><span class="p">)</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="o">|</span> <span class="n">x</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;Received: sequence </span><span class="si">#{</span><span class="n">y</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="p">}</span>
<span class="n">assert_equal</span><span class="p">(</span><span class="n">want</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="nb">p</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">strip</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">test_direct_send</span>
<span class="nb">p</span> <span class="o">=</span> <span class="n">run_script</span><span class="p">(</span><span class="s2">&quot;direct_send.rb&quot;</span><span class="p">,</span> <span class="s2">&quot;:0&quot;</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="n">url</span> <span class="o">=</span> <span class="n">listening_url</span><span class="p">(</span><span class="nb">p</span><span class="o">.</span><span class="n">readline</span><span class="p">)</span> <span class="c1"># Wait till ready</span>
<span class="n">want</span> <span class="o">=</span> <span class="p">(</span><span class="mi">0</span><span class="o">..</span><span class="mi">9</span><span class="p">)</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="o">|</span> <span class="n">x</span> <span class="o">&lt;&lt;</span> <span class="s2">&quot;Received: sequence </span><span class="si">#{</span><span class="n">y</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="p">}</span>
<span class="n">assert_output</span><span class="p">(</span><span class="n">want</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="s2">&quot;simple_recv.rb&quot;</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="s2">&quot;examples&quot;</span><span class="p">)</span>
<span class="n">assert_equal</span><span class="p">(</span><span class="s2">&quot;All 10 messages confirmed!&quot;</span><span class="p">,</span> <span class="nb">p</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">strip</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="c1"># Start the broker before all tests.</span>
<span class="vg">$broker</span> <span class="o">=</span> <span class="no">IO</span><span class="o">.</span><span class="n">popen</span><span class="p">(</span><span class="o">[</span><span class="no">RbConfig</span><span class="o">.</span><span class="n">ruby</span><span class="p">,</span> <span class="s1">&#39;broker.rb&#39;</span><span class="p">,</span> <span class="s2">&quot;:0&quot;</span><span class="o">]</span><span class="p">)</span>
<span class="n">l</span> <span class="o">=</span> <span class="vg">$broker</span><span class="o">.</span><span class="n">readline</span>
<span class="vg">$url</span> <span class="o">=</span> <span class="n">listening_url</span><span class="p">(</span><span class="n">l</span><span class="p">)</span>
<span class="c1"># Kill the broker after all tests</span>
<span class="no">MiniTest</span><span class="o">.</span><span class="n">after_run</span> <span class="k">do</span>
<span class="no">Process</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="ss">:TERM</span><span class="p">,</span> <span class="vg">$broker</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span> <span class="k">if</span> <span class="vg">$broker</span>
<span class="k">end</span>
</pre></div>
<p><a href="example_test.rb">Download this file</a></p>