rippled
Stoppable_test.cpp
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #include <ripple/beast/unit_test.h>
21 #include <ripple/core/Stoppable.h>
22 #include <test/unit_test/SuiteJournal.h>
23 #include <thread>
24 
25 namespace ripple {
26 namespace test {
27 
28 class Stoppable_test : public beast::unit_test::suite
29 {
30  /*
31  R
32  / | \
33  / | \
34  A B C
35  / | \ /\ |
36  D E F G H I
37  |
38  J
39  */
40  unsigned count = 0;
41 
42  class D : public Stoppable
43  {
45 
46  public:
47  D(Stoppable& parent, Stoppable_test& test)
48  : Stoppable("D", parent), test_(test)
49  {
50  }
51 
52  void
53  onPrepare() override
54  {
55  test_.expect(
56  ++test_.count == 9, "D::onPrepare called out of order");
57  }
58 
59  void
60  onStart() override
61  {
62  test_.expect(--test_.count == 0, "D::onStart called out of order");
63  }
64 
65  void
66  onStop() override
67  {
68  test_.expect(++test_.count == 11, "D::onStop called out of order");
69  }
70 
71  void
72  onChildrenStopped() override
73  {
75  test_.expect(
76  --test_.count == 2, "D::onChildrenStopped called out of order");
77  }
78  };
79 
80  class J : public Stoppable
81  {
83 
84  public:
85  J(Stoppable& parent, Stoppable_test& test)
86  : Stoppable("J", parent), test_(test)
87  {
88  }
89 
90  void
91  onPrepare() override
92  {
93  test_.expect(
94  ++test_.count == 7, "J::onPrepare called out of order");
95  }
96 
97  void
98  onStart() override
99  {
100  test_.expect(--test_.count == 1, "J::onStart called out of order");
101  }
102 
103  void
104  onStop() override
105  {
106  test_.expect(++test_.count == 10, "J::onStop called out of order");
107  }
108 
109  void
110  onChildrenStopped() override
111  {
113  test_.expect(
114  --test_.count == 4, "J::onChildrenStopped called out of order");
115  }
116  };
117 
118  class E : public Stoppable
119  {
120  J j_;
122 
123  public:
124  E(Stoppable& parent, Stoppable_test& test)
125  : Stoppable("E", parent), j_(*this, test), test_(test)
126  {
127  }
128 
129  void
130  onPrepare() override
131  {
132  test_.expect(
133  ++test_.count == 8, "E::onPrepare called out of order");
134  }
135 
136  void
137  onStart() override
138  {
139  test_.expect(--test_.count == 2, "E::onStart called out of order");
140  }
141 
142  void
143  onStop() override
144  {
145  test_.expect(++test_.count == 9, "E::onStop called out of order");
146  }
147 
148  void
149  onChildrenStopped() override
150  {
152  test_.expect(
153  --test_.count == 3, "E::onChildrenStopped called out of order");
154  }
155  };
156 
157  class F : public Stoppable
158  {
160 
161  public:
162  F(Stoppable& parent, Stoppable_test& test)
163  : Stoppable("F", parent), test_(test)
164  {
165  }
166 
167  void
168  onPrepare() override
169  {
170  test_.expect(
171  ++test_.count == 6, "F::onPrepare called out of order");
172  }
173 
174  void
175  onStart() override
176  {
177  test_.expect(--test_.count == 3, "F::onStart called out of order");
178  }
179 
180  void
181  onStop() override
182  {
183  test_.expect(++test_.count == 8, "F::onStop called out of order");
184  }
185 
186  void
187  onChildrenStopped() override
188  {
190  test_.expect(
191  --test_.count == 5, "F::onChildrenStopped called out of order");
192  }
193  };
194 
195  class A : public Stoppable
196  {
198  D d_;
199  E e_;
200  F f_;
203 
204  public:
205  A(Stoppable& parent, Stoppable_test& test)
206  : Stoppable("A", parent)
207  , d_(*this, test)
208  , e_(*this, test)
209  , f_(*this, test)
210  , test_(test)
211  , stop_(running)
212  {
213  }
214  ~A() override
215  {
216  while (stop_ != stopped)
217  ;
218  }
219 
220  void
221  run()
222  {
223  while (stop_ == running)
224  ;
225  stop_ = stopping;
226  }
227 
228  void
229  onPrepare() override
230  {
231  test_.expect(
232  ++test_.count == 10, "A::onPrepare called out of order");
233  }
234 
235  void
236  onStart() override
237  {
238  test_.expect(--test_.count == 4, "A::onStart called out of order");
239  }
240 
241  void
242  onStop() override
243  {
244  test_.expect(++test_.count == 7, "A::onStop called out of order");
245  }
246 
247  void
248  onChildrenStopped() override
249  {
250  stop_ = please_stop;
251  while (stop_ != stopping)
252  ;
254  test_.expect(
255  --test_.count == 1, "A::onChildrenStopped called out of order");
256  stop_ = stopped;
257  }
258  };
259 
260  class G : public Stoppable
261  {
263 
264  public:
265  G(Stoppable& parent, Stoppable_test& test)
266  : Stoppable("G", parent), test_(test)
267  {
268  }
269 
270  void
271  onPrepare() override
272  {
273  test_.expect(
274  ++test_.count == 4, "G::onPrepare called out of order");
275  }
276 
277  void
278  onStart() override
279  {
280  test_.expect(--test_.count == 5, "G::onStart called out of order");
281  }
282 
283  void
284  onStop() override
285  {
286  test_.expect(++test_.count == 6, "G::onStop called out of order");
287  }
288 
289  void
290  onChildrenStopped() override
291  {
293  test_.expect(
294  --test_.count == 7, "G::onChildrenStopped called out of order");
295  }
296  };
297 
298  class H : public Stoppable
299  {
301 
302  public:
303  H(Stoppable& parent, Stoppable_test& test)
304  : Stoppable("H", parent), test_(test)
305  {
306  }
307 
308  void
309  onPrepare() override
310  {
311  test_.expect(
312  ++test_.count == 3, "H::onPrepare called out of order");
313  }
314 
315  void
316  onStart() override
317  {
318  test_.expect(--test_.count == 6, "H::onStart called out of order");
319  }
320 
321  void
322  onStop() override
323  {
324  test_.expect(++test_.count == 5, "H::onStop called out of order");
325  }
326 
327  void
328  onChildrenStopped() override
329  {
331  test_.expect(
332  --test_.count == 8, "H::onChildrenStopped called out of order");
333  }
334  };
335 
336  class B : public Stoppable
337  {
338  G g_;
339  H h_;
341 
342  public:
343  B(Stoppable& parent, Stoppable_test& test)
344  : Stoppable("B", parent)
345  , g_(*this, test)
346  , h_(*this, test)
347  , test_(test)
348  {
349  }
350 
351  void
352  onPrepare() override
353  {
354  test_.expect(
355  ++test_.count == 5, "B::onPrepare called out of order");
356  }
357 
358  void
359  onStart() override
360  {
361  test_.expect(--test_.count == 7, "B::onStart called out of order");
362  }
363 
364  void
365  onStop() override
366  {
367  test_.expect(++test_.count == 4, "B::onStop called out of order");
368  }
369 
370  void
371  onChildrenStopped() override
372  {
374  test_.expect(
375  --test_.count == 6, "B::onChildrenStopped called out of order");
376  }
377  };
378 
379  class I : public Stoppable
380  {
382 
383  public:
384  I(Stoppable& parent, Stoppable_test& test)
385  : Stoppable("I", parent), test_(test)
386  {
387  }
388 
389  void
390  onPrepare() override
391  {
392  test_.expect(
393  ++test_.count == 1, "I::onPrepare called out of order");
394  }
395 
396  void
397  onStart() override
398  {
399  test_.expect(--test_.count == 8, "I::onStart called out of order");
400  }
401 
402  void
403  onStop() override
404  {
405  test_.expect(++test_.count == 3, "I::onStop called out of order");
406  }
407 
408  void
409  onChildrenStopped() override
410  {
412  test_.expect(
413  --test_.count == 10,
414  "I::onChildrenStopped called out of order");
415  }
416  };
417 
418  class C : public Stoppable
419  {
420  I i_;
422 
423  public:
424  C(Stoppable& parent, Stoppable_test& test)
425  : Stoppable("C", parent), i_(*this, test), test_(test)
426  {
427  }
428 
429  void
430  onPrepare() override
431  {
432  test_.expect(
433  ++test_.count == 2, "C::onPrepare called out of order");
434  }
435 
436  void
437  onStart() override
438  {
439  test_.expect(--test_.count == 9, "C::onStart called out of order");
440  }
441 
442  void
443  onStop() override
444  {
445  test_.expect(++test_.count == 2, "C::onStop called out of order");
446  }
447 
448  void
449  onChildrenStopped() override
450  {
452  test_.expect(
453  --test_.count == 9, "C::onChildrenStopped called out of order");
454  }
455  };
456 
457  class Root : public RootStoppable
458  {
460  B b_;
461  C c_;
464 
465  public:
466  explicit Root(Stoppable_test& test)
467  : RootStoppable("R")
468  , a_(&A::run, std::make_unique<A>(*this, test))
469  , b_(*this, test)
470  , c_(*this, test)
471  , test_(test)
472  , journal_("Stoppable_test", test)
473  {
474  }
475 
476  void
477  run()
478  {
479  prepare();
480  start();
481  stop(journal_);
482  }
483 
484  void
485  onPrepare() override
486  {
487  test_.expect(
488  ++test_.count == 11, "Root::onPrepare called out of order");
489  }
490 
491  void
492  onStart() override
493  {
494  test_.expect(
495  --test_.count == 10, "Root::onStart called out of order");
496  }
497 
498  void
499  onStop() override
500  {
501  test_.expect(
502  ++test_.count == 1, "Root::onStop called out of order");
503  }
504 
505  void
506  onChildrenStopped() override
507  {
508  a_.join();
510  test_.expect(
511  --test_.count == 0,
512  "Root::onChildrenStopped called out of order");
513  }
514 
515  void
517  {
518  // Calling stop() a second time should have no negative
519  // consequences.
520  stop(journal_);
521  }
522  };
523 
524 public:
525  void
526  run() override
527  {
528  {
529  Root rt(*this);
530  rt.run();
531  rt.secondStop();
532  }
533  pass();
534  }
535 };
536 
538 
539 } // namespace test
540 } // namespace ripple
ripple::test::Stoppable_test::G::G
G(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:265
ripple::test::Stoppable_test::G::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:271
ripple::test::Stoppable_test::A::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:201
ripple::test::Stoppable_test::A::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:242
ripple::test::Stoppable_test::J::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:91
ripple::test::Stoppable_test::D::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:66
ripple::test::BEAST_DEFINE_TESTSUITE
BEAST_DEFINE_TESTSUITE(AccountDelete, app, ripple)
ripple::test::Stoppable_test::C::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:430
ripple::test::Stoppable_test::Root::run
void run()
Definition: Stoppable_test.cpp:477
ripple::test::Stoppable_test::C::C
C(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:424
ripple::test::Stoppable_test::J
Definition: Stoppable_test.cpp:80
ripple::Stoppable::stopped
void stopped()
Called by derived classes to indicate that the stoppable has stopped.
Definition: Stoppable.cpp:72
ripple::test::Stoppable_test::A::stopping
@ stopping
Definition: Stoppable_test.cpp:197
ripple::test::Stoppable_test::Root::c_
C c_
Definition: Stoppable_test.cpp:461
ripple::test::Stoppable_test::Root::journal_
SuiteJournal journal_
Definition: Stoppable_test.cpp:463
ripple::test::Stoppable_test::F::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:181
ripple::test::Stoppable_test::D::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:44
ripple::test::Stoppable_test::run
void run() override
Definition: Stoppable_test.cpp:526
ripple::test::Stoppable_test::E
Definition: Stoppable_test.cpp:118
ripple::test::Stoppable_test::B::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:371
ripple::test::Stoppable_test::F::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:168
ripple::test::Stoppable_test::J::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:98
ripple::test::Stoppable_test::G::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:262
ripple::test::Stoppable_test::A::running
@ running
Definition: Stoppable_test.cpp:197
ripple::test::Stoppable_test::H::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:309
ripple::test::Stoppable_test::Root::b_
B b_
Definition: Stoppable_test.cpp:460
ripple::test::Stoppable_test::C::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:443
ripple::test::Stoppable_test::B::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:365
ripple::test::Stoppable_test::A::~A
~A() override
Definition: Stoppable_test.cpp:214
ripple::test::Stoppable_test::H::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:322
ripple::test::Stoppable_test::A::d_
D d_
Definition: Stoppable_test.cpp:198
ripple::test::Stoppable_test::Root::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:485
ripple::test::Stoppable_test::A::run
void run()
Definition: Stoppable_test.cpp:221
ripple::test::Stoppable_test::G::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:284
ripple::test::Stoppable_test::I
Definition: Stoppable_test.cpp:379
ripple::test::Stoppable_test::I::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:409
ripple::test::Stoppable_test::H::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:328
ripple::test::Stoppable_test::B::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:340
ripple::test::Stoppable_test::Root::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:506
ripple::test::Stoppable_test::A::e_
E e_
Definition: Stoppable_test.cpp:199
ripple::test::Stoppable_test::F::F
F(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:162
ripple::test::Stoppable_test::B
Definition: Stoppable_test.cpp:336
ripple::RootStoppable::prepare
void prepare()
Prepare all contained Stoppable objects.
Definition: Stoppable.cpp:181
ripple::test::Stoppable_test::D::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:72
ripple::test::Stoppable_test::J::J
J(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:85
ripple::test::Stoppable_test::D
Definition: Stoppable_test.cpp:42
ripple::test::Stoppable_test::Root::Root
Root(Stoppable_test &test)
Definition: Stoppable_test.cpp:466
ripple::test::Stoppable_test::A::stopped
@ stopped
Definition: Stoppable_test.cpp:197
ripple::test::Stoppable_test::E::j_
J j_
Definition: Stoppable_test.cpp:120
ripple::test::Stoppable_test::I::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:381
ripple::RootStoppable::stop
void stop(beast::Journal j)
Notify a root stoppable and children to stop, and block until stopped.
Definition: Stoppable.cpp:199
ripple::test::Stoppable_test::B::g_
G g_
Definition: Stoppable_test.cpp:338
ripple::test::Stoppable_test::A::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:229
ripple::Stoppable
Provides an interface for starting and stopping.
Definition: Stoppable.h:200
ripple::test::Stoppable_test::D::D
D(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:47
ripple::test::Stoppable_test::B::B
B(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:343
ripple::test::Stoppable_test::A::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:236
ripple::test::Stoppable_test::Root
Definition: Stoppable_test.cpp:457
ripple::test::Stoppable_test::F::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:175
ripple::RootStoppable
Definition: Stoppable.h:352
thread
ripple::test::Stoppable_test::H::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:316
ripple::test::Stoppable_test::F::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:159
ripple::test::Stoppable_test::J::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:110
ripple::test::Stoppable_test::C::i_
I i_
Definition: Stoppable_test.cpp:420
ripple::test::Stoppable_test::A::f_
F f_
Definition: Stoppable_test.cpp:200
ripple::test::Stoppable_test::D::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:53
ripple::test::Stoppable_test::E::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:130
ripple::test::Stoppable_test::H
Definition: Stoppable_test.cpp:298
ripple::test::Stoppable_test::A::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:248
ripple::test::Stoppable_test::A::stop_
std::atomic< int > stop_
Definition: Stoppable_test.cpp:202
ripple::test::Stoppable_test::I::I
I(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:384
ripple::test::Stoppable_test::A
Definition: Stoppable_test.cpp:195
ripple::test::Stoppable_test::B::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:352
ripple::test::Stoppable_test::I::onPrepare
void onPrepare() override
Override called during preparation.
Definition: Stoppable_test.cpp:390
ripple::test::Stoppable_test::E::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:143
ripple::test::Stoppable_test::count
unsigned count
Definition: Stoppable_test.cpp:40
std::atomic< int >
ripple::test::Stoppable_test::C
Definition: Stoppable_test.cpp:418
ripple::test::Stoppable_test::C::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:421
ripple::test::Stoppable_test::I::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:403
ripple::test::SuiteJournal
Definition: SuiteJournal.h:88
ripple::test::Stoppable_test::E::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:121
ripple::test::Stoppable_test::Root::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:462
ripple::test::Stoppable_test
Definition: Stoppable_test.cpp:28
ripple::test::Stoppable_test::A::please_stop
@ please_stop
Definition: Stoppable_test.cpp:197
ripple::RootStoppable::start
void start()
Start all contained Stoppable objects.
Definition: Stoppable.cpp:188
ripple::test::Stoppable_test::A::A
A(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:205
ripple::test::Stoppable_test::I::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:397
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::test::Stoppable_test::E::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:149
ripple::test::Stoppable_test::Root::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:492
ripple::test::Stoppable_test::B::h_
H h_
Definition: Stoppable_test.cpp:339
ripple::test::Stoppable_test::G
Definition: Stoppable_test.cpp:260
ripple::test::Stoppable_test::B::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:359
std
STL namespace.
ripple::test::Stoppable_test::G::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:278
ripple::test::Stoppable_test::F::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:187
ripple::test::Stoppable_test::E::E
E(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:124
ripple::test::Stoppable_test::J::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:104
ripple::test::Stoppable_test::Root::onStop
void onStop() override
Override called when the stop notification is issued.
Definition: Stoppable_test.cpp:499
ripple::test::Stoppable_test::C::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:437
ripple::test::Stoppable_test::Root::a_
std::thread a_
Definition: Stoppable_test.cpp:459
ripple::test::Stoppable_test::H::H
H(Stoppable &parent, Stoppable_test &test)
Definition: Stoppable_test.cpp:303
ripple::test::Stoppable_test::C::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:449
ripple::test::Stoppable_test::H::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:300
ripple::test::Stoppable_test::E::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:137
ripple::test::Stoppable_test::F
Definition: Stoppable_test.cpp:157
ripple::test::Stoppable_test::G::onChildrenStopped
void onChildrenStopped() override
Override called when all children have stopped.
Definition: Stoppable_test.cpp:290
ripple::test::Stoppable_test::D::onStart
void onStart() override
Override called during start.
Definition: Stoppable_test.cpp:60
std::thread::join
T join(T... args)
ripple::test::Stoppable_test::Root::secondStop
void secondStop()
Definition: Stoppable_test.cpp:516
ripple::test::Stoppable_test::J::test_
Stoppable_test & test_
Definition: Stoppable_test.cpp:82