~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

Wait a bit for spinner process to appear in AnExternalSpinner tests. Fixes: https://bugs.launchpad.net/bugs/1473418.

Approved by Kevin DuBois, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
#include "src/external_spinner.h"
20
20
#include "run_command.h"
 
21
#include "spin_wait.h"
21
22
 
22
23
#include <fstream>
23
24
#include <chrono>
74
75
{
75
76
    std::vector<pid_t> spinner_pids()
76
77
    {
77
 
        return pidof(spinner_cmd);
 
78
        std::vector<pid_t> pids;
 
79
 
 
80
        usc::test::spin_wait_for_condition_or_timeout(
 
81
            [&pids, this] { pids = pidof(spinner_cmd); return !pids.empty(); },
 
82
            timeout);
 
83
 
 
84
        if (pids.empty())
 
85
            BOOST_THROW_EXCEPTION(std::runtime_error("spinner_pids timed out"));
 
86
 
 
87
        return pids;
78
88
    }
79
89
 
80
90
    std::vector<std::string> environment_of_spinner()
81
91
    {
82
 
        auto const pids = pidof(spinner_cmd);
 
92
        auto const pids = spinner_pids();
83
93
        if (pids.size() > 1)
84
94
            BOOST_THROW_EXCEPTION(std::runtime_error("Detected multiple spinner processes"));
85
95
        std::vector<std::string> env;
96
106
 
97
107
    void wait_for_spinner_to_terminate()
98
108
    {
99
 
        auto const timeout = std::chrono::milliseconds{3000};
100
 
        auto const expire = std::chrono::steady_clock::now() + timeout;
101
 
 
102
 
        while (spinner_pids().size() > 0)
103
 
        {
104
 
            if (std::chrono::steady_clock::now() > expire)
105
 
                BOOST_THROW_EXCEPTION(std::runtime_error("wait_for_no_spinner timed out"));
106
 
            std::this_thread::sleep_for(std::chrono::milliseconds{10});
107
 
        }
 
109
        usc::test::spin_wait_for_condition_or_timeout(
 
110
            [this] { return pidof(spinner_cmd).empty(); },
 
111
            timeout);
108
112
    }
109
113
 
110
114
    std::string const spinner_cmd{executable_path() + "/usc_test_helper_wait_for_signal"};
111
115
    std::string const mir_socket{"usc_mir_socket"};
 
116
    std::chrono::milliseconds const timeout{3000};
112
117
    usc::ExternalSpinner spinner{spinner_cmd, mir_socket};
113
118
};
114
119