~unity-system-compositor-team/unity-system-compositor/trunk

« back to all changes in this revision

Viewing changes to tests/integration-tests/test_external_spinner.cpp

  • Committer: Alexandros Frantzis
  • Date: 2015-07-10 13:36:35 UTC
  • mto: This revision was merged to the branch mainline in revision 234.
  • Revision ID: alexandros.frantzis@canonical.com-20150710133635-ioth3kzdtwnx4pyb
Don't leave zombie spinner processes

Show diffs side-by-side

added added

removed removed

Lines of Context:
71
71
    return pids;
72
72
}
73
73
 
 
74
bool is_zombie(pid_t pid)
 
75
{
 
76
    std::ifstream stat("/proc/" + std::to_string(pid) + "/stat");
 
77
 
 
78
    std::stringstream ss;
 
79
    ss << stat.rdbuf();
 
80
 
 
81
    return ss.str().find(" Z ") != std::string::npos;
 
82
}
 
83
 
74
84
struct AnExternalSpinner : testing::Test
75
85
{
76
86
    std::vector<pid_t> spinner_pids()
170
180
 
171
181
    EXPECT_THAT(environment_of_spinner(), Contains("MIR_SOCKET=" + mir_socket));
172
182
}
 
183
 
 
184
TEST_F(AnExternalSpinner, does_not_leave_zombie_process)
 
185
{
 
186
    using namespace testing;
 
187
 
 
188
    spinner.ensure_running();
 
189
    auto const spinner_pid = spinner_pids()[0];
 
190
    spinner.kill();
 
191
 
 
192
    wait_for_spinner_to_terminate();
 
193
 
 
194
    // Wait a bit for zombie to be reaped by parent
 
195
    bool const spinner_is_not_zombie = usc::test::spin_wait_for_condition_or_timeout(
 
196
        [spinner_pid] { return !is_zombie(spinner_pid); },
 
197
        timeout);
 
198
 
 
199
    EXPECT_TRUE(spinner_is_not_zombie);
 
200
}