This is awesome! Thanks for working on this. On Wed, Mar 16, 2016 at 9:53 AM, haosdent <haosd...@gmail.com> wrote:
> Got it, thank you for explanation. > > On Thu, Mar 17, 2016 at 12:51 AM, Joseph Wu <jos...@mesosphere.io> wrote: > > > We tried to reduce segfaults of this particular pattern (de-referencing > > out-of-scope stack variables), as much as possible. This means the test > > suite shouldn't crash due to flaky tests anymore. And the test suite > > should run to completion each time. > > > > (I also replaced a bunch of CHECK_* statements in the tests with > ASSERT_*.) > > > > On Wed, Mar 16, 2016 at 8:27 AM, haosdent <haosd...@gmail.com> wrote: > > > > > Does it exit like segment when CHECK_xxx failed? Or exit until finish > all > > > test cases? > > > On Mar 16, 2016 11:03 PM, "Joseph Wu" <jos...@mesosphere.io> wrote: > > > > > > > Hello Devs & Contributors, > > > > > > > > We recently committed a refactor of the MesosTest suite and > underlying > > > > "Cluster" abstraction. This affects almost every existing test and > > > future > > > > test, so here's a summary of what has changed and what you should be > > > aware > > > > of: > > > > > > > > - The purpose of the refactor is to make the entire test suite > more > > > > resilient to flaky tests. Before, every test that used the " > > > > MesosTest::StartMaster" and "MesosTest::StartSlave" helpers also > > > needed > > > > to have "Shutdown()" at the end of the test. If the test failed > an > > > > assertion or expectation, it would exit before "Shutdown()" and > > would > > > > very likely segfault, or hit a "__cxa_pure_virtual__" and exit > with > > a > > > > cryptic stack trace. > > > > - The signatures of "MesosTest::StartMaster" and > > > "MesosTest::StartSlave" > > > > have changed. Both test helpers now return a " > > > > Try<Owned<cluster::Master/Slave>" Instead of a > > > "Try<PID<Master/Slave>>". > > > > To way to access the "PID" was changed from ".get()" to > > ".get()->pid". > > > > - "Shutdown()" has been removed from MesosTest. It is no longer > > > > necessary. > > > > - The MasterDetector has been exposed at the top-level for all > > slaves. > > > > This slave dependency was originally populated by the "Cluster" > > > > abstraction > > > > (which held both Masters and Slaves). In most cases, it will be > > > > sufficient > > > > to create the detector like: > > > > > > > > Owned<MasterDetector> detector = master->createDetector(); > > > > - If you need to restart the master in the middle of a test, just > > > reset > > > > the underlying "Owned" pointer. i.e: > > > > > > > > master->reset(); > > > > master = StartMaster(); > > > > > > > > Note: We can't assign master before resetting the pointer. This > is > > a > > > > limitation related to supporting multiple masters in tests, which > is > > > > currently not possible. > > > > - If you need to restart the slave in the middle of a test, there > > are > > > > several ways: > > > > - To clean up any containers associated with that slave: > > > > slave = StartSlave(...); > > > > > > > > Or: > > > > slave.reset(); > > > > slave = StartSlave(...); > > > > - To stop a slave without container cleanup (equivalent to the > > > > original "MesosTest::Stop()"), use: > > > > slave->terminate(); > > > > > > > > Or: > > > > slave->shutdown(); > > > > > > > > These two methods emulate turning off the slave, but have > > slightly > > > > different semantics. "Terminate" generally emulates a crash. > > > > "Shutdown" > > > > emulates a graceful exit. > > > > > > > > If you have any further questions, feel free to ask. There are still > > > quite > > > > a few improvements to make, but those will likely be less disruptive. > > > > > > > > ~Joseph > > > > > > > > > > > > > -- > Best Regards, > Haosdent Huang >