Files
rippled/LedgerReplay__test_8cpp_source.html
2023-04-12 00:15:56 +00:00

1861 lines
365 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 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>rippled: LedgerReplay_test.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">rippled
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_120ed4da3e3217b1e7fc0b4f48568e79.html">test</a></li><li class="navelem"><a class="el" href="dir_7ab758b8a77751d62709b12ccae53e10.html">app</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">LedgerReplay_test.cpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//------------------------------------------------------------------------------</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> This file is part of rippled: https://github.com/ripple/rippled</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> Copyright (c) 2020 Ripple Labs Inc.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> Permission to use, copy, modify, and/or distribute this software for any</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> purpose with or without fee is hereby granted, provided that the above</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> copyright notice and this permission notice appear in all copies.</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"></span> </div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> THE SOFTWARE IS PROVIDED &quot;AS IS&quot; AND THE AUTHOR DISCLAIMS ALL WARRANTIES</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">//==============================================================================</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/BuildLedger.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/LedgerMaster.h&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/LedgerReplay.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/LedgerReplayTask.h&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/LedgerReplayer.h&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/impl/LedgerDeltaAcquire.h&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/impl/LedgerReplayMsgHandler.h&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;ripple/app/ledger/impl/SkipListAcquire.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;ripple/basics/Slice.h&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;ripple/overlay/PeerSet.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;ripple/overlay/impl/PeerImp.h&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;test/jtx.h&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;test/jtx/envconfig.h&gt;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/chrono.html">chrono</a>&gt;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/thread.html">thread</a>&gt;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceripple.html">ripple</a> {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">namespace </span>test {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplay__test.html"> 40</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1LedgerReplay__test.html">LedgerReplay_test</a> : <span class="keyword">public</span> beast::unit_test::suite</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplay__test.html#add660c91c07a4d566a12b3183d033a69"> 43</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplay__test.html#add660c91c07a4d566a12b3183d033a69">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; testcase(<span class="stringliteral">&quot;Replay ledger&quot;</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// Build a ledger normally</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; env.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">XRP</a>(100000), alice, bob);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; env.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a> = env.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#a9e55bbdb66a785bfd0dda93802b514b6">app</a>().<a class="code" href="classripple_1_1Application.html#a57929fa83c551514e364fe6981b0c104">getLedgerMaster</a>();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> lastClosed = <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>.getClosedLedger();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> lastClosedParent =</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>.getLedgerByHash(lastClosed-&gt;info().parentHash);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> replayed = <a class="code" href="namespaceripple.html#a00a2aa0c3f2861ed15d2b9b8b71b03a3">buildLedger</a>(</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classripple_1_1LedgerReplay.html">LedgerReplay</a>(lastClosedParent, lastClosed),</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="namespaceripple.html#ad2487abbcc1a5d6064b72144b461df6eaf77cbea9706ce2ee7fdf5a85efbf70c5">tapNONE</a>,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; env.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#a9e55bbdb66a785bfd0dda93802b514b6">app</a>(),</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; env.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#af238c2610022423bbbdbf9f493bc74e1">journal</a>);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; BEAST_EXPECT(replayed-&gt;info().hash == lastClosed-&gt;info().hash);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;};</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a"> 72</a></span>&#160;<span class="keyword">enum class</span> <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a">InboundLedgersBehavior</a> {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">Good</a>,</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">DropAll</a>,</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;};</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html"> 82</a></span>&#160;<span class="keyword">class </span><a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html">MagicInboundLedgers</a> : <span class="keyword">public</span> <a class="code" href="classripple_1_1InboundLedgers.html">InboundLedgers</a></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a9701b8cb01c56429bdd9ff13031d445b"> 85</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a9701b8cb01c56429bdd9ff13031d445b">MagicInboundLedgers</a>(</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; ledgerSource,</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; ledgerSink,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a">InboundLedgersBehavior</a> bhvr)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; : ledgerSource(ledgerSource), ledgerSink(ledgerSink), bhvr(bhvr)</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html">MagicInboundLedgers</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">virtual</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Ledger const&gt;</a></div>
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a956648d3d15c9e8ffba10b960a6c5e55"> 95</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a956648d3d15c9e8ffba10b960a6c5e55">acquire</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash, <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code" href="structripple_1_1test_1_1jtx_1_1seq.html">seq</a>, <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7">InboundLedger::Reason</a>)<span class="keyword"></span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="keyword"> override</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (bhvr == <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">InboundLedgersBehavior::DropAll</a>)</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">auto</span> l = ledgerSource.getLedgerByHash(hash); l)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; {</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; ledgerSink.storeLedger(l);</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> l;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">virtual</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;InboundLedger&gt;</a></div>
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a588f7b40af6c6c3ffa7b084c6325c03a"> 110</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a588f7b40af6c6c3ffa7b084c6325c03a">find</a>(<a class="code" href="classripple_1_1base__uint.html">LedgerHash</a> <span class="keyword">const</span>&amp; hash)<span class="keyword"> override</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a32ad5902ac5e1149893eb38b3cf1ab2e"> 116</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a32ad5902ac5e1149893eb38b3cf1ab2e">gotLedgerData</a>(</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classripple_1_1base__uint.html">LedgerHash</a> <span class="keyword">const</span>&amp; <a class="code" href="namespaceripple_1_1test.html#a0bd41ec0e7d28cae7397e33711e22ff5">ledgerHash</a>,</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a>,</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;protocol::TMLedgerData&gt;</a>)<span class="keyword"> override</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#ab40a62e766af5c40dbc03f571f22083c"> 125</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#ab40a62e766af5c40dbc03f571f22083c">gotStaleData</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;protocol::TMLedgerData&gt;</a> packet)<span class="keyword"> override</span></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a8b5dec1e1d8d856f4406c59b63c6174c"> 130</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a8b5dec1e1d8d856f4406c59b63c6174c">logFailure</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; h, <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code" href="structripple_1_1test_1_1jtx_1_1seq.html">seq</a>)<span class="keyword"> override</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#aa284042ad6d4bea239c65803884f2b54"> 135</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#aa284042ad6d4bea239c65803884f2b54">isFailure</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; h)<span class="keyword"> override</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a2a0e7fb5a536af0345a8907127699add"> 141</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a2a0e7fb5a536af0345a8907127699add">clearFailures</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classJson_1_1Value.html">Json::Value</a></div>
<div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a5cc0f2ed06a80fc9d04d346edf0caa4c"> 146</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a5cc0f2ed06a80fc9d04d346edf0caa4c">getInfo</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">virtual</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#ad121c705b23993a932db17e2e4a21ae1"> 152</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#ad121c705b23993a932db17e2e4a21ae1">fetchRate</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a13db828e982bb41618dea15a8b01e003"> 158</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a13db828e982bb41618dea15a8b01e003">onLedgerFetched</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#ad721f621115df060fa2f9882dd8891d7"> 163</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#ad721f621115df060fa2f9882dd8891d7">gotFetchPack</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a3b9573297de275d86c441ac4cc5b2d49"> 167</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a3b9573297de275d86c441ac4cc5b2d49">sweep</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a624ebbf034f8c0d13e795ee4b22c33a5"> 172</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a624ebbf034f8c0d13e795ee4b22c33a5">stop</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
<div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#accaf15f353482bd8bf530e814d4323f3"> 176</a></span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#accaf15f353482bd8bf530e814d4323f3">ledgerSource</a>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#a2832e03e8024e529d172241404b707b6"> 177</a></span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#a2832e03e8024e529d172241404b707b6">ledgerSink</a>;</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MagicInboundLedgers.html#afb8d9471a9ae0de7b80649dc1009941a"> 178</a></span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a">InboundLedgersBehavior</a> <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html#afb8d9471a9ae0de7b80649dc1009941a">bhvr</a>;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;};</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e"> 181</a></span>&#160;<span class="keyword">enum class</span> <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e">PeerFeature</a> {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">LedgerReplayEnabled</a>,</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="structripple_1_1test_1_1jtx_1_1None.html">None</a>,</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;};</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html"> 191</a></span>&#160;<span class="keyword">class </span><a class="code" href="classripple_1_1test_1_1TestPeer.html">TestPeer</a> : <span class="keyword">public</span> <a class="code" href="classripple_1_1Peer.html">Peer</a></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;{</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a3b4e4157bd2e5e17221a01e06d520070"> 194</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a3b4e4157bd2e5e17221a01e06d520070">TestPeer</a>(<span class="keywordtype">bool</span> enableLedgerReplay) : ledgerReplayEnabled_(enableLedgerReplay)</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a49a0c65115d326e7fbd38be43a800f8d"> 199</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a49a0c65115d326e7fbd38be43a800f8d">send</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Message&gt;</a> <span class="keyword">const</span>&amp; m)<span class="keyword"> override</span></div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classbeast_1_1IP_1_1Endpoint.html">beast::IP::Endpoint</a></div>
<div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a31b518b004fd1fa0d597036180f21a5b"> 203</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a31b518b004fd1fa0d597036180f21a5b">getRemoteAddress</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a8ab88c7aa2fb32a5055e5b827054bda4"> 208</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a8ab88c7aa2fb32a5055e5b827054bda4">charge</a>(<a class="code" href="classripple_1_1Resource_1_1Charge.html">Resource::Charge</a> <span class="keyword">const</span>&amp; <a class="code" href="classripple_1_1test_1_1jtx_1_1fee.html">fee</a>)<span class="keyword"> override</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; id_t</div>
<div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a71506ecf36760b766e81a453df84e91a"> 212</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a71506ecf36760b766e81a453df84e91a">id</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">return</span> 1234;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a088d1200aef40cbe192d1af3521ecbf8"> 217</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a088d1200aef40cbe192d1af3521ecbf8">cluster</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a9c0bccd0f4de860c3bffc56679d40906"> 222</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a9c0bccd0f4de860c3bffc56679d40906">isHighLatency</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">int</span></div>
<div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a4314928c05d1c7643c057d3cd664b6ab"> 227</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a4314928c05d1c7643c057d3cd664b6ab">getScore</a>(<span class="keywordtype">bool</span>)<span class="keyword"> const override</span></div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">return</span> 0;</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp;</div>
<div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a301b593074c4a4ca47b722d1b0fadeb2"> 232</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a301b593074c4a4ca47b722d1b0fadeb2">getNodePublic</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">static</span> <a class="code" href="classripple_1_1PublicKey.html">PublicKey</a> key{};</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">return</span> key;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classJson_1_1Value.html">Json::Value</a></div>
<div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a48ba2e4da830701d38b324e9c43c4176"> 238</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a48ba2e4da830701d38b324e9c43c4176">json</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#af7b4733583f33b9d1df1a6dca0348e94"> 243</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#af7b4733583f33b9d1df1a6dca0348e94">supportsFeature</a>(<a class="code" href="namespaceripple.html#a3b423ad1ba6341f945c08c13fe141150">ProtocolFeature</a> f)<span class="keyword"> const override</span></div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span> (f == <a class="code" href="namespaceripple.html#a3b423ad1ba6341f945c08c13fe141150a955e673a299bbf8322d01b7b5e88be4e">ProtocolFeature::LedgerReplay</a> &amp;&amp; ledgerReplayEnabled_)</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::size_t&gt;</a></div>
<div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a089a7f15cfbf68aebcbb19e1eb763972"> 250</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a089a7f15cfbf68aebcbb19e1eb763972">publisherListSequence</a>(<a class="code" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp;)<span class="keyword"> const override</span></div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; }</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a07d59279bad263057859ce449fd1616b"> 255</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a07d59279bad263057859ce449fd1616b">setPublisherListSequence</a>(<a class="code" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp;, <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> <span class="keyword">const</span>)<span class="keyword"> override</span></div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; }</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp;</div>
<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a08580ae6c07807e3b0d70a480e653a67"> 259</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a08580ae6c07807e3b0d70a480e653a67">getClosedLedgerHash</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keyword">static</span> <a class="code" href="classripple_1_1base__uint.html">uint256</a> hash{};</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> hash;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; }</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a021a8599de198786f1dc71901cdf1e1f"> 265</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a021a8599de198786f1dc71901cdf1e1f">hasLedger</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash, <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code" href="structripple_1_1test_1_1jtx_1_1seq.html">seq</a>)<span class="keyword"> const override</span></div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a638f128c9c0f62f23d22bd41e2f97eaa"> 270</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a638f128c9c0f62f23d22bd41e2f97eaa">ledgerRange</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a>&amp; minSeq, <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a>&amp; maxSeq)<span class="keyword"> const override</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#aa6226f36aadeba23415ab0acc8be6670"> 274</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#aa6226f36aadeba23415ab0acc8be6670">hasTxSet</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash)<span class="keyword"> const override</span></div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a8332ea46a4f78f11378b128d729e72cd"> 279</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a8332ea46a4f78f11378b128d729e72cd">cycleStatus</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#aeab3b4b097662cd5f9ec0bfc2041bb10"> 283</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#aeab3b4b097662cd5f9ec0bfc2041bb10">hasRange</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> uMin, <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> uMax)<span class="keyword"> override</span></div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#ae6b951a8134eac2f989056efb31bb7e2"> 288</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#ae6b951a8134eac2f989056efb31bb7e2">compressionEnabled</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#af9564cc1d134445c828262c31371d115"> 293</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#af9564cc1d134445c828262c31371d115">sendTxQueue</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; }</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#aa7fff7d3f7018080efe29cca5d8eba11"> 297</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#aa7fff7d3f7018080efe29cca5d8eba11">addTxQueue</a>(<span class="keyword">const</span> <a class="code" href="classripple_1_1base__uint.html">uint256</a>&amp;)<span class="keyword"> override</span></div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a391311e2939da285e6502c94d9f1c01a"> 301</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a391311e2939da285e6502c94d9f1c01a">removeTxQueue</a>(<span class="keyword">const</span> <a class="code" href="classripple_1_1base__uint.html">uint256</a>&amp;)<span class="keyword"> override</span></div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a86cd77871fad7677f30757f903357ae2"> 305</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeer.html#a86cd77871fad7677f30757f903357ae2">txReduceRelayEnabled</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
<div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeer.html#a69752edc130b66cf2ec1fb93043882ee"> 310</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classripple_1_1test_1_1TestPeer.html#a69752edc130b66cf2ec1fb93043882ee">ledgerReplayEnabled_</a>;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;};</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; </div>
<div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1"> 313</a></span>&#160;<span class="keyword">enum class</span> <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> {</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">Good</a>,</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1ad10d06eac1b72b6b66d7e8bcd74474b6">Drop50</a>,</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">DropAll</a>,</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a1c680e775b81946aa93a83b6ad8e87d7">DropSkipListReply</a>,</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0cf51aa72b773c64178a944bf85ef503">DropLedgerDeltaReply</a>,</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8">Repeat</a>,</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;};</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; </div>
<div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html"> 328</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1TestPeerSet.html">TestPeerSet</a> : <span class="keyword">public</span> <a class="code" href="classripple_1_1PeerSet.html">PeerSet</a></div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;{</div>
<div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#a6a72d6274a497c5c6b7a2b5d59519d85"> 330</a></span>&#160; <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#a6a72d6274a497c5c6b7a2b5d59519d85">TestPeerSet</a>(</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; me,</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; other,</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> bhvr,</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordtype">bool</span> enableLedgerReplay)</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; : local(me)</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; , remote(other)</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; , dummyPeer(<a class="code" href="namespacestd.html">std</a>::make_shared&lt;<a class="code" href="classripple_1_1test_1_1TestPeer.html">TestPeer</a>&gt;(enableLedgerReplay))</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; , behavior(bhvr)</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; </div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#a24a2832c1d285a0c81fb5411792645b8"> 343</a></span>&#160; <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#a24a2832c1d285a0c81fb5411792645b8">addPeers</a>(</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> limit,</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">bool</span>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp;)&gt; hasItem,</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp;)&gt; onPeerAdded)<span class="keyword"> override</span></div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; hasItem(dummyPeer);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; onPeerAdded(dummyPeer);</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; </div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#a7cd356ffd4275c4238124677dbe992d3"> 353</a></span>&#160; <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#a7cd356ffd4275c4238124677dbe992d3">sendRequest</a>(</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; ::google::protobuf::Message <span class="keyword">const</span>&amp; msg,</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; protocol::MessageType type,</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp; peer)<span class="keyword"> override</span></div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">int</span> dropRate = 0;</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">if</span> (behavior == <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1ad10d06eac1b72b6b66d7e8bcd74474b6">PeerSetBehavior::Drop50</a>)</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; dropRate = 50;</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (behavior == <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>)</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; dropRate = 100;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; </div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">if</span> ((rand() % 100 + 1) &lt;= dropRate)</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; </div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">switch</span> (type)</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">case</span> protocol::mtPROOF_PATH_REQ: {</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordflow">if</span> (behavior == <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a1c680e775b81946aa93a83b6ad8e87d7">PeerSetBehavior::DropSkipListReply</a>)</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMProofPathRequest&gt;(</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keyword">dynamic_cast&lt;</span>protocol::TMProofPathRequest const&amp;<span class="keyword">&gt;</span>(msg));</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMProofPathResponse&gt;(</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; remote.processProofPathRequest(request));</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; local.processProofPathResponse(reply);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">if</span> (behavior == <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8">PeerSetBehavior::Repeat</a>)</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; local.processProofPathResponse(reply);</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; }</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">case</span> protocol::mtREPLAY_DELTA_REQ: {</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (behavior == <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0cf51aa72b773c64178a944bf85ef503">PeerSetBehavior::DropLedgerDeltaReply</a>)</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMReplayDeltaRequest&gt;(</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keyword">dynamic_cast&lt;</span>protocol::TMReplayDeltaRequest const&amp;<span class="keyword">&gt;</span>(msg));</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMReplayDeltaResponse&gt;(</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; remote.processReplayDeltaRequest(request));</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; local.processReplayDeltaResponse(reply);</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">if</span> (behavior == <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8">PeerSetBehavior::Repeat</a>)</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; local.processReplayDeltaResponse(reply);</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/set.html">std::set&lt;Peer::id_t&gt;</a>&amp;</div>
<div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#a0ea181601c1776afa9047bb9d5c9e2ea"> 399</a></span>&#160; <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#a0ea181601c1776afa9047bb9d5c9e2ea">getPeerIds</a>()<span class="keyword"> const override</span></div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">static</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/set.html">std::set&lt;Peer::id_t&gt;</a> emptyPeers;</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> emptyPeers;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; </div>
<div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#af1310036749ef7c1dde3ade149e9c281"> 405</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#af1310036749ef7c1dde3ade149e9c281">local</a>;</div>
<div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#a5c3a351bb9f2eefa2a86787961cceacb"> 406</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#a5c3a351bb9f2eefa2a86787961cceacb">remote</a>;</div>
<div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#af8c75a40184be023eec9d78417a8c7df"> 407</a></span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;TestPeer&gt;</a> <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#af8c75a40184be023eec9d78417a8c7df">dummyPeer</a>;</div>
<div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1TestPeerSet.html#a799f6f0f5bef6d61cccd769ecd2eb026"> 408</a></span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> <a class="code" href="structripple_1_1test_1_1TestPeerSet.html#a799f6f0f5bef6d61cccd769ecd2eb026">behavior</a>;</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;};</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; </div>
<div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html"> 414</a></span>&#160;<span class="keyword">class </span><a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html">TestPeerSetBuilder</a> : <span class="keyword">public</span> <a class="code" href="classripple_1_1PeerSetBuilder.html">PeerSetBuilder</a></div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;{</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html#acb43c49d60b31a842a9d799aac5346bf"> 417</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html#acb43c49d60b31a842a9d799aac5346bf">TestPeerSetBuilder</a>(</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; me,</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; other,</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> bhvr,</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e">PeerFeature</a> peerFeature)</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; : local(me)</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; , remote(other)</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; , behavior(bhvr)</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; , enableLedgerReplay(peerFeature == <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e">PeerFeature</a>::<a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">LedgerReplayEnabled</a>)</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; {</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; </div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr&lt;PeerSet&gt;</a></div>
<div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a56fa711d22dc68923e1a89eacf13f948"> 430</a></span>&#160; <a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a56fa711d22dc68923e1a89eacf13f948">build</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;TestPeerSet&gt;(</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; local, remote, behavior, enableLedgerReplay);</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; </div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00437"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a6686c411e2ed6370b44ccaf511cec3e9"> 437</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; <a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a6686c411e2ed6370b44ccaf511cec3e9">local</a>;</div>
<div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html#ac4915c4e114f34356c1dbbef1faef49c"> 438</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a>&amp; <a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html#ac4915c4e114f34356c1dbbef1faef49c">remote</a>;</div>
<div class="line"><a name="l00439"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a28a513b938b38d0de9f1ca2d89a7a028"> 439</a></span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> <a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a28a513b938b38d0de9f1ca2d89a7a028">behavior</a>;</div>
<div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a00e5264bd04a91e5cf6af1c151568e3f"> 440</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html#a00e5264bd04a91e5cf6af1c151568e3f">enableLedgerReplay</a>;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;};</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; </div>
<div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html"> 447</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1LedgerServer.html">LedgerServer</a></div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;{</div>
<div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html"> 449</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html">Parameter</a></div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; {</div>
<div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#a947fbed427c671d15ed304f91bf11a69"> 451</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#a947fbed427c671d15ed304f91bf11a69">initLedgers</a>;</div>
<div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#ac89bc3a7ddbafabdb29a3fd68f7bc2de"> 452</a></span>&#160; <span class="keywordtype">int</span> initAccounts = 10;</div>
<div class="line"><a name="l00453"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#a3bd21cf955ad336652eb8db52daa0374"> 453</a></span>&#160; <span class="keywordtype">int</span> initAmount = 1<span class="stringliteral">&#39;000&#39;</span>000;</div>
<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#adbbed62a46f1a4a84a915ade1f310be2"> 454</a></span>&#160; <span class="keywordtype">int</span> numTxPerLedger = 10;</div>
<div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#ae24872442b2dee7b6bfca3f5ef47a027"> 455</a></span>&#160; <span class="keywordtype">int</span> txAmount = 10;</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; };</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; </div>
<div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#abff2f2828e099d0f90dfc681651da211"> 458</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html#abff2f2828e099d0f90dfc681651da211">LedgerServer</a>(beast::unit_test::suite&amp; suite, <a class="code" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html">Parameter</a> <span class="keyword">const</span>&amp; p)</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; : env(suite)</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; , app(env.app())</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; , <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>(env.app().getLedgerMaster())</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; , msgHandler(env.app(), env.app().getLedgerReplayer())</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; , param(p)</div>
<div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div>
<div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; assert(param.initLedgers &gt; 0);</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; createAccounts(param.initAccounts);</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; createLedgerHistory();</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; app.logs().threshold(<a class="code" href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73beab6ef7006e42e82dcc97478e4e362f883">beast::severities::kWarning</a>);</div>
<div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; </div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a3261f40eb9a4a7739130ec465ed91bba"> 475</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a3261f40eb9a4a7739130ec465ed91bba">createAccounts</a>(<span class="keywordtype">int</span> newAccounts)</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keyword">auto</span> fundedAccounts = accounts.size();</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; newAccounts; ++i)</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; accounts.emplace_back(</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="stringliteral">&quot;alice_&quot;</span> + <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(fundedAccounts + i));</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; env.fund(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">jtx::XRP</a>(param.initAmount), accounts.back());</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; env.close();</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; </div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00491"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a2e1385f78f784b361d58f32487ccaaef"> 491</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a2e1385f78f784b361d58f32487ccaaef">sendPayments</a>(<span class="keywordtype">int</span> newTxes)</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; {</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordtype">int</span> fundedAccounts = accounts.size();</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; assert(fundedAccounts &gt;= newTxes);</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/unordered_set.html">std::unordered_set&lt;int&gt;</a> senders;</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; </div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// somewhat random but reproducible</span></div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keywordtype">int</span> r = <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>.getClosedLedger()-&gt;seq() * 7;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordtype">int</span> fromIdx = 0;</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordtype">int</span> toIdx = 0;</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keyword">auto</span> updateIdx = [&amp;]() {</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; assert(fundedAccounts &gt; senders.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/unordered_set/size.html">size</a>());</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; fromIdx = (fromIdx + r) % fundedAccounts;</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="keywordflow">while</span> (senders.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/unordered_set/count.html">count</a>(fromIdx) != 0)</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; fromIdx = (fromIdx + 1) % fundedAccounts;</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; senders.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/unordered_set/insert.html">insert</a>(fromIdx);</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; toIdx = (toIdx + r * 2) % fundedAccounts;</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">if</span> (toIdx == fromIdx)</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; toIdx = (toIdx + 1) % fundedAccounts;</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; };</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; </div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; newTxes; ++i)</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; updateIdx();</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; env.apply(</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="namespaceripple_1_1test_1_1jtx.html#a7816b23daf9b325ea1f88cc121a53d05">pay</a>(accounts[fromIdx],</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; accounts[toIdx],</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="namespaceripple_1_1test_1_1jtx.html#a47271eb5e7eb9b5aada383ccfaf9c0cf">jtx::drops</a>(<a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>.getClosedLedger()-&gt;fees().base) +</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">jtx::XRP</a>(param.txAmount)),</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <a class="code" href="structripple_1_1test_1_1jtx_1_1seq.html">jtx::seq</a>(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a6a6c61b8ddd714acf56b043d79af7e5d">jtx::autofill</a>),</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <a class="code" href="classripple_1_1test_1_1jtx_1_1fee.html">jtx::fee</a>(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a6a6c61b8ddd714acf56b043d79af7e5d">jtx::autofill</a>),</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <a class="code" href="classripple_1_1test_1_1jtx_1_1sig.html">jtx::sig</a>(<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a6a6c61b8ddd714acf56b043d79af7e5d">jtx::autofill</a>));</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; }</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; env.close();</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; }</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; </div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#ab9907fe3f5816162ad3a6c30fdf37f27"> 531</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html#ab9907fe3f5816162ad3a6c30fdf37f27">createLedgerHistory</a>()</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; param.initLedgers - 1; ++i)</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; {</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; sendPayments(param.numTxPerLedger);</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; }</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; </div>
<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a1bff2a2006f1201bd5011983447fd70a"> 539</a></span>&#160; <a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a1bff2a2006f1201bd5011983447fd70a">env</a>;</div>
<div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#aff3c327d9717f5c25e38398d25611505"> 540</a></span>&#160; <a class="code" href="classripple_1_1Application.html">Application</a>&amp; <a class="code" href="structripple_1_1test_1_1LedgerServer.html#aff3c327d9717f5c25e38398d25611505">app</a>;</div>
<div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7"> 541</a></span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>;</div>
<div class="line"><a name="l00542"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a61f9b82d3c39b758b5541ad15cb1ba01"> 542</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a> <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a61f9b82d3c39b758b5541ad15cb1ba01">msgHandler</a>;</div>
<div class="line"><a name="l00543"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a26da34be0f0ac39fb41c6d546a304873"> 543</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html">Parameter</a> <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a26da34be0f0ac39fb41c6d546a304873">param</a>;</div>
<div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerServer.html#a86a1876cfb0bbc6259f6f82e455e5857"> 544</a></span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;jtx::Account&gt;</a> <a class="code" href="structripple_1_1test_1_1LedgerServer.html#a86a1876cfb0bbc6259f6f82e455e5857">accounts</a>;</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;};</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; </div>
<div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f"> 547</a></span>&#160;<span class="keyword">enum class</span> <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> {</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">Failed</a>,</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">Completed</a>,</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa71b56450c5e1ce9ce5f10422f47beb06">NotDone</a>,</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fac30e98851cafc795dbe00917b7c4ccf8">NotExist</a>,</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;};</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; </div>
<div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html"> 561</a></span>&#160;<span class="keyword">class </span><a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html">LedgerReplayClient</a></div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;{</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00564"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#aadb938dc9624da72d3cdabc7cf8c998e"> 564</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#aadb938dc9624da72d3cdabc7cf8c998e">LedgerReplayClient</a>(</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; beast::unit_test::suite&amp; suite,</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html">LedgerServer</a>&amp; server,</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> behavior = <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>,</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a">InboundLedgersBehavior</a> inboundBhvr = <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e">PeerFeature</a> peerFeature = <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>)</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; : env(suite,</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; jtx::<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a287cf5b6a71db097fe1678c88926efb4">envconfig</a>(jtx::<a class="code" href="namespaceripple_1_1test_1_1jtx.html#a5f29996e384091b64ee6d78358afdc3f">port_increment</a>, 3),</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; nullptr,</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="namespacebeast.html">beast</a>::severities::<a class="code" href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73beae13a45640877c138fc59c94443ece6f0">kDisabled</a>)</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; , app(env.app())</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; , <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>(env.app().getLedgerMaster())</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; , inboundLedgers(</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; server.app.getLedgerMaster(),</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>,</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; inboundBhvr)</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; , serverMsgHandler(server.app, server.app.getLedgerReplayer())</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; , clientMsgHandler(env.app(), replayer)</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; , replayer(</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; env.app(),</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; inboundLedgers,</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="namespacestd.html">std</a>::make_unique&lt;<a class="code" href="classripple_1_1test_1_1TestPeerSetBuilder.html">TestPeerSetBuilder</a>&gt;(</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; clientMsgHandler,</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; serverMsgHandler,</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; behavior,</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; peerFeature))</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; {</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#ae05278d8cf1ae82458e19c0c483b6f49"> 594</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#ae05278d8cf1ae82458e19c0c483b6f49">addLedger</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Ledger const&gt;</a> <span class="keyword">const</span>&amp; l)</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; {</div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>.storeLedger(l);</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; }</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a716f0341fb3ff3c701bcf81ee085605c"> 600</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a716f0341fb3ff3c701bcf81ee085605c">haveLedgers</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; finishLedgerHash, <span class="keywordtype">int</span> totalReplay)</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> hash = finishLedgerHash;</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="keywordflow">for</span> (; i &lt; totalReplay; ++i)</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; {</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> l = <a class="code" href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ledgerMaster</a>.getLedgerByHash(hash);</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">if</span> (!l)</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; hash = l-&gt;info().parentHash;</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; }</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a0c45b977245b8718a74af7c8e8ac64e1"> 615</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a0c45b977245b8718a74af7c8e8ac64e1">waitForLedgers</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; finishLedgerHash, <span class="keywordtype">int</span> totalReplay)</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; {</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordtype">int</span> totalRound = 100;</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; totalRound; ++i)</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; {</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">if</span> (haveLedgers(finishLedgerHash, totalReplay))</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">if</span> (i &lt; totalRound - 1)</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/sleep_for.html">std::this_thread::sleep_for</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a>(100));</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; }</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a70e43267263d0831d09b12ff57b0de92"> 629</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a70e43267263d0831d09b12ff57b0de92">waitForDone</a>()</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keywordtype">int</span> totalRound = 100;</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; totalRound; ++i)</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; {</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordtype">bool</span> allDone = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; {</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; t : replayer.tasks_)</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">if</span> (!t-&gt;finished())</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; allDone = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; }</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; }</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">if</span> (allDone)</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (i &lt; totalRound - 1)</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/sleep_for.html">std::this_thread::sleep_for</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a>(100));</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; }</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; }</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::shared_ptr&lt;LedgerReplayTask&gt;</a>&gt;</div>
<div class="line"><a name="l00655"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a84fb795f944de17f84f6c69fe4698bc4"> 655</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a84fb795f944de17f84f6c69fe4698bc4">getTasks</a>()</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">return</span> replayer.tasks_;</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;LedgerReplayTask&gt;</a></div>
<div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a7f630b7f19e0df41ef7800b41ab37432"> 662</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a7f630b7f19e0df41ef7800b41ab37432">findTask</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash, <span class="keywordtype">int</span> totalReplay)</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; {</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keyword">auto</span> i = <a class="codeRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; replayer.tasks_.begin(), replayer.tasks_.end(), [&amp;](<span class="keyword">auto</span> <span class="keyword">const</span>&amp; t) {</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; return t-&gt;parameter_.finishHash_ == hash &amp;&amp;</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; t-&gt;parameter_.totalLedgers_ == totalReplay;</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; });</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">if</span> (i == replayer.tasks_.end())</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">return</span> *i;</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; </div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div>
<div class="line"><a name="l00676"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a566db0f6d52bb7951fcb5919b77feffb"> 676</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a566db0f6d52bb7951fcb5919b77feffb">countDeltas</a>()</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; {</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">return</span> replayer.deltas_.size();</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; </div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div>
<div class="line"><a name="l00683"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a9dac1636623a9feb03cb6a631c411f3f"> 683</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a9dac1636623a9feb03cb6a631c411f3f">countSkipLists</a>()</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; {</div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">return</span> replayer.skipLists_.size();</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; }</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; </div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00690"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a56298334026de896c3768c2560270c0b"> 690</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a56298334026de896c3768c2560270c0b">countsAsExpected</a>(</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> tasks,</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> skipLists,</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> deltas)</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; {</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; <span class="keywordflow">return</span> replayer.tasks_.size() == tasks &amp;&amp;</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; replayer.skipLists_.size() == skipLists &amp;&amp;</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; replayer.deltas_.size() == deltas;</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; </div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SkipListAcquire&gt;</a></div>
<div class="line"><a name="l00702"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a0930658e098f23f4d27f55b6f6424b82"> 702</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a0930658e098f23f4d27f55b6f6424b82">findSkipListAcquire</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash)</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; {</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keyword">auto</span> i = replayer.skipLists_.find(hash);</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span> (i == replayer.skipLists_.end())</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">return</span> i-&gt;second.lock();</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; </div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;LedgerDeltaAcquire&gt;</a></div>
<div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a1aeed5a348a41cb72af18d9c09fa4310"> 712</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a1aeed5a348a41cb72af18d9c09fa4310">findLedgerDeltaAcquire</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash)</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; {</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt;std::mutex&gt;</a> lock(replayer.mtx_);</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keyword">auto</span> i = replayer.deltas_.find(hash);</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordflow">if</span> (i == replayer.deltas_.end())</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">return</span> {};</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span> i-&gt;second.lock();</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; }</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; </div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a></div>
<div class="line"><a name="l00723"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#acc4cd2323c54c10a2cfc61b505b4efac"> 723</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#acc4cd2323c54c10a2cfc61b505b4efac">taskStatus</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;T&gt;</a> <span class="keyword">const</span>&amp; t)</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (t-&gt;failed_)</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>;</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (t-&gt;complete_)</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>;</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa71b56450c5e1ce9ce5f10422f47beb06">TaskStatus::NotDone</a>;</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; }</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; </div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00733"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a61e8d17eca1027a5143bdf419f64a43f"> 733</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a61e8d17eca1027a5143bdf419f64a43f">asExpected</a>(</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;LedgerReplayTask&gt;</a> <span class="keyword">const</span>&amp; task,</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> taskExpect,</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> skiplistExpect,</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> <span class="keyword">const</span>&amp; deltaExpects)</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">if</span> (taskStatus(task) == taskExpect)</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; {</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">if</span> (taskStatus(task-&gt;skipListAcquirer_) == skiplistExpect)</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; {</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (task-&gt;deltas_.size() == deltaExpects.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>())</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; deltaExpects.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>(); ++i)</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; {</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <span class="keywordflow">if</span> (taskStatus(task-&gt;deltas_[i]) != deltaExpects[i])</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; }</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; }</div>
<div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; }</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; }</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; }</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; </div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a2da8f3d27e2da922434b87af9ad76abc"> 758</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a2da8f3d27e2da922434b87af9ad76abc">asExpected</a>(</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash,</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordtype">int</span> totalReplay,</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> taskExpect,</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> skiplistExpect,</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> <span class="keyword">const</span>&amp; deltaExpects)</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; {</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keyword">auto</span> t = findTask(hash, totalReplay);</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">if</span> (!t)</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; {</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordflow">if</span> (taskExpect == <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fac30e98851cafc795dbe00917b7c4ccf8">TaskStatus::NotExist</a>)</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; }</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">return</span> asExpected(t, taskExpect, skiplistExpect, deltaExpects);</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; </div>
<div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00777"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#abfc051eb861037f706dc4a27e217a65c"> 777</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#abfc051eb861037f706dc4a27e217a65c">checkStatus</a>(</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash,</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <span class="keywordtype">int</span> totalReplay,</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> taskExpect,</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> skiplistExpect,</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> <span class="keyword">const</span>&amp; deltaExpects)</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; {</div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">auto</span> t = findTask(hash, totalReplay);</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="keywordflow">if</span> (!t)</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; {</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keywordflow">if</span> (taskExpect == <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fac30e98851cafc795dbe00917b7c4ccf8">TaskStatus::NotExist</a>)</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; }</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; </div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <span class="keywordflow">return</span> asExpected(t, taskExpect, skiplistExpect, deltaExpects);</div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; }</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordtype">bool</span></div>
<div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a2f9a7365f9ee783ad89399974c1dd47e"> 796</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a2f9a7365f9ee783ad89399974c1dd47e">waitAndCheckStatus</a>(</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; hash,</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <span class="keywordtype">int</span> totalReplay,</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> taskExpect,</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">TaskStatus</a> skiplistExpect,</div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> <span class="keyword">const</span>&amp; deltaExpects)</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; {</div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">if</span> (!waitForDone())</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; </div>
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <span class="keywordflow">return</span> checkStatus(</div>
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; hash, totalReplay, taskExpect, skiplistExpect, deltaExpects);</div>
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; }</div>
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
<div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#af329e3e7df56437bbac7a893f599b5be"> 810</a></span>&#160; <a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#af329e3e7df56437bbac7a893f599b5be">env</a>;</div>
<div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a59c4fbdbb3b8da098a1d7e383a0eb77c"> 811</a></span>&#160; <a class="code" href="classripple_1_1Application.html">Application</a>&amp; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a59c4fbdbb3b8da098a1d7e383a0eb77c">app</a>;</div>
<div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a3cfdfe289ee6550afa6208e9d7b156df"> 812</a></span>&#160; <a class="code" href="classripple_1_1LedgerMaster.html">LedgerMaster</a>&amp; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a3cfdfe289ee6550afa6208e9d7b156df">ledgerMaster</a>;</div>
<div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a2fd55a364cc77413544b6901d17c8de0"> 813</a></span>&#160; <a class="code" href="classripple_1_1test_1_1MagicInboundLedgers.html">MagicInboundLedgers</a> <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a2fd55a364cc77413544b6901d17c8de0">inboundLedgers</a>;</div>
<div class="line"><a name="l00814"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a5473dd2f3e5ec26fef3706e39b19fd59"> 814</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a> <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a5473dd2f3e5ec26fef3706e39b19fd59">serverMsgHandler</a>;</div>
<div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#a3b807716f400ad71b763fde18e0e15d0"> 815</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayMsgHandler.html">LedgerReplayMsgHandler</a> <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a3b807716f400ad71b763fde18e0e15d0">clientMsgHandler</a>;</div>
<div class="line"><a name="l00816"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1LedgerReplayClient.html#ac83f18125388adccf84ad0285cd30422"> 816</a></span>&#160; <a class="code" href="classripple_1_1LedgerReplayer.html">LedgerReplayer</a> <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#ac83f18125388adccf84ad0285cd30422">replayer</a>;</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;};</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; </div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacebeast_1_1severities.html">beast::severities</a>;</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00821"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#ad11ad14933c7bbfef5f57a948be1c307"> 821</a></span>&#160;<a class="code" href="namespaceripple_1_1test.html#ad11ad14933c7bbfef5f57a948be1c307">logAll</a>(</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html">LedgerServer</a>&amp; server,</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html">LedgerReplayClient</a>&amp; client,</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73be">beast::severities::Severity</a> level = Severity::kTrace)</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;{</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; server.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#aff3c327d9717f5c25e38398d25611505">app</a>.<a class="code" href="classripple_1_1Application.html#a25782128c9548339beec993b748b0268">logs</a>().<a class="code" href="classripple_1_1Logs.html#a5dc4fb3cb9c2b3c42fd54bef18d06c83">threshold</a>(level);</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; client.<a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html#a59c4fbdbb3b8da098a1d7e383a0eb77c">app</a>.<a class="code" href="classripple_1_1Application.html#a25782128c9548339beec993b748b0268">logs</a>().<a class="code" href="classripple_1_1Logs.html#a5dc4fb3cb9c2b3c42fd54bef18d06c83">threshold</a>(level);</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;}</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;<span class="comment">// logAll(net.server, net.client);</span></div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;<span class="comment"> * Create a LedgerServer and a LedgerReplayClient</span></div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00834"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1NetworkOfTwo.html"> 834</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a></div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160;{</div>
<div class="line"><a name="l00836"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1NetworkOfTwo.html#a1f19f202787d74ae8baf38f6df253453"> 836</a></span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a1f19f202787d74ae8baf38f6df253453">NetworkOfTwo</a>(</div>
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; beast::unit_test::suite&amp; suite,</div>
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html">LedgerServer::Parameter</a> <span class="keyword">const</span>&amp; param,</div>
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> behavior = <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>,</div>
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a">InboundLedgersBehavior</a> inboundBhvr = <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e">PeerFeature</a> peerFeature = <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>)</div>
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; : server(suite, param)</div>
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; , client(suite, server, behavior, inboundBhvr, peerFeature)</div>
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; {</div>
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="comment">// logAll(server, client);</span></div>
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div>
<div class="line"><a name="l00847"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5"> 847</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html">LedgerServer</a> <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>;</div>
<div class="line"><a name="l00848"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1NetworkOfTwo.html#aa9c855eaca5a1d5c02fc592216a8c186"> 848</a></span>&#160; <a class="code" href="classripple_1_1test_1_1LedgerReplayClient.html">LedgerReplayClient</a> <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#aa9c855eaca5a1d5c02fc592216a8c186">client</a>;</div>
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160;};</div>
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; </div>
<div class="line"><a name="l00876"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html"> 876</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html">LedgerReplayer_test</a> : <span class="keyword">public</span> beast::unit_test::suite</div>
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160;{</div>
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00879"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#a1f6d416bc654487012e5badf4aed903d"> 879</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#a1f6d416bc654487012e5badf4aed903d">testProofPath</a>()</div>
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div>
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; testcase(<span class="stringliteral">&quot;ProofPath&quot;</span>);</div>
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html">LedgerServer</a> server(*<span class="keyword">this</span>, {1});</div>
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> l = server.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; </div>
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; {</div>
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="comment">// request, missing key</span></div>
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMProofPathRequest&gt;();</div>
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; request-&gt;set_ledgerhash(</div>
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; l-&gt;info().hash.data(), l-&gt;info().hash.size());</div>
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; request-&gt;set_type(protocol::TMLedgerMapType::lmACCOUNT_STATE);</div>
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMProofPathResponse&gt;(</div>
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; server.msgHandler.processProofPathRequest(request));</div>
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; BEAST_EXPECT(reply-&gt;has_error());</div>
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; BEAST_EXPECT(!server.msgHandler.processProofPathResponse(reply));</div>
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; }</div>
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; {</div>
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="comment">// request, wrong hash</span></div>
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMProofPathRequest&gt;();</div>
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; request-&gt;set_type(protocol::TMLedgerMapType::lmACCOUNT_STATE);</div>
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; request-&gt;set_key(</div>
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="namespaceripple_1_1keylet.html#acda2d89a44551845c5be38291e5c9e8b">keylet::skip</a>().key.data(), <a class="code" href="namespaceripple_1_1keylet.html#acda2d89a44551845c5be38291e5c9e8b">keylet::skip</a>().<a class="code" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>.<a class="code" href="classripple_1_1base__uint.html#adbe18ef92b677603e8539b3a77c064b0">size</a>());</div>
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> hash(1234567);</div>
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; request-&gt;set_ledgerhash(hash.<a class="code" href="classripple_1_1base__uint.html#a5342507fe2fb5ac55d578e7e98863f70">data</a>(), hash.<a class="code" href="classripple_1_1base__uint.html#adbe18ef92b677603e8539b3a77c064b0">size</a>());</div>
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMProofPathResponse&gt;(</div>
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; server.msgHandler.processProofPathRequest(request));</div>
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; BEAST_EXPECT(reply-&gt;has_error());</div>
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; }</div>
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; </div>
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; {</div>
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <span class="comment">// good request</span></div>
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMProofPathRequest&gt;();</div>
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; request-&gt;set_ledgerhash(</div>
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; l-&gt;info().hash.data(), l-&gt;info().hash.size());</div>
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; request-&gt;set_type(protocol::TMLedgerMapType::lmACCOUNT_STATE);</div>
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; request-&gt;set_key(</div>
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <a class="code" href="namespaceripple_1_1keylet.html#acda2d89a44551845c5be38291e5c9e8b">keylet::skip</a>().key.data(), <a class="code" href="namespaceripple_1_1keylet.html#acda2d89a44551845c5be38291e5c9e8b">keylet::skip</a>().<a class="code" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>.<a class="code" href="classripple_1_1base__uint.html#adbe18ef92b677603e8539b3a77c064b0">size</a>());</div>
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">// generate response</span></div>
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMProofPathResponse&gt;(</div>
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; server.msgHandler.processProofPathRequest(request));</div>
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; BEAST_EXPECT(!reply-&gt;has_error());</div>
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; BEAST_EXPECT(server.msgHandler.processProofPathResponse(reply));</div>
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; </div>
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; {</div>
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">// bad reply</span></div>
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <span class="comment">// bad header</span></div>
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> r(reply-&gt;ledgerheader());</div>
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; r.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/back.html">back</a>()--;</div>
<div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; reply-&gt;set_ledgerheader(r);</div>
<div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; !server.msgHandler.processProofPathResponse(reply));</div>
<div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; r.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/back.html">back</a>()++;</div>
<div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; reply-&gt;set_ledgerheader(r);</div>
<div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; BEAST_EXPECT(server.msgHandler.processProofPathResponse(reply));</div>
<div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="comment">// bad proof path</span></div>
<div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; reply-&gt;mutable_path()-&gt;RemoveLast();</div>
<div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; !server.msgHandler.processProofPathResponse(reply));</div>
<div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; }</div>
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; }</div>
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; }</div>
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; </div>
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00943"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#adc7d93c421443d75ebb9bf71dea72421"> 943</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#adc7d93c421443d75ebb9bf71dea72421">testReplayDelta</a>()</div>
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; {</div>
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; testcase(<span class="stringliteral">&quot;ReplayDelta&quot;</span>);</div>
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerServer.html">LedgerServer</a> server(*<span class="keyword">this</span>, {1});</div>
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> l = server.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; </div>
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; {</div>
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <span class="comment">// request, missing hash</span></div>
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMReplayDeltaRequest&gt;();</div>
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMReplayDeltaResponse&gt;(</div>
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; server.msgHandler.processReplayDeltaRequest(request));</div>
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; BEAST_EXPECT(reply-&gt;has_error());</div>
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; BEAST_EXPECT(!server.msgHandler.processReplayDeltaResponse(reply));</div>
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <span class="comment">// request, wrong hash</span></div>
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> hash(1234567);</div>
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; request-&gt;set_ledgerhash(hash.<a class="code" href="classripple_1_1base__uint.html#a5342507fe2fb5ac55d578e7e98863f70">data</a>(), hash.<a class="code" href="classripple_1_1base__uint.html#adbe18ef92b677603e8539b3a77c064b0">size</a>());</div>
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; reply = std::make_shared&lt;protocol::TMReplayDeltaResponse&gt;(</div>
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; server.msgHandler.processReplayDeltaRequest(request));</div>
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; BEAST_EXPECT(reply-&gt;has_error());</div>
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; BEAST_EXPECT(!server.msgHandler.processReplayDeltaResponse(reply));</div>
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; }</div>
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; </div>
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; {</div>
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="comment">// good request</span></div>
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keyword">auto</span> request = std::make_shared&lt;protocol::TMReplayDeltaRequest&gt;();</div>
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; request-&gt;set_ledgerhash(</div>
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; l-&gt;info().hash.data(), l-&gt;info().hash.size());</div>
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="keyword">auto</span> reply = std::make_shared&lt;protocol::TMReplayDeltaResponse&gt;(</div>
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; server.msgHandler.processReplayDeltaRequest(request));</div>
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; BEAST_EXPECT(!reply-&gt;has_error());</div>
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; BEAST_EXPECT(server.msgHandler.processReplayDeltaResponse(reply));</div>
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; </div>
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; {</div>
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <span class="comment">// bad reply</span></div>
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <span class="comment">// bad header</span></div>
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> r(reply-&gt;ledgerheader());</div>
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; r.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/back.html">back</a>()--;</div>
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; reply-&gt;set_ledgerheader(r);</div>
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; !server.msgHandler.processReplayDeltaResponse(reply));</div>
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; r.<a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string/back.html">back</a>()++;</div>
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; reply-&gt;set_ledgerheader(r);</div>
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; server.msgHandler.processReplayDeltaResponse(reply));</div>
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="comment">// bad txns</span></div>
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; reply-&gt;mutable_transaction()-&gt;RemoveLast();</div>
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; !server.msgHandler.processReplayDeltaResponse(reply));</div>
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; }</div>
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div>
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; }</div>
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00996"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#a976920f91a1a2e816c8d54906a646be1"> 996</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#a976920f91a1a2e816c8d54906a646be1">testTaskParameter</a>()</div>
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; {</div>
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; testcase(<span class="stringliteral">&quot;TaskParameter&quot;</span>);</div>
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; </div>
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keyword">auto</span> makeSkipList = [](<span class="keywordtype">int</span> count) -&gt; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint256&gt;</a> <span class="keyword">const</span> {</div>
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint256&gt;</a> sList;</div>
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; count; ++i)</div>
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; sList.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">emplace_back</a>(i);</div>
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keywordflow">return</span> sList;</div>
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; };</div>
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; </div>
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html">LedgerReplayTask::TaskParameter</a> tp10(</div>
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, <a class="code" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a>(10), 10);</div>
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; BEAST_EXPECT(!tp10.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3557c08b8e2f259f7be5b673e66f33c1">update</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a>(777), 5, makeSkipList(10)));</div>
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; BEAST_EXPECT(!tp10.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3557c08b8e2f259f7be5b673e66f33c1">update</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a>(10), 5, makeSkipList(8)));</div>
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; BEAST_EXPECT(tp10.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3557c08b8e2f259f7be5b673e66f33c1">update</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a>(10), 10, makeSkipList(10)));</div>
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; </div>
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="comment">// can merge to self</span></div>
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; BEAST_EXPECT(tp10.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; </div>
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <span class="comment">// smaller task</span></div>
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html">LedgerReplayTask::TaskParameter</a> tp9(</div>
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, <a class="code" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a>(9), 9);</div>
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; </div>
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; BEAST_EXPECT(tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; BEAST_EXPECT(!tp10.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp9));</div>
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; </div>
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a7c5fe6c97805e13d469ea5a0add7dbd8">totalLedgers_</a>++;</div>
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; BEAST_EXPECT(!tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a7c5fe6c97805e13d469ea5a0add7dbd8">totalLedgers_</a>--;</div>
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; BEAST_EXPECT(tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; </div>
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a7c016f2337d19332dd3bffd606b55931">reason_</a> = <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7a6ea28b46407abd2931a73c789ecdd944">InboundLedger::Reason::CONSENSUS</a>;</div>
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; BEAST_EXPECT(!tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a7c016f2337d19332dd3bffd606b55931">reason_</a> = <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>;</div>
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; BEAST_EXPECT(tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; </div>
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a2923e3a3d4fbc1254441247e9db86bd6">finishHash_</a> = <a class="code" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a>(1234);</div>
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; BEAST_EXPECT(!tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a2923e3a3d4fbc1254441247e9db86bd6">finishHash_</a> = <a class="code" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a>(9);</div>
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; BEAST_EXPECT(tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; </div>
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="comment">// larger task</span></div>
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html">LedgerReplayTask::TaskParameter</a> tp20(</div>
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, <a class="code" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a>(20), 20);</div>
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; BEAST_EXPECT(tp20.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3557c08b8e2f259f7be5b673e66f33c1">update</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a>(20), 20, makeSkipList(20)));</div>
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; BEAST_EXPECT(tp10.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp20));</div>
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; BEAST_EXPECT(tp9.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp20));</div>
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; BEAST_EXPECT(!tp20.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp10));</div>
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; BEAST_EXPECT(!tp20.<a class="code" href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">canMergeInto</a>(tp9));</div>
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; }</div>
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; </div>
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01049"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#ab87606b129bb39f7118a2401b981ce69"> 1049</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#ab87606b129bb39f7118a2401b981ce69">testConfig</a>()</div>
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; {</div>
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; testcase(<span class="stringliteral">&quot;config test&quot;</span>);</div>
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; {</div>
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <a class="code" href="classripple_1_1Config.html">Config</a> c;</div>
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; BEAST_EXPECT(c.<a class="code" href="classripple_1_1Config.html#a7174b4395af72d89dc078e64d31c769c">LEDGER_REPLAY</a> == <span class="keyword">false</span>);</div>
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div>
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; </div>
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; {</div>
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <a class="code" href="classripple_1_1Config.html">Config</a> c;</div>
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> toLoad(R<span class="stringliteral">&quot;rippleConfig(</span></div>
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;<span class="stringliteral">[ledger_replay]</span></div>
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;<span class="stringliteral">1</span></div>
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="stringliteral">)rippleConfig&quot;);</span></div>
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;<span class="stringliteral"> c.<a class="code" href="classripple_1_1Config.html#acec216c5b37b6d4ac971e1ff62142963">loadFromString</a>(toLoad);</span></div>
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="stringliteral"> BEAST_EXPECT(c.<a class="code" href="classripple_1_1Config.html#a7174b4395af72d89dc078e64d31c769c">LEDGER_REPLAY</a> == </span><span class="keyword">true</span>);</div>
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; }</div>
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; </div>
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; {</div>
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <a class="code" href="classripple_1_1Config.html">Config</a> c;</div>
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> toLoad = (R<span class="stringliteral">&quot;rippleConfig(</span></div>
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;<span class="stringliteral">[ledger_replay]</span></div>
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;<span class="stringliteral">0</span></div>
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;<span class="stringliteral">)rippleConfig&quot;);</span></div>
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="stringliteral"> c.<a class="code" href="classripple_1_1Config.html#acec216c5b37b6d4ac971e1ff62142963">loadFromString</a>(toLoad);</span></div>
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;<span class="stringliteral"> BEAST_EXPECT(c.<a class="code" href="classripple_1_1Config.html#a7174b4395af72d89dc078e64d31c769c">LEDGER_REPLAY</a> == </span><span class="keyword">false</span>);</div>
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; }</div>
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; }</div>
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; </div>
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01079"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#af548fd09fe85d089adee2806eab92988"> 1079</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#af548fd09fe85d089adee2806eab92988">testHandshake</a>()</div>
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; {</div>
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; testcase(<span class="stringliteral">&quot;handshake test&quot;</span>);</div>
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keyword">auto</span> handshake = [&amp;](<span class="keywordtype">bool</span> client, <span class="keywordtype">bool</span> server, <span class="keywordtype">bool</span> expecting) -&gt; <span class="keywordtype">bool</span> {</div>
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keyword">auto</span> request =</div>
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <a class="code" href="namespaceripple.html#ac35dc55d3f3c259f344225586a8887b4">ripple::makeRequest</a>(<span class="keyword">true</span>, <span class="keyword">false</span>, client, <span class="keyword">false</span>, <span class="keyword">false</span>);</div>
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <a class="code" href="namespaceripple.html#aa265217edeb8282e636c78b50049f4c0">http_request_type</a> http_request;</div>
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; http_request.version(request.version());</div>
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; http_request.base() = request.base();</div>
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="keywordtype">bool</span> serverResult =</div>
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <a class="code" href="namespaceripple.html#ab58cf24607744c98d521c3e97aca2a53">peerFeatureEnabled</a>(http_request, <a class="code" href="namespaceripple.html#a59334776ad7699c39ec3683f1fca4b2e">FEATURE_LEDGER_REPLAY</a>, server);</div>
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="keywordflow">if</span> (serverResult != expecting)</div>
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; </div>
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="namespacebeast_1_1IP.html#adbe597760cb20a7aa3f2ff92f7bed2cc">beast::IP::Address</a> addr =</div>
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; boost::asio::ip::address::from_string(<span class="stringliteral">&quot;172.1.1.100&quot;</span>);</div>
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> serverEnv(*<span class="keyword">this</span>);</div>
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; serverEnv.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#a9e55bbdb66a785bfd0dda93802b514b6">app</a>().<a class="code" href="classripple_1_1Application.html#aca56b7c63030174e59720ab51d739422">config</a>().<a class="code" href="classripple_1_1Config.html#a7174b4395af72d89dc078e64d31c769c">LEDGER_REPLAY</a> = server;</div>
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="keyword">auto</span> http_resp = <a class="code" href="namespaceripple.html#a5590ae6006b178275628bde91fa03129">ripple::makeResponse</a>(</div>
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="keyword">true</span>,</div>
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; http_request,</div>
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; addr,</div>
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; addr,</div>
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a>{1},</div>
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; 1,</div>
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; {1, 0},</div>
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; serverEnv.<a class="code" href="classripple_1_1test_1_1jtx_1_1Env.html#a9e55bbdb66a785bfd0dda93802b514b6">app</a>());</div>
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> clientResult =</div>
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <a class="code" href="namespaceripple.html#ab58cf24607744c98d521c3e97aca2a53">peerFeatureEnabled</a>(http_resp, <a class="code" href="namespaceripple.html#a59334776ad7699c39ec3683f1fca4b2e">FEATURE_LEDGER_REPLAY</a>, client);</div>
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">if</span> (clientResult != expecting)</div>
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; </div>
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; };</div>
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; </div>
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; BEAST_EXPECT(handshake(<span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>));</div>
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; BEAST_EXPECT(handshake(<span class="keyword">false</span>, <span class="keyword">true</span>, <span class="keyword">false</span>));</div>
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; BEAST_EXPECT(handshake(<span class="keyword">true</span>, <span class="keyword">false</span>, <span class="keyword">false</span>));</div>
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; BEAST_EXPECT(handshake(<span class="keyword">true</span>, <span class="keyword">true</span>, <span class="keyword">true</span>));</div>
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; }</div>
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; </div>
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01121"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#aea0fc6be2d2f14294990ed7c265d614a"> 1121</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#aea0fc6be2d2f14294990ed7c265d614a">testAllLocal</a>(<span class="keywordtype">int</span> totalReplay)</div>
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; {</div>
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; testcase(<span class="stringliteral">&quot;local node has all the ledgers&quot;</span>);</div>
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keyword">auto</span> psBhvr = <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>;</div>
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">auto</span> ilBhvr = <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">InboundLedgersBehavior::DropAll</a>;</div>
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="keyword">auto</span> peerFeature = <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ea6adf97f83acf6453d4a6a4b1070f3754">PeerFeature::None</a>;</div>
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; </div>
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(*<span class="keyword">this</span>, {totalReplay + 1}, psBhvr, ilBhvr, peerFeature);</div>
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; </div>
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; totalReplay; ++i)</div>
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; {</div>
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; BEAST_EXPECT(l);</div>
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">if</span> (l)</div>
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; {</div>
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; net.client.ledgerMaster.storeLedger(l);</div>
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; l = net.server.ledgerMaster.getLedgerByHash(</div>
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; l-&gt;info().parentHash);</div>
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; }</div>
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; }</div>
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; </div>
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; </div>
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses(</div>
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; totalReplay - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>);</div>
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; finalHash,</div>
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; totalReplay,</div>
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; </div>
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; }</div>
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; </div>
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01163"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#ac313b58a2d0843ab4f8d46ece7fac907"> 1163</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#ac313b58a2d0843ab4f8d46ece7fac907">testAllInboundLedgers</a>(<span class="keywordtype">int</span> totalReplay)</div>
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; {</div>
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; testcase(<span class="stringliteral">&quot;all the ledgers from InboundLedgers&quot;</span>);</div>
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; {totalReplay + 1},</div>
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>,</div>
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ea6adf97f83acf6453d4a6a4b1070f3754">PeerFeature::None</a>);</div>
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; </div>
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; </div>
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses(</div>
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; totalReplay - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>);</div>
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; finalHash,</div>
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; totalReplay,</div>
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; </div>
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; }</div>
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; </div>
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01193"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#ae8bbc2e5217f94c203c1289743e2fbad"> 1193</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#ae8bbc2e5217f94c203c1289743e2fbad">testPeerSetBehavior</a>(<a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">PeerSetBehavior</a> peerSetBehavior, <span class="keywordtype">int</span> totalReplay = 4)</div>
<div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; {</div>
<div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">switch</span> (peerSetBehavior)</div>
<div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div>
<div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>:</div>
<div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; testcase(<span class="stringliteral">&quot;good network&quot;</span>);</div>
<div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1ad10d06eac1b72b6b66d7e8bcd74474b6">PeerSetBehavior::Drop50</a>:</div>
<div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; testcase(<span class="stringliteral">&quot;network drops 50% messages&quot;</span>);</div>
<div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">case</span> <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8">PeerSetBehavior::Repeat</a>:</div>
<div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; testcase(<span class="stringliteral">&quot;network repeats all messages&quot;</span>);</div>
<div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; }</div>
<div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; </div>
<div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; {totalReplay + 1},</div>
<div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; peerSetBehavior,</div>
<div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">InboundLedgersBehavior::DropAll</a>,</div>
<div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; </div>
<div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="comment">// feed client with start ledger since InboundLedgers drops all</span></div>
<div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; totalReplay - 1; ++i)</div>
<div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; {</div>
<div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; l = net.server.ledgerMaster.getLedgerByHash(l-&gt;info().parentHash);</div>
<div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; }</div>
<div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; net.client.ledgerMaster.storeLedger(l);</div>
<div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; </div>
<div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; </div>
<div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses(</div>
<div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; totalReplay - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>);</div>
<div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; finalHash,</div>
<div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; totalReplay,</div>
<div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; BEAST_EXPECT(net.client.waitForLedgers(finalHash, totalReplay));</div>
<div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; </div>
<div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; }</div>
<div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; </div>
<div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01245"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#a49d59f193c06056e710a3f6e32772941"> 1245</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#a49d59f193c06056e710a3f6e32772941">testStop</a>()</div>
<div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; {</div>
<div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; testcase(<span class="stringliteral">&quot;stop before timeout&quot;</span>);</div>
<div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordtype">int</span> totalReplay = 3;</div>
<div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {totalReplay + 1},</div>
<div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>,</div>
<div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; </div>
<div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; </div>
<div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses;</div>
<div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; BEAST_EXPECT(net.client.checkStatus(</div>
<div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; finalHash,</div>
<div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; totalReplay,</div>
<div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa71b56450c5e1ce9ce5f10422f47beb06">TaskStatus::NotDone</a>,</div>
<div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa71b56450c5e1ce9ce5f10422f47beb06">TaskStatus::NotDone</a>,</div>
<div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; </div>
<div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(1, 1, 0));</div>
<div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; net.client.replayer.stop();</div>
<div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; }</div>
<div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; </div>
<div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01275"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#ac9e7760a63ff21271107c20f9f690341"> 1275</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#ac9e7760a63ff21271107c20f9f690341">testSkipListBadReply</a>()</div>
<div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; {</div>
<div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; testcase(<span class="stringliteral">&quot;SkipListAcquire bad reply&quot;</span>);</div>
<div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordtype">int</span> totalReplay = 3;</div>
<div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; {totalReplay + 1 + 1},</div>
<div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>,</div>
<div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">InboundLedgersBehavior::DropAll</a>,</div>
<div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; </div>
<div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; </div>
<div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keyword">auto</span> skipList = net.client.findSkipListAcquire(finalHash);</div>
<div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; </div>
<div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint8_t</a> payload[55] = {</div>
<div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; 0x6A, 0x09, 0xE6, 0x67, 0xF3, 0xBC, 0xC9, 0x08, 0xB2};</div>
<div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keyword">auto</span> item =</div>
<div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <a class="code" href="namespaceripple.html#a0f98a7a60d7fb0c39572419ac15c959f">make_shamapitem</a>(<a class="code" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a>(12345), <a class="code" href="classripple_1_1Slice.html">Slice</a>(payload, <span class="keyword">sizeof</span>(payload)));</div>
<div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; skipList-&gt;processData(l-&gt;seq(), item);</div>
<div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; </div>
<div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses;</div>
<div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; finalHash,</div>
<div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; totalReplay,</div>
<div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; </div>
<div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="comment">// add another task</span></div>
<div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay + 1);</div>
<div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; finalHash,</div>
<div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; totalReplay,</div>
<div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(2, 1, 0));</div>
<div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; }</div>
<div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
<div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01320"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#a39f6d06844ba0d954784172036b1f760"> 1320</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#a39f6d06844ba0d954784172036b1f760">testLedgerDeltaBadReply</a>()</div>
<div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; {</div>
<div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; testcase(<span class="stringliteral">&quot;LedgerDeltaAcquire bad reply&quot;</span>);</div>
<div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keywordtype">int</span> totalReplay = 3;</div>
<div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; {totalReplay + 1},</div>
<div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0cf51aa72b773c64178a944bf85ef503">PeerSetBehavior::DropLedgerDeltaReply</a>,</div>
<div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">InboundLedgersBehavior::DropAll</a>,</div>
<div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; </div>
<div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; net.client.ledgerMaster.storeLedger(l);</div>
<div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; </div>
<div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keyword">auto</span> delta = net.client.findLedgerDeltaAcquire(l-&gt;info().parentHash);</div>
<div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; delta-&gt;processData(</div>
<div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; l-&gt;info(), <span class="comment">// wrong ledger info</span></div>
<div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/map.html">std::map</a>&lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a>, <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;STTx const&gt;</a>&gt;());</div>
<div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; BEAST_EXPECT(net.client.taskStatus(delta) == <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>);</div>
<div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; net.client.taskStatus(net.client.findTask(</div>
<div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; finalHash, totalReplay)) == <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>);</div>
<div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; </div>
<div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="comment">// add another task</span></div>
<div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay + 1);</div>
<div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; net.client.taskStatus(net.client.findTask(</div>
<div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; finalHash, totalReplay + 1)) == <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>);</div>
<div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; }</div>
<div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; </div>
<div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01355"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#a3536944873630637ccea5867b445c3b0"> 1355</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#a3536944873630637ccea5867b445c3b0">testLedgerReplayOverlap</a>()</div>
<div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; {</div>
<div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; testcase(<span class="stringliteral">&quot;Overlap tasks&quot;</span>);</div>
<div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordtype">int</span> totalReplay = 5;</div>
<div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; {totalReplay * 3 + 1},</div>
<div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>,</div>
<div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses(</div>
<div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; totalReplay - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>);</div>
<div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; finalHash,</div>
<div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; totalReplay,</div>
<div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; BEAST_EXPECT(net.client.waitForLedgers(finalHash, totalReplay));</div>
<div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; </div>
<div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="comment">// same range, same reason</span></div>
<div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(1, 1, totalReplay - 1));</div>
<div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="comment">// same range, different reason</span></div>
<div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7a6ea28b46407abd2931a73c789ecdd944">InboundLedger::Reason::CONSENSUS</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(2, 1, totalReplay - 1));</div>
<div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; </div>
<div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="comment">// no overlap</span></div>
<div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; totalReplay + 2; ++i)</div>
<div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; {</div>
<div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; l = net.server.ledgerMaster.getLedgerByHash(l-&gt;info().parentHash);</div>
<div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; }</div>
<div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; <span class="keyword">auto</span> finalHash_early = l-&gt;info().hash;</div>
<div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash_early, totalReplay);</div>
<div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; finalHash_early,</div>
<div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; totalReplay,</div>
<div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; deltaStatuses)); <span class="comment">// deltaStatuses no change</span></div>
<div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; BEAST_EXPECT(net.client.waitForLedgers(finalHash_early, totalReplay));</div>
<div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(3, 2, 2 * (totalReplay - 1)));</div>
<div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; </div>
<div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="comment">// partial overlap</span></div>
<div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; l = net.server.ledgerMaster.getLedgerByHash(l-&gt;info().parentHash);</div>
<div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="keyword">auto</span> finalHash_moreEarly = l-&gt;info().parentHash;</div>
<div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash_moreEarly, totalReplay);</div>
<div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; finalHash_moreEarly,</div>
<div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; totalReplay,</div>
<div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; deltaStatuses)); <span class="comment">// deltaStatuses no change</span></div>
<div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; net.client.waitForLedgers(finalHash_moreEarly, totalReplay));</div>
<div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; net.client.countsAsExpected(4, 3, 2 * (totalReplay - 1) + 2));</div>
<div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; </div>
<div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="comment">// cover</span></div>
<div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay * 3);</div>
<div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; deltaStatuses =</div>
<div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a>(totalReplay * 3 - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>);</div>
<div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; finalHash,</div>
<div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; totalReplay * 3,</div>
<div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; deltaStatuses)); <span class="comment">// deltaStatuses changed</span></div>
<div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; BEAST_EXPECT(net.client.waitForLedgers(finalHash, totalReplay * 3));</div>
<div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(5, 3, totalReplay * 3 - 1));</div>
<div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; </div>
<div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; }</div>
<div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; </div>
<div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01441"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayer__test.html#a3f15f2eefbc57687048ac84e5e077c41"> 1441</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayer__test.html#a3f15f2eefbc57687048ac84e5e077c41">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; testProofPath();</div>
<div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; testReplayDelta();</div>
<div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; testTaskParameter();</div>
<div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; testConfig();</div>
<div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160; testHandshake();</div>
<div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; testAllLocal(1);</div>
<div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; testAllLocal(3);</div>
<div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; testAllInboundLedgers(1);</div>
<div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160; testAllInboundLedgers(4);</div>
<div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; testPeerSetBehavior(<a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>, 1);</div>
<div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; testPeerSetBehavior(<a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>);</div>
<div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; testPeerSetBehavior(<a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1ad10d06eac1b72b6b66d7e8bcd74474b6">PeerSetBehavior::Drop50</a>);</div>
<div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; testPeerSetBehavior(<a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8">PeerSetBehavior::Repeat</a>);</div>
<div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; testStop();</div>
<div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; testSkipListBadReply();</div>
<div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; testLedgerDeltaBadReply();</div>
<div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; testLedgerReplayOverlap();</div>
<div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160; }</div>
<div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;};</div>
<div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; </div>
<div class="line"><a name="l01463"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html"> 1463</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html">LedgerReplayerTimeout_test</a> : <span class="keyword">public</span> beast::unit_test::suite</div>
<div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;{</div>
<div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01466"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#a1882b677eaad5d2e1e599883396bdd6a"> 1466</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#a1882b677eaad5d2e1e599883396bdd6a">testSkipListTimeout</a>()</div>
<div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; {</div>
<div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; testcase(<span class="stringliteral">&quot;SkipListAcquire timeout&quot;</span>);</div>
<div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; <span class="keywordtype">int</span> totalReplay = 3;</div>
<div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; {totalReplay + 1},</div>
<div class="line"><a name="l01473"></a><span class="lineno"> 1473</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>,</div>
<div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; </div>
<div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; </div>
<div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses;</div>
<div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160; finalHash,</div>
<div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; totalReplay,</div>
<div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; </div>
<div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(1, 1, 0));</div>
<div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; }</div>
<div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; </div>
<div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01497"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#ab3757ac0d9a8fbee3d108f8d5d9c9a12"> 1497</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#ab3757ac0d9a8fbee3d108f8d5d9c9a12">testLedgerDeltaTimeout</a>()</div>
<div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; {</div>
<div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; testcase(<span class="stringliteral">&quot;LedgerDeltaAcquire timeout&quot;</span>);</div>
<div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="keywordtype">int</span> totalReplay = 3;</div>
<div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; {totalReplay + 1},</div>
<div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">PeerSetBehavior::DropAll</a>,</div>
<div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; </div>
<div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="keyword">auto</span> l = net.<a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">server</a>.<a class="code" href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ledgerMaster</a>.<a class="code" href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">getClosedLedger</a>();</div>
<div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> finalHash = l-&gt;info().hash;</div>
<div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; net.client.ledgerMaster.storeLedger(l);</div>
<div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finalHash, totalReplay);</div>
<div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; </div>
<div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses(</div>
<div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; totalReplay - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>);</div>
<div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; deltaStatuses.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/back.html">back</a>() = <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>; <span class="comment">// in client ledgerMaster</span></div>
<div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160; finalHash,</div>
<div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160; totalReplay,</div>
<div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">TaskStatus::Failed</a>,</div>
<div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160; </div>
<div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(1, 1, totalReplay - 1));</div>
<div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; }</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; </div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01531"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#a146e52d5da747209c53624050f937936"> 1531</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#a146e52d5da747209c53624050f937936">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; testSkipListTimeout();</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; testLedgerDeltaTimeout();</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; }</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;};</div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; </div>
<div class="line"><a name="l01538"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayerLong__test.html"> 1538</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structripple_1_1test_1_1LedgerReplayerLong__test.html">LedgerReplayerLong_test</a> : <span class="keyword">public</span> beast::unit_test::suite</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;{</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="keywordtype">void</span></div>
<div class="line"><a name="l01541"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1LedgerReplayerLong__test.html#a4dadccc506933338ae8bfb99dca568e8"> 1541</a></span>&#160; <a class="code" href="structripple_1_1test_1_1LedgerReplayerLong__test.html#a4dadccc506933338ae8bfb99dca568e8">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; testcase(<span class="stringliteral">&quot;Acquire 1000 ledgers&quot;</span>);</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keywordtype">int</span> totalReplay = 250;</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="keywordtype">int</span> rounds = 4;</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <a class="code" href="structripple_1_1test_1_1NetworkOfTwo.html">NetworkOfTwo</a> net(</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; *<span class="keyword">this</span>,</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; {totalReplay * rounds + 1},</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">PeerSetBehavior::Good</a>,</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">InboundLedgersBehavior::Good</a>,</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">PeerFeature::LedgerReplayEnabled</a>);</div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; </div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;uint256&gt;</a> finishHashes;</div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keyword">auto</span> l = net.server.ledgerMaster.getClosedLedger();</div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; rounds; ++i)</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; {</div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; finishHashes.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(l-&gt;info().hash);</div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; totalReplay; ++j)</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; {</div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; l = net.server.ledgerMaster.getLedgerByHash(</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; l-&gt;info().parentHash);</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; }</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; }</div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; BEAST_EXPECT(finishHashes.size() == rounds);</div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; </div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; rounds; ++i)</div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; {</div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; net.client.replayer.replay(</div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <a class="code" href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">InboundLedger::Reason::GENERIC</a>, finishHashes[i], totalReplay);</div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; }</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; </div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;TaskStatus&gt;</a> deltaStatuses(</div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; totalReplay - 1, <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>);</div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; rounds; ++i)</div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; {</div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; BEAST_EXPECT(net.client.waitAndCheckStatus(</div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; finishHashes[i],</div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; totalReplay,</div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <a class="code" href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">TaskStatus::Completed</a>,</div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; deltaStatuses));</div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; }</div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; </div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; BEAST_EXPECT(</div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; net.client.waitForLedgers(finishHashes[0], totalReplay * rounds));</div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(</div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; rounds, rounds, rounds * (totalReplay - 1)));</div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; </div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="comment">// sweep</span></div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; net.client.replayer.sweep();</div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; BEAST_EXPECT(net.client.countsAsExpected(0, 0, 0));</div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; }</div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;};</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; </div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;<a class="code" href="namespaceripple_1_1test.html#a36e90e9cdf2adf7993483b3190ee8e21">BEAST_DEFINE_TESTSUITE</a>(<a class="code" href="classripple_1_1LedgerReplay.html">LedgerReplay</a>, app, <a class="code" href="namespaceripple.html">ripple</a>);</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;<a class="code" href="namespaceripple_1_1test.html#a397b62843220daf742e7187fc3546423">BEAST_DEFINE_TESTSUITE_PRIO</a>(<a class="code" href="classripple_1_1LedgerReplayer.html">LedgerReplayer</a>, app, <a class="code" href="namespaceripple.html">ripple</a>, 1);</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;<a class="code" href="namespaceripple_1_1test.html#a36e90e9cdf2adf7993483b3190ee8e21">BEAST_DEFINE_TESTSUITE</a>(LedgerReplayerTimeout, app, <a class="code" href="namespaceripple.html">ripple</a>);</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;<a class="code" href="namespaceripple_1_1test.html#afadda8433e506ed9c47339226e139068">BEAST_DEFINE_TESTSUITE_MANUAL</a>(LedgerReplayerLong, app, <a class="code" href="namespaceripple.html">ripple</a>);</div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; </div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;} <span class="comment">// namespace test</span></div>
<div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a2f9a7365f9ee783ad89399974c1dd47e"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a2f9a7365f9ee783ad89399974c1dd47e">ripple::test::LedgerReplayClient::waitAndCheckStatus</a></div><div class="ttdeci">bool waitAndCheckStatus(uint256 const &amp;hash, int totalReplay, TaskStatus taskExpect, TaskStatus skiplistExpect, std::vector&lt; TaskStatus &gt; const &amp;deltaExpects)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00796">LedgerReplay_test.cpp:796</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a26da34be0f0ac39fb41c6d546a304873"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a26da34be0f0ac39fb41c6d546a304873">ripple::test::LedgerServer::param</a></div><div class="ttdeci">Parameter param</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00543">LedgerReplay_test.cpp:543</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a3b4e4157bd2e5e17221a01e06d520070"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a3b4e4157bd2e5e17221a01e06d520070">ripple::test::TestPeer::TestPeer</a></div><div class="ttdeci">TestPeer(bool enableLedgerReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00194">LedgerReplay_test.cpp:194</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_1_1Parameter_html_a947fbed427c671d15ed304f91bf11a69"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html#a947fbed427c671d15ed304f91bf11a69">ripple::test::LedgerServer::Parameter::initLedgers</a></div><div class="ttdeci">int initLedgers</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00451">LedgerReplay_test.cpp:451</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_ae6b951a8134eac2f989056efb31bb7e2"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#ae6b951a8134eac2f989056efb31bb7e2">ripple::test::TestPeer::compressionEnabled</a></div><div class="ttdeci">bool compressionEnabled() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00288">LedgerReplay_test.cpp:288</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html"><div class="ttname"><a href="classripple_1_1Application.html">ripple::Application</a></div><div class="ttdef"><b>Definition:</b> <a href="Application_8h_source.html#l00115">Application.h:115</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_ac83f18125388adccf84ad0285cd30422"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#ac83f18125388adccf84ad0285cd30422">ripple::test::LedgerReplayClient::replayer</a></div><div class="ttdeci">LedgerReplayer replayer</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00816">LedgerReplay_test.cpp:816</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_a3536944873630637ccea5867b445c3b0"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#a3536944873630637ccea5867b445c3b0">ripple::test::LedgerReplayer_test::testLedgerReplayOverlap</a></div><div class="ttdeci">void testLedgerReplayOverlap()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01355">LedgerReplay_test.cpp:1355</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a0bd41ec0e7d28cae7397e33711e22ff5"><div class="ttname"><a href="namespaceripple_1_1test.html#a0bd41ec0e7d28cae7397e33711e22ff5">ripple::test::ledgerHash</a></div><div class="ttdeci">static uint256 ledgerHash(LedgerInfo const &amp;info)</div><div class="ttdef"><b>Definition:</b> <a href="compression__test_8cpp_source.html#l00057">compression_test.cpp:57</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c"><div class="ttname"><a href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bda7fa2267e9b1bf739a70bb1860ab2a99c">ripple::HashPrefix::ledgerMaster</a></div><div class="ttdeci">@ ledgerMaster</div><div class="ttdoc">ledger master data for signing</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a9dac1636623a9feb03cb6a631c411f3f"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a9dac1636623a9feb03cb6a631c411f3f">ripple::test::LedgerReplayClient::countSkipLists</a></div><div class="ttdeci">std::size_t countSkipLists()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00683">LedgerReplay_test.cpp:683</a></div></div>
<div class="ttc" id="asleep_for_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/sleep_for.html">std::this_thread::sleep_for</a></div><div class="ttdeci">T sleep_for(T... args)</div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a37cf35ddf6bc8f4c6cbfa3fba57d6815"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a37cf35ddf6bc8f4c6cbfa3fba57d6815">ripple::test::jtx::XRP</a></div><div class="ttdeci">const XRP_t XRP</div><div class="ttdoc">Converts to XRP Issue or STAmount.</div><div class="ttdef"><b>Definition:</b> <a href="amount_8cpp_source.html#l00105">amount.cpp:105</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_af7b4733583f33b9d1df1a6dca0348e94"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#af7b4733583f33b9d1df1a6dca0348e94">ripple::test::TestPeer::supportsFeature</a></div><div class="ttdeci">bool supportsFeature(ProtocolFeature f) const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00243">LedgerReplay_test.cpp:243</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1NetworkOfTwo_html_a1f19f202787d74ae8baf38f6df253453"><div class="ttname"><a href="structripple_1_1test_1_1NetworkOfTwo.html#a1f19f202787d74ae8baf38f6df253453">ripple::test::NetworkOfTwo::NetworkOfTwo</a></div><div class="ttdeci">NetworkOfTwo(beast::unit_test::suite &amp;suite, LedgerServer::Parameter const &amp;param, PeerSetBehavior behavior=PeerSetBehavior::Good, InboundLedgersBehavior inboundBhvr=InboundLedgersBehavior::Good, PeerFeature peerFeature=PeerFeature::LedgerReplayEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00836">LedgerReplay_test.cpp:836</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a56298334026de896c3768c2560270c0b"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a56298334026de896c3768c2560270c0b">ripple::test::LedgerReplayClient::countsAsExpected</a></div><div class="ttdeci">bool countsAsExpected(std::size_t tasks, std::size_t skipLists, std::size_t deltas)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00690">LedgerReplay_test.cpp:690</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_a39f6d06844ba0d954784172036b1f760"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#a39f6d06844ba0d954784172036b1f760">ripple::test::LedgerReplayer_test::testLedgerDeltaBadReply</a></div><div class="ttdeci">void testLedgerDeltaBadReply()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01320">LedgerReplay_test.cpp:1320</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayerTimeout__test_html_ab3757ac0d9a8fbee3d108f8d5d9c9a12"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#ab3757ac0d9a8fbee3d108f8d5d9c9a12">ripple::test::LedgerReplayerTimeout_test::testLedgerDeltaTimeout</a></div><div class="ttdeci">void testLedgerDeltaTimeout()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01497">LedgerReplay_test.cpp:1497</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayTask_1_1TaskParameter_html_a7c016f2337d19332dd3bffd606b55931"><div class="ttname"><a href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a7c016f2337d19332dd3bffd606b55931">ripple::LedgerReplayTask::TaskParameter::reason_</a></div><div class="ttdeci">InboundLedger::Reason reason_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayTask_8h_source.html#l00050">LedgerReplayTask.h:50</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_a3e8d7f8b5fa089a184dcc9b00b6e0da7a6ea28b46407abd2931a73c789ecdd944"><div class="ttname"><a href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7a6ea28b46407abd2931a73c789ecdd944">ripple::InboundLedger::Reason::CONSENSUS</a></div><div class="ttdeci">@ CONSENSUS</div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="astructripple_1_1test_1_1NetworkOfTwo_html_aa9c855eaca5a1d5c02fc592216a8c186"><div class="ttname"><a href="structripple_1_1test_1_1NetworkOfTwo.html#aa9c855eaca5a1d5c02fc592216a8c186">ripple::test::NetworkOfTwo::client</a></div><div class="ttdeci">LedgerReplayClient client</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00848">LedgerReplay_test.cpp:848</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplay__test_html_add660c91c07a4d566a12b3183d033a69"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplay__test.html#add660c91c07a4d566a12b3183d033a69">ripple::test::LedgerReplay_test::run</a></div><div class="ttdeci">void run() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00043">LedgerReplay_test.cpp:43</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a49a0c65115d326e7fbd38be43a800f8d"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a49a0c65115d326e7fbd38be43a800f8d">ripple::test::TestPeer::send</a></div><div class="ttdeci">void send(std::shared_ptr&lt; Message &gt; const &amp;m) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00199">LedgerReplay_test.cpp:199</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a47271eb5e7eb9b5aada383ccfaf9c0cf"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a47271eb5e7eb9b5aada383ccfaf9c0cf">ripple::test::jtx::drops</a></div><div class="ttdeci">PrettyAmount drops(Integer i)</div><div class="ttdoc">Returns an XRP PrettyAmount, which is trivially convertible to STAmount.</div><div class="ttdef"><b>Definition:</b> <a href="amount_8h_source.html#l00241">amount.h:241</a></div></div>
<div class="ttc" id="anamespacebeast_1_1severities_html_a069a8a312b9123b77f6aa31733ca73beae13a45640877c138fc59c94443ece6f0"><div class="ttname"><a href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73beae13a45640877c138fc59c94443ece6f0">beast::severities::kDisabled</a></div><div class="ttdeci">@ kDisabled</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00041">Journal.h:41</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_ab87606b129bb39f7118a2401b981ce69"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#ab87606b129bb39f7118a2401b981ce69">ripple::test::LedgerReplayer_test::testConfig</a></div><div class="ttdeci">void testConfig()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01049">LedgerReplay_test.cpp:1049</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html">ripple::test::TestPeerSetBuilder</a></div><div class="ttdoc">Build the TestPeerSet.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00414">LedgerReplay_test.cpp:414</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a1c9bf362fc5dade476550f16212b6a1fac30e98851cafc795dbe00917b7c4ccf8"><div class="ttname"><a href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fac30e98851cafc795dbe00917b7c4ccf8">ripple::test::TaskStatus::NotExist</a></div><div class="ttdeci">@ NotExist</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a021a8599de198786f1dc71901cdf1e1f"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a021a8599de198786f1dc71901cdf1e1f">ripple::test::TestPeer::hasLedger</a></div><div class="ttdeci">bool hasLedger(uint256 const &amp;hash, std::uint32_t seq) const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00265">LedgerReplay_test.cpp:265</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_ab40a62e766af5c40dbc03f571f22083c"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#ab40a62e766af5c40dbc03f571f22083c">ripple::test::MagicInboundLedgers::gotStaleData</a></div><div class="ttdeci">virtual void gotStaleData(std::shared_ptr&lt; protocol::TMLedgerData &gt; packet) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00125">LedgerReplay_test.cpp:125</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0c6ad70beb3a7e76c3fc7adab7c46acc">ripple::test::PeerSetBehavior::Good</a></div><div class="ttdeci">@ Good</div></div>
<div class="ttc" id="aclassripple_1_1Slice_html"><div class="ttname"><a href="classripple_1_1Slice.html">ripple::Slice</a></div><div class="ttdoc">An immutable linear range of bytes.</div><div class="ttdef"><b>Definition:</b> <a href="Slice_8h_source.html#l00044">Slice.h:44</a></div></div>
<div class="ttc" id="aunordered_set_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_set.html">std::unordered_set</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1Config_html_a7174b4395af72d89dc078e64d31c769c"><div class="ttname"><a href="classripple_1_1Config.html#a7174b4395af72d89dc078e64d31c769c">ripple::Config::LEDGER_REPLAY</a></div><div class="ttdeci">bool LEDGER_REPLAY</div><div class="ttdef"><b>Definition:</b> <a href="Config_8h_source.html#l00228">Config.h:228</a></div></div>
<div class="ttc" id="anamespaceripple_html_a0f98a7a60d7fb0c39572419ac15c959f"><div class="ttname"><a href="namespaceripple.html#a0f98a7a60d7fb0c39572419ac15c959f">ripple::make_shamapitem</a></div><div class="ttdeci">boost::intrusive_ptr&lt; SHAMapItem &gt; make_shamapitem(uint256 const &amp;tag, Slice data)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapItem_8h_source.html#l00160">SHAMapItem.h:160</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html"><div class="ttname"><a href="classripple_1_1LedgerMaster.html">ripple::LedgerMaster</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00070">LedgerMaster.h:70</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_aa7fff7d3f7018080efe29cca5d8eba11"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#aa7fff7d3f7018080efe29cca5d8eba11">ripple::test::TestPeer::addTxQueue</a></div><div class="ttdeci">void addTxQueue(const uint256 &amp;) override</div><div class="ttdoc">Aggregate transaction's hash.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00297">LedgerReplay_test.cpp:297</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a9c0bccd0f4de860c3bffc56679d40906"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a9c0bccd0f4de860c3bffc56679d40906">ripple::test::TestPeer::isHighLatency</a></div><div class="ttdeci">bool isHighLatency() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00222">LedgerReplay_test.cpp:222</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b"><div class="ttname"><a href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7ac942dc2a9f958acddc67e11472d3ca0b">ripple::InboundLedger::Reason::GENERIC</a></div><div class="ttdeci">@ GENERIC</div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html">ripple::test::LedgerServer</a></div><div class="ttdoc">Utility class for (1) creating ledgers with txns and (2) providing the ledgers via the ledgerMaster.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00447">LedgerReplay_test.cpp:447</a></div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="afind_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a></div><div class="ttdeci">T find_if(T... args)</div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_set/size.html">std::unordered_set::size</a></div><div class="ttdeci">T size(T... args)</div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayerLong__test_html"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayerLong__test.html">ripple::test::LedgerReplayerLong_test</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01538">LedgerReplay_test.cpp:1538</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_accaf15f353482bd8bf530e814d4323f3"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#accaf15f353482bd8bf530e814d4323f3">ripple::test::MagicInboundLedgers::ledgerSource</a></div><div class="ttdeci">LedgerMaster &amp; ledgerSource</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00176">LedgerReplay_test.cpp:176</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_a24a2832c1d285a0c81fb5411792645b8"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#a24a2832c1d285a0c81fb5411792645b8">ripple::test::TestPeerSet::addPeers</a></div><div class="ttdeci">void addPeers(std::size_t limit, std::function&lt; bool(std::shared_ptr&lt; Peer &gt; const &amp;)&gt; hasItem, std::function&lt; void(std::shared_ptr&lt; Peer &gt; const &amp;)&gt; onPeerAdded) override</div><div class="ttdoc">Try add more peers.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00343">LedgerReplay_test.cpp:343</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a48ba2e4da830701d38b324e9c43c4176"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a48ba2e4da830701d38b324e9c43c4176">ripple::test::TestPeer::json</a></div><div class="ttdeci">Json::Value json() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00238">LedgerReplay_test.cpp:238</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a2e1385f78f784b361d58f32487ccaaef"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a2e1385f78f784b361d58f32487ccaaef">ripple::test::LedgerServer::sendPayments</a></div><div class="ttdeci">void sendPayments(int newTxes)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00491">LedgerReplay_test.cpp:491</a></div></div>
<div class="ttc" id="anamespaceripple_html_a59334776ad7699c39ec3683f1fca4b2e"><div class="ttname"><a href="namespaceripple.html#a59334776ad7699c39ec3683f1fca4b2e">ripple::FEATURE_LEDGER_REPLAY</a></div><div class="ttdeci">static constexpr char FEATURE_LEDGER_REPLAY[]</div><div class="ttdef"><b>Definition:</b> <a href="Handshake_8h_source.html#l00148">Handshake.h:148</a></div></div>
<div class="ttc" id="aduration_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1ad10d06eac1b72b6b66d7e8bcd74474b6"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1ad10d06eac1b72b6b66d7e8bcd74474b6">ripple::test::PeerSetBehavior::Drop50</a></div><div class="ttdeci">@ Drop50</div></div>
<div class="ttc" id="anamespaceripple_html_a3b423ad1ba6341f945c08c13fe141150a955e673a299bbf8322d01b7b5e88be4e"><div class="ttname"><a href="namespaceripple.html#a3b423ad1ba6341f945c08c13fe141150a955e673a299bbf8322d01b7b5e88be4e">ripple::ProtocolFeature::LedgerReplay</a></div><div class="ttdeci">@ LedgerReplay</div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca"><div class="ttname"><a href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fad7c8c85bf79bbe1b7188497c32c3b0ca">ripple::test::TaskStatus::Failed</a></div><div class="ttdeci">@ Failed</div></div>
<div class="ttc" id="anamespaceripple_1_1keylet_html_acda2d89a44551845c5be38291e5c9e8b"><div class="ttname"><a href="namespaceripple_1_1keylet.html#acda2d89a44551845c5be38291e5c9e8b">ripple::keylet::skip</a></div><div class="ttdeci">Keylet const &amp; skip() noexcept</div><div class="ttdoc">The index of the &quot;short&quot; skip list.</div><div class="ttdef"><b>Definition:</b> <a href="Indexes_8cpp_source.html#l00145">Indexes.cpp:145</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a5f29996e384091b64ee6d78358afdc3f"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a5f29996e384091b64ee6d78358afdc3f">ripple::test::jtx::port_increment</a></div><div class="ttdeci">std::unique_ptr&lt; Config &gt; port_increment(std::unique_ptr&lt; Config &gt;, int)</div><div class="ttdoc">adjust the default configured server ports by a specified value</div><div class="ttdef"><b>Definition:</b> <a href="envconfig_8cpp_source.html#l00125">envconfig.cpp:125</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a088d1200aef40cbe192d1af3521ecbf8"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a088d1200aef40cbe192d1af3521ecbf8">ripple::test::TestPeer::cluster</a></div><div class="ttdeci">bool cluster() const override</div><div class="ttdoc">Returns true if this connection is a member of the cluster.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00217">LedgerReplay_test.cpp:217</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_ab9907fe3f5816162ad3a6c30fdf37f27"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#ab9907fe3f5816162ad3a6c30fdf37f27">ripple::test::LedgerServer::createLedgerHistory</a></div><div class="ttdeci">void createLedgerHistory()</div><div class="ttdoc">create ledger history</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00531">LedgerReplay_test.cpp:531</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_af238c2610022423bbbdbf9f493bc74e1"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#af238c2610022423bbbdbf9f493bc74e1">ripple::test::jtx::Env::journal</a></div><div class="ttdeci">const beast::Journal journal</div><div class="ttdef"><b>Definition:</b> <a href="Env_8h_source.html#l00144">Env.h:144</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a71506ecf36760b766e81a453df84e91a"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a71506ecf36760b766e81a453df84e91a">ripple::test::TestPeer::id</a></div><div class="ttdeci">id_t id() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00212">LedgerReplay_test.cpp:212</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a1c9bf362fc5dade476550f16212b6a1f"><div class="ttname"><a href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1f">ripple::test::TaskStatus</a></div><div class="ttdeci">TaskStatus</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00547">LedgerReplay_test.cpp:547</a></div></div>
<div class="ttc" id="anamespacebeast_1_1severities_html"><div class="ttname"><a href="namespacebeast_1_1severities.html">beast::severities</a></div><div class="ttdoc">A namespace for easy access to logging severity values.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00029">Journal.h:29</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a8ab88c7aa2fb32a5055e5b827054bda4"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a8ab88c7aa2fb32a5055e5b827054bda4">ripple::test::TestPeer::charge</a></div><div class="ttdeci">void charge(Resource::Charge const &amp;fee) override</div><div class="ttdoc">Adjust this peer's load balance based on the type of load imposed.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00208">LedgerReplay_test.cpp:208</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a71635c111c539c74ec6bd2065e2e0b3ea6adf97f83acf6453d4a6a4b1070f3754"><div class="ttname"><a href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ea6adf97f83acf6453d4a6a4b1070f3754">ripple::test::PeerFeature::None</a></div><div class="ttdeci">@ None</div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_ac9e7760a63ff21271107c20f9f690341"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#ac9e7760a63ff21271107c20f9f690341">ripple::test::LedgerReplayer_test::testSkipListBadReply</a></div><div class="ttdeci">void testSkipListBadReply()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01275">LedgerReplay_test.cpp:1275</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a956648d3d15c9e8ffba10b960a6c5e55"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a956648d3d15c9e8ffba10b960a6c5e55">ripple::test::MagicInboundLedgers::acquire</a></div><div class="ttdeci">virtual std::shared_ptr&lt; Ledger const &gt; acquire(uint256 const &amp;hash, std::uint32_t seq, InboundLedger::Reason) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00095">LedgerReplay_test.cpp:95</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc"><div class="ttname"><a href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa0c6ad70beb3a7e76c3fc7adab7c46acc">ripple::test::InboundLedgersBehavior::Good</a></div><div class="ttdeci">@ Good</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_a9e55bbdb66a785bfd0dda93802b514b6"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#a9e55bbdb66a785bfd0dda93802b514b6">ripple::test::jtx::Env::app</a></div><div class="ttdeci">Application &amp; app()</div><div class="ttdef"><b>Definition:</b> <a href="Env_8h_source.html#l00241">Env.h:241</a></div></div>
<div class="ttc" id="aback_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/back.html">std::string::back</a></div><div class="ttdeci">T back(T... args)</div></div>
<div class="ttc" id="afunction_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_ac313b58a2d0843ab4f8d46ece7fac907"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#ac313b58a2d0843ab4f8d46ece7fac907">ripple::test::LedgerReplayer_test::testAllInboundLedgers</a></div><div class="ttdeci">void testAllInboundLedgers(int totalReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01163">LedgerReplay_test.cpp:1163</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a2832e03e8024e529d172241404b707b6"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a2832e03e8024e529d172241404b707b6">ripple::test::MagicInboundLedgers::ledgerSink</a></div><div class="ttdeci">LedgerMaster &amp; ledgerSink</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00177">LedgerReplay_test.cpp:177</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_a799f6f0f5bef6d61cccd769ecd2eb026"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#a799f6f0f5bef6d61cccd769ecd2eb026">ripple::test::TestPeerSet::behavior</a></div><div class="ttdeci">PeerSetBehavior behavior</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00408">LedgerReplay_test.cpp:408</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_aa6226f36aadeba23415ab0acc8be6670"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#aa6226f36aadeba23415ab0acc8be6670">ripple::test::TestPeer::hasTxSet</a></div><div class="ttdeci">bool hasTxSet(uint256 const &amp;hash) const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00274">LedgerReplay_test.cpp:274</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a3cfdfe289ee6550afa6208e9d7b156df"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a3cfdfe289ee6550afa6208e9d7b156df">ripple::test::LedgerReplayClient::ledgerMaster</a></div><div class="ttdeci">LedgerMaster &amp; ledgerMaster</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00812">LedgerReplay_test.cpp:812</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a287cf5b6a71db097fe1678c88926efb4"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a287cf5b6a71db097fe1678c88926efb4">ripple::test::jtx::envconfig</a></div><div class="ttdeci">std::unique_ptr&lt; Config &gt; envconfig()</div><div class="ttdoc">creates and initializes a default configuration for jtx::Env</div><div class="ttdef"><b>Definition:</b> <a href="envconfig_8h_source.html#l00049">envconfig.h:49</a></div></div>
<div class="ttc" id="anamespaceripple_html_a3b423ad1ba6341f945c08c13fe141150"><div class="ttname"><a href="namespaceripple.html#a3b423ad1ba6341f945c08c13fe141150">ripple::ProtocolFeature</a></div><div class="ttdeci">ProtocolFeature</div><div class="ttdef"><b>Definition:</b> <a href="ripple_2overlay_2Peer_8h_source.html#l00038">ripple/overlay/Peer.h:38</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a716f0341fb3ff3c701bcf81ee085605c"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a716f0341fb3ff3c701bcf81ee085605c">ripple::test::LedgerReplayClient::haveLedgers</a></div><div class="ttdeci">bool haveLedgers(uint256 const &amp;finishLedgerHash, int totalReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00600">LedgerReplay_test.cpp:600</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html_a6686c411e2ed6370b44ccaf511cec3e9"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html#a6686c411e2ed6370b44ccaf511cec3e9">ripple::test::TestPeerSetBuilder::local</a></div><div class="ttdeci">LedgerReplayMsgHandler &amp; local</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00437">LedgerReplay_test.cpp:437</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad2487abbcc1a5d6064b72144b461df6eaf77cbea9706ce2ee7fdf5a85efbf70c5"><div class="ttname"><a href="namespaceripple.html#ad2487abbcc1a5d6064b72144b461df6eaf77cbea9706ce2ee7fdf5a85efbf70c5">ripple::tapNONE</a></div><div class="ttdeci">@ tapNONE</div><div class="ttdef"><b>Definition:</b> <a href="ApplyView_8h_source.html#l00030">ApplyView.h:30</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1NetworkOfTwo_html_a28825451941ccd2dcc9d097e6d07b0e5"><div class="ttname"><a href="structripple_1_1test_1_1NetworkOfTwo.html#a28825451941ccd2dcc9d097e6d07b0e5">ripple::test::NetworkOfTwo::server</a></div><div class="ttdeci">LedgerServer server</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00847">LedgerReplay_test.cpp:847</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_aea0fc6be2d2f14294990ed7c265d614a"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#aea0fc6be2d2f14294990ed7c265d614a">ripple::test::LedgerReplayer_test::testAllLocal</a></div><div class="ttdeci">void testAllLocal(int totalReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01121">LedgerReplay_test.cpp:1121</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a4314928c05d1c7643c057d3cd664b6ab"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a4314928c05d1c7643c057d3cd664b6ab">ripple::test::TestPeer::getScore</a></div><div class="ttdeci">int getScore(bool) const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00227">LedgerReplay_test.cpp:227</a></div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html_a5342507fe2fb5ac55d578e7e98863f70"><div class="ttname"><a href="classripple_1_1base__uint.html#a5342507fe2fb5ac55d578e7e98863f70">ripple::base_uint::data</a></div><div class="ttdeci">pointer data()</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00122">base_uint.h:122</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a397b62843220daf742e7187fc3546423"><div class="ttname"><a href="namespaceripple_1_1test.html#a397b62843220daf742e7187fc3546423">ripple::test::BEAST_DEFINE_TESTSUITE_PRIO</a></div><div class="ttdeci">BEAST_DEFINE_TESTSUITE_PRIO(AccountDelete, app, ripple, 2)</div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a6a6c61b8ddd714acf56b043d79af7e5d"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a6a6c61b8ddd714acf56b043d79af7e5d">ripple::test::jtx::autofill</a></div><div class="ttdeci">static const autofill_t autofill</div><div class="ttdef"><b>Definition:</b> <a href="tags_8h_source.html#l00042">tags.h:42</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a70e43267263d0831d09b12ff57b0de92"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a70e43267263d0831d09b12ff57b0de92">ripple::test::LedgerReplayClient::waitForDone</a></div><div class="ttdeci">bool waitForDone()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00629">LedgerReplay_test.cpp:629</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_abff2f2828e099d0f90dfc681651da211"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#abff2f2828e099d0f90dfc681651da211">ripple::test::LedgerServer::LedgerServer</a></div><div class="ttdeci">LedgerServer(beast::unit_test::suite &amp;suite, Parameter const &amp;p)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00458">LedgerReplay_test.cpp:458</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayerTimeout__test_html"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html">ripple::test::LedgerReplayerTimeout_test</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01463">LedgerReplay_test.cpp:1463</a></div></div>
<div class="ttc" id="aclassripple_1_1PeerSetBuilder_html"><div class="ttname"><a href="classripple_1_1PeerSetBuilder.html">ripple::PeerSetBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="PeerSet_8h_source.html#l00080">PeerSet.h:80</a></div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html_adbe18ef92b677603e8539b3a77c064b0"><div class="ttname"><a href="classripple_1_1base__uint.html#adbe18ef92b677603e8539b3a77c064b0">ripple::base_uint::size</a></div><div class="ttdeci">constexpr static std::size_t size()</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00519">base_uint.h:519</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayTask_1_1TaskParameter_html_a3557c08b8e2f259f7be5b673e66f33c1"><div class="ttname"><a href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3557c08b8e2f259f7be5b673e66f33c1">ripple::LedgerReplayTask::TaskParameter::update</a></div><div class="ttdeci">bool update(uint256 const &amp;hash, std::uint32_t seq, std::vector&lt; uint256 &gt; const &amp;sList)</div><div class="ttdoc">fill all the fields that was not filled during construction</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayTask_8cpp_source.html#l00039">LedgerReplayTask.cpp:39</a></div></div>
<div class="ttc" id="anamespaceripple_html_a356c68147333a9a48a344718038576d9"><div class="ttname"><a href="namespaceripple.html#a356c68147333a9a48a344718038576d9">ripple::uint256</a></div><div class="ttdeci">base_uint&lt; 256 &gt; uint256</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00550">base_uint.h:550</a></div></div>
<div class="ttc" id="apush_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">std::vector::push_back</a></div><div class="ttdeci">T push_back(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a9701b8cb01c56429bdd9ff13031d445b"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a9701b8cb01c56429bdd9ff13031d445b">ripple::test::MagicInboundLedgers::MagicInboundLedgers</a></div><div class="ttdeci">MagicInboundLedgers(LedgerMaster &amp;ledgerSource, LedgerMaster &amp;ledgerSink, InboundLedgersBehavior bhvr)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00085">LedgerReplay_test.cpp:85</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_af1310036749ef7c1dde3ade149e9c281"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#af1310036749ef7c1dde3ade149e9c281">ripple::test::TestPeerSet::local</a></div><div class="ttdeci">LedgerReplayMsgHandler &amp; local</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00405">LedgerReplay_test.cpp:405</a></div></div>
<div class="ttc" id="astructripple_1_1Keylet_html_a482983062843a8682fcea76a309c73db"><div class="ttname"><a href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">ripple::Keylet::key</a></div><div class="ttdeci">uint256 key</div><div class="ttdef"><b>Definition:</b> <a href="Keylet_8h_source.html#l00040">Keylet.h:40</a></div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html"><div class="ttname"><a href="classripple_1_1base__uint.html">ripple::base_uint&lt; 256 &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a69752edc130b66cf2ec1fb93043882ee"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a69752edc130b66cf2ec1fb93043882ee">ripple::test::TestPeer::ledgerReplayEnabled_</a></div><div class="ttdeci">bool ledgerReplayEnabled_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00310">LedgerReplay_test.cpp:310</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a86a1876cfb0bbc6259f6f82e455e5857"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a86a1876cfb0bbc6259f6f82e455e5857">ripple::test::LedgerServer::accounts</a></div><div class="ttdeci">std::vector&lt; jtx::Account &gt; accounts</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00544">LedgerReplay_test.cpp:544</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_aa284042ad6d4bea239c65803884f2b54"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#aa284042ad6d4bea239c65803884f2b54">ripple::test::MagicInboundLedgers::isFailure</a></div><div class="ttdeci">virtual bool isFailure(uint256 const &amp;h) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00135">LedgerReplay_test.cpp:135</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_a7cd356ffd4275c4238124677dbe992d3"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#a7cd356ffd4275c4238124677dbe992d3">ripple::test::TestPeerSet::sendRequest</a></div><div class="ttdeci">void sendRequest(::google::protobuf::Message const &amp;msg, protocol::MessageType type, std::shared_ptr&lt; Peer &gt; const &amp;peer) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00353">LedgerReplay_test.cpp:353</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a32ad5902ac5e1149893eb38b3cf1ab2e"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a32ad5902ac5e1149893eb38b3cf1ab2e">ripple::test::MagicInboundLedgers::gotLedgerData</a></div><div class="ttdeci">virtual bool gotLedgerData(LedgerHash const &amp;ledgerHash, std::shared_ptr&lt; Peer &gt;, std::shared_ptr&lt; protocol::TMLedgerData &gt;) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00116">LedgerReplay_test.cpp:116</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a08580ae6c07807e3b0d70a480e653a67"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a08580ae6c07807e3b0d70a480e653a67">ripple::test::TestPeer::getClosedLedgerHash</a></div><div class="ttdeci">uint256 const &amp; getClosedLedgerHash() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00259">LedgerReplay_test.cpp:259</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a2a0e7fb5a536af0345a8907127699add"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a2a0e7fb5a536af0345a8907127699add">ripple::test::MagicInboundLedgers::clearFailures</a></div><div class="ttdeci">virtual void clearFailures() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00141">LedgerReplay_test.cpp:141</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_a0ea181601c1776afa9047bb9d5c9e2ea"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#a0ea181601c1776afa9047bb9d5c9e2ea">ripple::test::TestPeerSet::getPeerIds</a></div><div class="ttdeci">const std::set&lt; Peer::id_t &gt; &amp; getPeerIds() const override</div><div class="ttdoc">get the set of ids of previously added peers</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00399">LedgerReplay_test.cpp:399</a></div></div>
<div class="ttc" id="aclassripple_1_1Config_html_acec216c5b37b6d4ac971e1ff62142963"><div class="ttname"><a href="classripple_1_1Config.html#acec216c5b37b6d4ac971e1ff62142963">ripple::Config::loadFromString</a></div><div class="ttdeci">void loadFromString(std::string const &amp;fileContents)</div><div class="ttdoc">Load the config from the contents of the string.</div><div class="ttdef"><b>Definition:</b> <a href="Config_8cpp_source.html#l00457">Config.cpp:457</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a6a6decd76984eed63a0c173f9f574487">ripple::test::PeerSetBehavior::DropAll</a></div><div class="ttdeci">@ DropAll</div></div>
<div class="ttc" id="athread_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/thread.html">thread</a></div></div>
<div class="ttc" id="anamespacebeast_1_1IP_html_adbe597760cb20a7aa3f2ff92f7bed2cc"><div class="ttname"><a href="namespacebeast_1_1IP.html#adbe597760cb20a7aa3f2ff92f7bed2cc">beast::IP::Address</a></div><div class="ttdeci">boost::asio::ip::address Address</div><div class="ttdef"><b>Definition:</b> <a href="IPAddress_8h_source.html#l00041">IPAddress.h:41</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a2da8f3d27e2da922434b87af9ad76abc"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a2da8f3d27e2da922434b87af9ad76abc">ripple::test::LedgerReplayClient::asExpected</a></div><div class="ttdeci">bool asExpected(uint256 const &amp;hash, int totalReplay, TaskStatus taskExpect, TaskStatus skiplistExpect, std::vector&lt; TaskStatus &gt; const &amp;deltaExpects)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00758">LedgerReplay_test.cpp:758</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a5aee00287e1907a9876b3247864d6f0a"><div class="ttname"><a href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0a">ripple::test::InboundLedgersBehavior</a></div><div class="ttdeci">InboundLedgersBehavior</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00072">LedgerReplay_test.cpp:72</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a57929fa83c551514e364fe6981b0c104"><div class="ttname"><a href="classripple_1_1Application.html#a57929fa83c551514e364fe6981b0c104">ripple::Application::getLedgerMaster</a></div><div class="ttdeci">virtual LedgerMaster &amp; getLedgerMaster()=0</div></div>
<div class="ttc" id="aclassripple_1_1PublicKey_html"><div class="ttname"><a href="classripple_1_1PublicKey.html">ripple::PublicKey</a></div><div class="ttdoc">A public key.</div><div class="ttdef"><b>Definition:</b> <a href="PublicKey_8h_source.html#l00059">PublicKey.h:59</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a7f630b7f19e0df41ef7800b41ab37432"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a7f630b7f19e0df41ef7800b41ab37432">ripple::test::LedgerReplayClient::findTask</a></div><div class="ttdeci">std::shared_ptr&lt; LedgerReplayTask &gt; findTask(uint256 const &amp;hash, int totalReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00662">LedgerReplay_test.cpp:662</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_aff3c327d9717f5c25e38398d25611505"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#aff3c327d9717f5c25e38398d25611505">ripple::test::LedgerServer::app</a></div><div class="ttdeci">Application &amp; app</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00540">LedgerReplay_test.cpp:540</a></div></div>
<div class="ttc" id="aclassripple_1_1Config_html"><div class="ttname"><a href="classripple_1_1Config.html">ripple::Config</a></div><div class="ttdef"><b>Definition:</b> <a href="Config_8h_source.html#l00089">Config.h:89</a></div></div>
<div class="ttc" id="achrono_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/chrono.html">chrono</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a86cd77871fad7677f30757f903357ae2"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a86cd77871fad7677f30757f903357ae2">ripple::test::TestPeer::txReduceRelayEnabled</a></div><div class="ttdeci">bool txReduceRelayEnabled() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00305">LedgerReplay_test.cpp:305</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_aca56b7c63030174e59720ab51d739422"><div class="ttname"><a href="classripple_1_1Application.html#aca56b7c63030174e59720ab51d739422">ripple::Application::config</a></div><div class="ttdeci">virtual Config &amp; config()=0</div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayerTimeout__test_html_a146e52d5da747209c53624050f937936"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#a146e52d5da747209c53624050f937936">ripple::test::LedgerReplayerTimeout_test::run</a></div><div class="ttdeci">void run() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01531">LedgerReplay_test.cpp:1531</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_aeab3b4b097662cd5f9ec0bfc2041bb10"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#aeab3b4b097662cd5f9ec0bfc2041bb10">ripple::test::TestPeer::hasRange</a></div><div class="ttdeci">bool hasRange(std::uint32_t uMin, std::uint32_t uMax) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00283">LedgerReplay_test.cpp:283</a></div></div>
<div class="ttc" id="aunique_lock_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a89eac86dce3707363dfcec7fcfb10ae7"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a89eac86dce3707363dfcec7fcfb10ae7">ripple::test::LedgerServer::ledgerMaster</a></div><div class="ttdeci">LedgerMaster &amp; ledgerMaster</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00541">LedgerReplay_test.cpp:541</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_a69095691c9bcfab1f3d69c645f2dbe33"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">ripple::test::jtx::Env::close</a></div><div class="ttdeci">bool close(NetClock::time_point closeTime, std::optional&lt; std::chrono::milliseconds &gt; consensusDelay=std::nullopt)</div><div class="ttdoc">Close and advance the ledger.</div><div class="ttdef"><b>Definition:</b> <a href="Env_8cpp_source.html#l00121">Env.cpp:121</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a1bff2a2006f1201bd5011983447fd70a"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a1bff2a2006f1201bd5011983447fd70a">ripple::test::LedgerServer::env</a></div><div class="ttdeci">jtx::Env env</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00539">LedgerReplay_test.cpp:539</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1a0cf51aa72b773c64178a944bf85ef503"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a0cf51aa72b773c64178a944bf85ef503">ripple::test::PeerSetBehavior::DropLedgerDeltaReply</a></div><div class="ttdeci">@ DropLedgerDeltaReply</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a1aeed5a348a41cb72af18d9c09fa4310"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a1aeed5a348a41cb72af18d9c09fa4310">ripple::test::LedgerReplayClient::findLedgerDeltaAcquire</a></div><div class="ttdeci">std::shared_ptr&lt; LedgerDeltaAcquire &gt; findLedgerDeltaAcquire(uint256 const &amp;hash)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00712">LedgerReplay_test.cpp:712</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a5cc0f2ed06a80fc9d04d346edf0caa4c"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a5cc0f2ed06a80fc9d04d346edf0caa4c">ripple::test::MagicInboundLedgers::getInfo</a></div><div class="ttdeci">virtual Json::Value getInfo() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00146">LedgerReplay_test.cpp:146</a></div></div>
<div class="ttc" id="aclassripple_1_1Application_html_a25782128c9548339beec993b748b0268"><div class="ttname"><a href="classripple_1_1Application.html#a25782128c9548339beec993b748b0268">ripple::Application::logs</a></div><div class="ttdeci">virtual Logs &amp; logs()=0</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a5473dd2f3e5ec26fef3706e39b19fd59"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a5473dd2f3e5ec26fef3706e39b19fd59">ripple::test::LedgerReplayClient::serverMsgHandler</a></div><div class="ttdeci">LedgerReplayMsgHandler serverMsgHandler</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00814">LedgerReplay_test.cpp:814</a></div></div>
<div class="ttc" id="anamespaceripple_html_ab58cf24607744c98d521c3e97aca2a53"><div class="ttname"><a href="namespaceripple.html#ab58cf24607744c98d521c3e97aca2a53">ripple::peerFeatureEnabled</a></div><div class="ttdeci">bool peerFeatureEnabled(headers const &amp;request, std::string const &amp;feature, std::string value, bool config)</div><div class="ttdoc">Check if a feature should be enabled for a peer.</div><div class="ttdef"><b>Definition:</b> <a href="Handshake_8h_source.html#l00199">Handshake.h:199</a></div></div>
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1sig_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1sig.html">ripple::test::jtx::sig</a></div><div class="ttdoc">Set the regular signature on a JTx.</div><div class="ttdef"><b>Definition:</b> <a href="sig_8h_source.html#l00034">sig.h:34</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a8b5dec1e1d8d856f4406c59b63c6174c"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a8b5dec1e1d8d856f4406c59b63c6174c">ripple::test::MagicInboundLedgers::logFailure</a></div><div class="ttdeci">virtual void logFailure(uint256 const &amp;h, std::uint32_t seq) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00130">LedgerReplay_test.cpp:130</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_af548fd09fe85d089adee2806eab92988"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#af548fd09fe85d089adee2806eab92988">ripple::test::LedgerReplayer_test::testHandshake</a></div><div class="ttdeci">void testHandshake()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01079">LedgerReplay_test.cpp:1079</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html_ac4915c4e114f34356c1dbbef1faef49c"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html#ac4915c4e114f34356c1dbbef1faef49c">ripple::test::TestPeerSetBuilder::remote</a></div><div class="ttdeci">LedgerReplayMsgHandler &amp; remote</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00438">LedgerReplay_test.cpp:438</a></div></div>
<div class="ttc" id="amap_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/map.html">std::map</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_a1f6d416bc654487012e5badf4aed903d"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#a1f6d416bc654487012e5badf4aed903d">ripple::test::LedgerReplayer_test::testProofPath</a></div><div class="ttdeci">void testProofPath()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00879">LedgerReplay_test.cpp:879</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487"><div class="ttname"><a href="namespaceripple_1_1test.html#a5aee00287e1907a9876b3247864d6f0aa6a6decd76984eed63a0c173f9f574487">ripple::test::InboundLedgersBehavior::DropAll</a></div><div class="ttdeci">@ DropAll</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_aadb938dc9624da72d3cdabc7cf8c998e"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#aadb938dc9624da72d3cdabc7cf8c998e">ripple::test::LedgerReplayClient::LedgerReplayClient</a></div><div class="ttdeci">LedgerReplayClient(beast::unit_test::suite &amp;suite, LedgerServer &amp;server, PeerSetBehavior behavior=PeerSetBehavior::Good, InboundLedgersBehavior inboundBhvr=InboundLedgersBehavior::Good, PeerFeature peerFeature=PeerFeature::LedgerReplayEnabled)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00564">LedgerReplay_test.cpp:564</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html">ripple::test::LedgerReplayClient</a></div><div class="ttdoc">Ledger replay client side.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00561">LedgerReplay_test.cpp:561</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a1c9bf362fc5dade476550f16212b6a1fa71b56450c5e1ce9ce5f10422f47beb06"><div class="ttname"><a href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa71b56450c5e1ce9ce5f10422f47beb06">ripple::test::TaskStatus::NotDone</a></div><div class="ttdeci">@ NotDone</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html_a28a513b938b38d0de9f1ca2d89a7a028"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html#a28a513b938b38d0de9f1ca2d89a7a028">ripple::test::TestPeerSetBuilder::behavior</a></div><div class="ttdeci">PeerSetBehavior behavior</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00439">LedgerReplay_test.cpp:439</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedgers_html"><div class="ttname"><a href="classripple_1_1InboundLedgers.html">ripple::InboundLedgers</a></div><div class="ttdoc">Manages the lifetime of inbound ledgers.</div><div class="ttdef"><b>Definition:</b> <a href="InboundLedgers_8h_source.html#l00033">InboundLedgers.h:33</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1fee_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1fee.html">ripple::test::jtx::fee</a></div><div class="ttdoc">Set the fee on a JTx.</div><div class="ttdef"><b>Definition:</b> <a href="fee_8h_source.html#l00035">fee.h:35</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayTask_1_1TaskParameter_html"><div class="ttname"><a href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html">ripple::LedgerReplayTask::TaskParameter</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayTask_8h_source.html#l00046">LedgerReplayTask.h:46</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html_a56fa711d22dc68923e1a89eacf13f948"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html#a56fa711d22dc68923e1a89eacf13f948">ripple::test::TestPeerSetBuilder::build</a></div><div class="ttdeci">std::unique_ptr&lt; PeerSet &gt; build() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00430">LedgerReplay_test.cpp:430</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1jtx_1_1None_html"><div class="ttname"><a href="structripple_1_1test_1_1jtx_1_1None.html">ripple::test::jtx::None</a></div><div class="ttdef"><b>Definition:</b> <a href="amount_8h_source.html#l00057">amount.h:57</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1jtx_1_1seq_html"><div class="ttname"><a href="structripple_1_1test_1_1jtx_1_1seq.html">ripple::test::jtx::seq</a></div><div class="ttdoc">Set the sequence number on a JTx.</div><div class="ttdef"><b>Definition:</b> <a href="seq_8h_source.html#l00033">seq.h:33</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html">ripple::test::MagicInboundLedgers</a></div><div class="ttdoc">Simulate a network InboundLedgers.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00082">LedgerReplay_test.cpp:82</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a34727ce57c17ba7af9d75527e17f0e1e"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a34727ce57c17ba7af9d75527e17f0e1e">ripple::LedgerMaster::getClosedLedger</a></div><div class="ttdeci">std::shared_ptr&lt; Ledger const &gt; getClosedLedger()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerMaster_8h_source.html#l00098">LedgerMaster.h:98</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a0930658e098f23f4d27f55b6f6424b82"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a0930658e098f23f4d27f55b6f6424b82">ripple::test::LedgerReplayClient::findSkipListAcquire</a></div><div class="ttdeci">std::shared_ptr&lt; SkipListAcquire &gt; findSkipListAcquire(uint256 const &amp;hash)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00702">LedgerReplay_test.cpp:702</a></div></div>
<div class="ttc" id="aclassripple_1_1Logs_html_a5dc4fb3cb9c2b3c42fd54bef18d06c83"><div class="ttname"><a href="classripple_1_1Logs.html#a5dc4fb3cb9c2b3c42fd54bef18d06c83">ripple::Logs::threshold</a></div><div class="ttdeci">beast::severities::Severity threshold() const</div><div class="ttdef"><b>Definition:</b> <a href="Log_8cpp_source.html#l00150">Log.cpp:150</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_a49d59f193c06056e710a3f6e32772941"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#a49d59f193c06056e710a3f6e32772941">ripple::test::LedgerReplayer_test::testStop</a></div><div class="ttdeci">void testStop()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01245">LedgerReplay_test.cpp:1245</a></div></div>
<div class="ttc" id="aemplace_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">std::vector::emplace_back</a></div><div class="ttdeci">T emplace_back(T... args)</div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition:</b> <a href="RCLCensorshipDetector_8h_source.html#l00029">RCLCensorshipDetector.h:29</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a59c4fbdbb3b8da098a1d7e383a0eb77c"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a59c4fbdbb3b8da098a1d7e383a0eb77c">ripple::test::LedgerReplayClient::app</a></div><div class="ttdeci">Application &amp; app</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00811">LedgerReplay_test.cpp:811</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayMsgHandler_html"><div class="ttname"><a href="classripple_1_1LedgerReplayMsgHandler.html">ripple::LedgerReplayMsgHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayMsgHandler_8h_source.html#l00030">LedgerReplayMsgHandler.h:30</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a588f7b40af6c6c3ffa7b084c6325c03a"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a588f7b40af6c6c3ffa7b084c6325c03a">ripple::test::MagicInboundLedgers::find</a></div><div class="ttdeci">virtual std::shared_ptr&lt; InboundLedger &gt; find(LedgerHash const &amp;hash) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00110">LedgerReplay_test.cpp:110</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_ad121c705b23993a932db17e2e4a21ae1"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#ad121c705b23993a932db17e2e4a21ae1">ripple::test::MagicInboundLedgers::fetchRate</a></div><div class="ttdeci">virtual std::size_t fetchRate() override</div><div class="ttdoc">Returns the rate of historical ledger fetches per minute.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00152">LedgerReplay_test.cpp:152</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html">ripple::test::LedgerReplayer_test</a></div><div class="ttdoc">Test cases: LedgerReplayer_test: process TMProofPathRequest and TMProofPathResponse process TMRep...</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00876">LedgerReplay_test.cpp:876</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_ad11ad14933c7bbfef5f57a948be1c307"><div class="ttname"><a href="namespaceripple_1_1test.html#ad11ad14933c7bbfef5f57a948be1c307">ripple::test::logAll</a></div><div class="ttdeci">void logAll(LedgerServer &amp;server, LedgerReplayClient &amp;client, beast::severities::Severity level=Severity::kTrace)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00821">LedgerReplay_test.cpp:821</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_abfc051eb861037f706dc4a27e217a65c"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#abfc051eb861037f706dc4a27e217a65c">ripple::test::LedgerReplayClient::checkStatus</a></div><div class="ttdeci">bool checkStatus(uint256 const &amp;hash, int totalReplay, TaskStatus taskExpect, TaskStatus skiplistExpect, std::vector&lt; TaskStatus &gt; const &amp;deltaExpects)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00777">LedgerReplay_test.cpp:777</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a07d59279bad263057859ce449fd1616b"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a07d59279bad263057859ce449fd1616b">ripple::test::TestPeer::setPublisherListSequence</a></div><div class="ttdeci">void setPublisherListSequence(PublicKey const &amp;, std::size_t const) override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00255">LedgerReplay_test.cpp:255</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a7816b23daf9b325ea1f88cc121a53d05"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a7816b23daf9b325ea1f88cc121a53d05">ripple::test::jtx::pay</a></div><div class="ttdeci">Json::Value pay(Account const &amp;account, Account const &amp;to, AnyAmount amount)</div><div class="ttdoc">Create a payment.</div><div class="ttdef"><b>Definition:</b> <a href="pay_8cpp_source.html#l00029">pay.cpp:29</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_ae8bbc2e5217f94c203c1289743e2fbad"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#ae8bbc2e5217f94c203c1289743e2fbad">ripple::test::LedgerReplayer_test::testPeerSetBehavior</a></div><div class="ttdeci">void testPeerSetBehavior(PeerSetBehavior peerSetBehavior, int totalReplay=4)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01193">LedgerReplay_test.cpp:1193</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a8332ea46a4f78f11378b128d729e72cd"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a8332ea46a4f78f11378b128d729e72cd">ripple::test::TestPeer::cycleStatus</a></div><div class="ttdeci">void cycleStatus() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00279">LedgerReplay_test.cpp:279</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a089a7f15cfbf68aebcbb19e1eb763972"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a089a7f15cfbf68aebcbb19e1eb763972">ripple::test::TestPeer::publisherListSequence</a></div><div class="ttdeci">std::optional&lt; std::size_t &gt; publisherListSequence(PublicKey const &amp;) const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00250">LedgerReplay_test.cpp:250</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a3b9573297de275d86c441ac4cc5b2d49"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a3b9573297de275d86c441ac4cc5b2d49">ripple::test::MagicInboundLedgers::sweep</a></div><div class="ttdeci">virtual void sweep() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00167">LedgerReplay_test.cpp:167</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a566db0f6d52bb7951fcb5919b77feffb"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a566db0f6d52bb7951fcb5919b77feffb">ripple::test::LedgerReplayClient::countDeltas</a></div><div class="ttdeci">std::size_t countDeltas()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00676">LedgerReplay_test.cpp:676</a></div></div>
<div class="ttc" id="anamespacebeast_1_1severities_html_a069a8a312b9123b77f6aa31733ca73be"><div class="ttname"><a href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73be">beast::severities::Severity</a></div><div class="ttdeci">Severity</div><div class="ttdoc">Severity level / threshold of a Journal message.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00031">Journal.h:31</a></div></div>
<div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
<div class="ttc" id="anamespacebeast_1_1severities_html_a069a8a312b9123b77f6aa31733ca73beab6ef7006e42e82dcc97478e4e362f883"><div class="ttname"><a href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73beab6ef7006e42e82dcc97478e4e362f883">beast::severities::kWarning</a></div><div class="ttdeci">@ kWarning</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00037">Journal.h:37</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a13db828e982bb41618dea15a8b01e003"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a13db828e982bb41618dea15a8b01e003">ripple::test::MagicInboundLedgers::onLedgerFetched</a></div><div class="ttdeci">virtual void onLedgerFetched() override</div><div class="ttdoc">Called when a complete ledger is obtained.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00158">LedgerReplay_test.cpp:158</a></div></div>
<div class="ttc" id="ainsert_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_set/insert.html">std::unordered_set::insert</a></div><div class="ttdeci">T insert(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_ae2349266cb09d1f1c3de06606ebdf9e2"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">ripple::test::jtx::Env::fund</a></div><div class="ttdeci">void fund(bool setDefaultRipple, STAmount const &amp;amount, Account const &amp;account)</div><div class="ttdef"><b>Definition:</b> <a href="Env_8cpp_source.html#l00228">Env.cpp:228</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a3261f40eb9a4a7739130ec465ed91bba"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a3261f40eb9a4a7739130ec465ed91bba">ripple::test::LedgerServer::createAccounts</a></div><div class="ttdeci">void createAccounts(int newAccounts)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00475">LedgerReplay_test.cpp:475</a></div></div>
<div class="ttc" id="aclassripple_1_1PeerSet_html"><div class="ttname"><a href="classripple_1_1PeerSet.html">ripple::PeerSet</a></div><div class="ttdoc">Supports data retrieval by managing a set of peers.</div><div class="ttdef"><b>Definition:</b> <a href="PeerSet_8h_source.html#l00044">PeerSet.h:44</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a3b807716f400ad71b763fde18e0e15d0"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a3b807716f400ad71b763fde18e0e15d0">ripple::test::LedgerReplayClient::clientMsgHandler</a></div><div class="ttdeci">LedgerReplayMsgHandler clientMsgHandler</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00815">LedgerReplay_test.cpp:815</a></div></div>
<div class="ttc" id="aclassripple_1_1Resource_1_1Charge_html"><div class="ttname"><a href="classripple_1_1Resource_1_1Charge.html">ripple::Resource::Charge</a></div><div class="ttdoc">A consumption charge.</div><div class="ttdef"><b>Definition:</b> <a href="Charge_8h_source.html#l00030">Charge.h:30</a></div></div>
<div class="ttc" id="anamespaceripple_html_a00a2aa0c3f2861ed15d2b9b8b71b03a3"><div class="ttname"><a href="namespaceripple.html#a00a2aa0c3f2861ed15d2b9b8b71b03a3">ripple::buildLedger</a></div><div class="ttdeci">std::shared_ptr&lt; Ledger &gt; buildLedger(std::shared_ptr&lt; Ledger const &gt; const &amp;parent, NetClock::time_point closeTime, const bool closeTimeCorrect, NetClock::duration closeResolution, Application &amp;app, CanonicalTXSet &amp;txns, std::set&lt; TxID &gt; &amp;failedTxs, beast::Journal j)</div><div class="ttdoc">Build a new ledger by applying consensus transactions.</div><div class="ttdef"><b>Definition:</b> <a href="BuildLedger_8cpp_source.html#l00178">BuildLedger.cpp:178</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_ae05278d8cf1ae82458e19c0c483b6f49"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#ae05278d8cf1ae82458e19c0c483b6f49">ripple::test::LedgerReplayClient::addLedger</a></div><div class="ttdeci">void addLedger(std::shared_ptr&lt; Ledger const &gt; const &amp;l)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00594">LedgerReplay_test.cpp:594</a></div></div>
<div class="ttc" id="acount_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_set/count.html">std::unordered_set::count</a></div><div class="ttdeci">T count(T... args)</div></div>
<div class="ttc" id="astructripple_1_1test_1_1NetworkOfTwo_html"><div class="ttname"><a href="structripple_1_1test_1_1NetworkOfTwo.html">ripple::test::NetworkOfTwo</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00834">LedgerReplay_test.cpp:834</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayerLong__test_html_a4dadccc506933338ae8bfb99dca568e8"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayerLong__test.html#a4dadccc506933338ae8bfb99dca568e8">ripple::test::LedgerReplayerLong_test::run</a></div><div class="ttdeci">void run() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01541">LedgerReplay_test.cpp:1541</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayer_html"><div class="ttname"><a href="classripple_1_1LedgerReplayer.html">ripple::LedgerReplayer</a></div><div class="ttdoc">Manages the lifetime of ledger replay tasks.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayer_8h_source.html#l00072">LedgerReplayer.h:72</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a84fb795f944de17f84f6c69fe4698bc4"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a84fb795f944de17f84f6c69fe4698bc4">ripple::test::LedgerReplayClient::getTasks</a></div><div class="ttdeci">std::vector&lt; std::shared_ptr&lt; LedgerReplayTask &gt; &gt; getTasks()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00655">LedgerReplay_test.cpp:655</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_a3f15f2eefbc57687048ac84e5e077c41"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#a3f15f2eefbc57687048ac84e5e077c41">ripple::test::LedgerReplayer_test::run</a></div><div class="ttdeci">void run() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01441">LedgerReplay_test.cpp:1441</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_adc7d93c421443d75ebb9bf71dea72421"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#adc7d93c421443d75ebb9bf71dea72421">ripple::test::LedgerReplayer_test::testReplayDelta</a></div><div class="ttdeci">void testReplayDelta()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00943">LedgerReplay_test.cpp:943</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_af8c75a40184be023eec9d78417a8c7df"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#af8c75a40184be023eec9d78417a8c7df">ripple::test::TestPeerSet::dummyPeer</a></div><div class="ttdeci">std::shared_ptr&lt; TestPeer &gt; dummyPeer</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00407">LedgerReplay_test.cpp:407</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_html_a61f9b82d3c39b758b5541ad15cb1ba01"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer.html#a61f9b82d3c39b758b5541ad15cb1ba01">ripple::test::LedgerServer::msgHandler</a></div><div class="ttdeci">LedgerReplayMsgHandler msgHandler</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00542">LedgerReplay_test.cpp:542</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a31b518b004fd1fa0d597036180f21a5b"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a31b518b004fd1fa0d597036180f21a5b">ripple::test::TestPeer::getRemoteAddress</a></div><div class="ttdeci">beast::IP::Endpoint getRemoteAddress() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00203">LedgerReplay_test.cpp:203</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html">ripple::test::TestPeerSet</a></div><div class="ttdoc">Simulate a peerSet that supplies peers to ledger replay subtasks.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00328">LedgerReplay_test.cpp:328</a></div></div>
<div class="ttc" id="aoptional_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt; std::size_t &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayTask_1_1TaskParameter_html_a2923e3a3d4fbc1254441247e9db86bd6"><div class="ttname"><a href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a2923e3a3d4fbc1254441247e9db86bd6">ripple::LedgerReplayTask::TaskParameter::finishHash_</a></div><div class="ttdeci">uint256 finishHash_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayTask_8h_source.html#l00051">LedgerReplayTask.h:51</a></div></div>
<div class="ttc" id="asize_t_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayTask_1_1TaskParameter_html_a7c5fe6c97805e13d469ea5a0add7dbd8"><div class="ttname"><a href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a7c5fe6c97805e13d469ea5a0add7dbd8">ripple::LedgerReplayTask::TaskParameter::totalLedgers_</a></div><div class="ttdeci">std::uint32_t totalLedgers_</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayTask_8h_source.html#l00052">LedgerReplayTask.h:52</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html_a00e5264bd04a91e5cf6af1c151568e3f"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html#a00e5264bd04a91e5cf6af1c151568e3f">ripple::test::TestPeerSetBuilder::enableLedgerReplay</a></div><div class="ttdeci">bool enableLedgerReplay</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00440">LedgerReplay_test.cpp:440</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_a5c3a351bb9f2eefa2a86787961cceacb"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#a5c3a351bb9f2eefa2a86787961cceacb">ripple::test::TestPeerSet::remote</a></div><div class="ttdeci">LedgerReplayMsgHandler &amp; remote</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00406">LedgerReplay_test.cpp:406</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerServer_1_1Parameter_html"><div class="ttname"><a href="structripple_1_1test_1_1LedgerServer_1_1Parameter.html">ripple::test::LedgerServer::Parameter</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00449">LedgerReplay_test.cpp:449</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Account_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Account.html">ripple::test::jtx::Account</a></div><div class="ttdoc">Immutable cryptographic account descriptor.</div><div class="ttdef"><b>Definition:</b> <a href="Account_8h_source.html#l00037">Account.h:37</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a7020426cfb0a204051be4b3053d2acc8">ripple::test::PeerSetBehavior::Repeat</a></div><div class="ttdeci">@ Repeat</div></div>
<div class="ttc" id="aclassbeast_1_1IP_1_1Endpoint_html"><div class="ttname"><a href="classbeast_1_1IP_1_1Endpoint.html">beast::IP::Endpoint</a></div><div class="ttdoc">A version-independent IP address and port combination.</div><div class="ttdef"><b>Definition:</b> <a href="IPEndpoint_8h_source.html#l00038">IPEndpoint.h:38</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_a624ebbf034f8c0d13e795ee4b22c33a5"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#a624ebbf034f8c0d13e795ee4b22c33a5">ripple::test::MagicInboundLedgers::stop</a></div><div class="ttdeci">virtual void stop() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00172">LedgerReplay_test.cpp:172</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_a3e8d7f8b5fa089a184dcc9b00b6e0da7"><div class="ttname"><a href="classripple_1_1InboundLedger.html#a3e8d7f8b5fa089a184dcc9b00b6e0da7">ripple::InboundLedger::Reason</a></div><div class="ttdeci">Reason</div><div class="ttdef"><b>Definition:</b> <a href="InboundLedger_8h_source.html#l00043">InboundLedger.h:43</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_af329e3e7df56437bbac7a893f599b5be"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#af329e3e7df56437bbac7a893f599b5be">ripple::test::LedgerReplayClient::env</a></div><div class="ttdeci">jtx::Env env</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00810">LedgerReplay_test.cpp:810</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_acc4cd2323c54c10a2cfc61b505b4efac"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#acc4cd2323c54c10a2cfc61b505b4efac">ripple::test::LedgerReplayClient::taskStatus</a></div><div class="ttdeci">TaskStatus taskStatus(std::shared_ptr&lt; T &gt; const &amp;t)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00723">LedgerReplay_test.cpp:723</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplay__test_html"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplay__test.html">ripple::test::LedgerReplay_test</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00040">LedgerReplay_test.cpp:40</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a0c45b977245b8718a74af7c8e8ac64e1"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a0c45b977245b8718a74af7c8e8ac64e1">ripple::test::LedgerReplayClient::waitForLedgers</a></div><div class="ttdeci">bool waitForLedgers(uint256 const &amp;finishLedgerHash, int totalReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00615">LedgerReplay_test.cpp:615</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayerTimeout__test_html_a1882b677eaad5d2e1e599883396bdd6a"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayerTimeout__test.html#a1882b677eaad5d2e1e599883396bdd6a">ripple::test::LedgerReplayerTimeout_test::testSkipListTimeout</a></div><div class="ttdeci">void testSkipListTimeout()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l01466">LedgerReplay_test.cpp:1466</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac35dc55d3f3c259f344225586a8887b4"><div class="ttname"><a href="namespaceripple.html#ac35dc55d3f3c259f344225586a8887b4">ripple::makeRequest</a></div><div class="ttdeci">auto makeRequest(bool crawlPublic, bool comprEnabled, bool ledgerReplayEnabled, bool txReduceRelayEnabled, bool vpReduceRelayEnabled) -&gt; request_type</div><div class="ttdoc">Make outbound http request.</div><div class="ttdef"><b>Definition:</b> <a href="Handshake_8cpp_source.html#l00365">Handshake.cpp:365</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1TestPeerSet_html_a6a72d6274a497c5c6b7a2b5d59519d85"><div class="ttname"><a href="structripple_1_1test_1_1TestPeerSet.html#a6a72d6274a497c5c6b7a2b5d59519d85">ripple::test::TestPeerSet::TestPeerSet</a></div><div class="ttdeci">TestPeerSet(LedgerReplayMsgHandler &amp;me, LedgerReplayMsgHandler &amp;other, PeerSetBehavior bhvr, bool enableLedgerReplay)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00330">LedgerReplay_test.cpp:330</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1">ripple::test::PeerSetBehavior</a></div><div class="ttdeci">PeerSetBehavior</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00313">LedgerReplay_test.cpp:313</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a71635c111c539c74ec6bd2065e2e0b3e"><div class="ttname"><a href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3e">ripple::test::PeerFeature</a></div><div class="ttdeci">PeerFeature</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00181">LedgerReplay_test.cpp:181</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5590ae6006b178275628bde91fa03129"><div class="ttname"><a href="namespaceripple.html#a5590ae6006b178275628bde91fa03129">ripple::makeResponse</a></div><div class="ttdeci">http_response_type makeResponse(bool crawlPublic, http_request_type const &amp;req, beast::IP::Address public_ip, beast::IP::Address remote_ip, uint256 const &amp;sharedValue, std::optional&lt; std::uint32_t &gt; networkID, ProtocolVersion protocol, Application &amp;app)</div><div class="ttdoc">Make http response.</div><div class="ttdef"><b>Definition:</b> <a href="Handshake_8cpp_source.html#l00392">Handshake.cpp:392</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a6e324fd8fc463ac8f4a1d1a185511db1a1c680e775b81946aa93a83b6ad8e87d7"><div class="ttname"><a href="namespaceripple_1_1test.html#a6e324fd8fc463ac8f4a1d1a185511db1a1c680e775b81946aa93a83b6ad8e87d7">ripple::test::PeerSetBehavior::DropSkipListReply</a></div><div class="ttdeci">@ DropSkipListReply</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a2fd55a364cc77413544b6901d17c8de0"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a2fd55a364cc77413544b6901d17c8de0">ripple::test::LedgerReplayClient::inboundLedgers</a></div><div class="ttdeci">MagicInboundLedgers inboundLedgers</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00813">LedgerReplay_test.cpp:813</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa265217edeb8282e636c78b50049f4c0"><div class="ttname"><a href="namespaceripple.html#aa265217edeb8282e636c78b50049f4c0">ripple::http_request_type</a></div><div class="ttdeci">boost::beast::http::request&lt; boost::beast::http::dynamic_body &gt; http_request_type</div><div class="ttdef"><b>Definition:</b> <a href="Handshake_8h_source.html#l00047">Handshake.h:47</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc"><div class="ttname"><a href="namespaceripple_1_1test.html#a71635c111c539c74ec6bd2065e2e0b3ead26b2afca64340e74d57ba14421d17dc">ripple::test::PeerFeature::LedgerReplayEnabled</a></div><div class="ttdeci">@ LedgerReplayEnabled</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a391311e2939da285e6502c94d9f1c01a"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a391311e2939da285e6502c94d9f1c01a">ripple::test::TestPeer::removeTxQueue</a></div><div class="ttdeci">void removeTxQueue(const uint256 &amp;) override</div><div class="ttdoc">Remove hash from the transactions' hashes queue.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00301">LedgerReplay_test.cpp:301</a></div></div>
<div class="ttc" id="aunique_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_afb8d9471a9ae0de7b80649dc1009941a"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#afb8d9471a9ae0de7b80649dc1009941a">ripple::test::MagicInboundLedgers::bhvr</a></div><div class="ttdeci">InboundLedgersBehavior bhvr</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00178">LedgerReplay_test.cpp:178</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html">ripple::test::TestPeer</a></div><div class="ttdoc">Simulate a network peer.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00191">LedgerReplay_test.cpp:191</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeerSetBuilder_html_acb43c49d60b31a842a9d799aac5346bf"><div class="ttname"><a href="classripple_1_1test_1_1TestPeerSetBuilder.html#acb43c49d60b31a842a9d799aac5346bf">ripple::test::TestPeerSetBuilder::TestPeerSetBuilder</a></div><div class="ttdeci">TestPeerSetBuilder(LedgerReplayMsgHandler &amp;me, LedgerReplayMsgHandler &amp;other, PeerSetBehavior bhvr, PeerFeature peerFeature)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00417">LedgerReplay_test.cpp:417</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f"><div class="ttname"><a href="namespaceripple_1_1test.html#a1c9bf362fc5dade476550f16212b6a1fa07ca5050e697392c9ed47e6453f1453f">ripple::test::TaskStatus::Completed</a></div><div class="ttdeci">@ Completed</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1LedgerReplayClient_html_a61e8d17eca1027a5143bdf419f64a43f"><div class="ttname"><a href="classripple_1_1test_1_1LedgerReplayClient.html#a61e8d17eca1027a5143bdf419f64a43f">ripple::test::LedgerReplayClient::asExpected</a></div><div class="ttdeci">bool asExpected(std::shared_ptr&lt; LedgerReplayTask &gt; const &amp;task, TaskStatus taskExpect, TaskStatus skiplistExpect, std::vector&lt; TaskStatus &gt; const &amp;deltaExpects)</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00733">LedgerReplay_test.cpp:733</a></div></div>
<div class="ttc" id="aset_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/set.html">std::set</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a638f128c9c0f62f23d22bd41e2f97eaa"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a638f128c9c0f62f23d22bd41e2f97eaa">ripple::test::TestPeer::ledgerRange</a></div><div class="ttdeci">void ledgerRange(std::uint32_t &amp;minSeq, std::uint32_t &amp;maxSeq) const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00270">LedgerReplay_test.cpp:270</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_af9564cc1d134445c828262c31371d115"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#af9564cc1d134445c828262c31371d115">ripple::test::TestPeer::sendTxQueue</a></div><div class="ttdeci">void sendTxQueue() override</div><div class="ttdoc">Send aggregated transactions' hashes.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00293">LedgerReplay_test.cpp:293</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplayTask_1_1TaskParameter_html_a3c2b56668a4a6a767dd2763a52553bd6"><div class="ttname"><a href="classripple_1_1LedgerReplayTask_1_1TaskParameter.html#a3c2b56668a4a6a767dd2763a52553bd6">ripple::LedgerReplayTask::TaskParameter::canMergeInto</a></div><div class="ttdeci">bool canMergeInto(TaskParameter const &amp;existingTask) const</div><div class="ttdoc">check if this task can be merged into an existing task</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplayTask_8cpp_source.html#l00058">LedgerReplayTask.cpp:58</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html">ripple::test::jtx::Env</a></div><div class="ttdoc">A transaction testing environment.</div><div class="ttdef"><b>Definition:</b> <a href="Env_8h_source.html#l00116">Env.h:116</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1LedgerReplayer__test_html_a976920f91a1a2e816c8d54906a646be1"><div class="ttname"><a href="structripple_1_1test_1_1LedgerReplayer__test.html#a976920f91a1a2e816c8d54906a646be1">ripple::test::LedgerReplayer_test::testTaskParameter</a></div><div class="ttdeci">void testTaskParameter()</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00996">LedgerReplay_test.cpp:996</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_afadda8433e506ed9c47339226e139068"><div class="ttname"><a href="namespaceripple_1_1test.html#afadda8433e506ed9c47339226e139068">ripple::test::BEAST_DEFINE_TESTSUITE_MANUAL</a></div><div class="ttdeci">BEAST_DEFINE_TESTSUITE_MANUAL(LedgerReplayerLong, app, ripple)</div></div>
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition:</b> <a href="json__value_8h_source.html#l00145">json_value.h:145</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1TestPeer_html_a301b593074c4a4ca47b722d1b0fadeb2"><div class="ttname"><a href="classripple_1_1test_1_1TestPeer.html#a301b593074c4a4ca47b722d1b0fadeb2">ripple::test::TestPeer::getNodePublic</a></div><div class="ttdeci">PublicKey const &amp; getNodePublic() const override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00232">LedgerReplay_test.cpp:232</a></div></div>
<div class="ttc" id="aclassripple_1_1Peer_html"><div class="ttname"><a href="classripple_1_1Peer.html">ripple::Peer</a></div><div class="ttdoc">Represents a peer connection in the overlay.</div><div class="ttdef"><b>Definition:</b> <a href="ripple_2overlay_2Peer_8h_source.html#l00045">ripple/overlay/Peer.h:45</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MagicInboundLedgers_html_ad721f621115df060fa2f9882dd8891d7"><div class="ttname"><a href="classripple_1_1test_1_1MagicInboundLedgers.html#ad721f621115df060fa2f9882dd8891d7">ripple::test::MagicInboundLedgers::gotFetchPack</a></div><div class="ttdeci">virtual void gotFetchPack() override</div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay__test_8cpp_source.html#l00163">LedgerReplay_test.cpp:163</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_html_a36e90e9cdf2adf7993483b3190ee8e21"><div class="ttname"><a href="namespaceripple_1_1test.html#a36e90e9cdf2adf7993483b3190ee8e21">ripple::test::BEAST_DEFINE_TESTSUITE</a></div><div class="ttdeci">BEAST_DEFINE_TESTSUITE(DeliverMin, app, ripple)</div></div>
<div class="ttc" id="aclassripple_1_1LedgerReplay_html"><div class="ttname"><a href="classripple_1_1LedgerReplay.html">ripple::LedgerReplay</a></div><div class="ttdef"><b>Definition:</b> <a href="LedgerReplay_8h_source.html#l00033">LedgerReplay.h:33</a></div></div>
<div class="ttc" id="anamespacebeast_html"><div class="ttname"><a href="namespacebeast.html">beast</a></div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00641">base_uint.h:641</a></div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>