~ubuntu-branches/ubuntu/vivid/mir/vivid

« back to all changes in this revision

Viewing changes to tests/include/mir_test_framework/interprocess_client_server_test.h

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Alberto Aguirre, Ubuntu daily release
  • Date: 2014-11-20 16:41:15 UTC
  • mfrom: (1.1.78)
  • Revision ID: package-import@ubuntu.com-20141120164115-icb4r8ekhfuj1abj
Tags: 0.9.0+15.04.20141120.1-0ubuntu1
[ Alberto Aguirre ]
* New upstream release 0.9.0 (https://launchpad.net/mir/+milestone/0.9.0)
  - Enhancements:
    . New simpler API to configure and run a mir server.
    . The event loop is now based on GLib's main loop library instead of
      Boost.Asio.
    . For Android platforms, the server now sends buffer fence fds to its
      clients instead of potentially stalling the compositor thread waiting
      for them to be signalled.
    . New client debug interface to translate from surface to screen
      coordinates.
  - ABI summary: Servers need rebuilding, but clients do not;
    . Mirclient ABI unchanged at 8
    . Mircommon ABI bumped to 3
    . Mirplatform ABI bumped to 4
    . Mirserver ABI bumped to 27
  - Bug fixes:
    . Add a debug interface to translate from surface to screen coordinates
      (LP: #1346633)
    . Ensure a buffer requested by a surface is not delivered 
      after the surface is deleted (LP: #1376324)
    . Overlays are not displayed onscreen in some positions (LP: #1378326)
    . Server aborts when an exception is thrown from the main thread
      (LP: #1378740)
    . Fix race causing lost alarm notifications (LP: #1381925)
    . Avoid lifecycle notifications racing with connection release
      (LP: #1386646)
    . Improve error checking and reporting for the client library
     (LP: #1390388)
    . Mir demo-shell now detects power button using proper Linux scan codes
     (LP: #1303817)
    . A prompt session with an invalid application pid should be an error
      (LP: #1377968)
    . When XDG_RUNTIME_DIR is defined but pointing to a non-existing 
      directory use "/tmp" (LP: #1304873)
    . [regression] demo-shell bypass is not used on fullscreen surfaces if 
      there are windowed surfaces behind (LP: #1378706)
    . Mir upgrade through dist-upgrade installs incorrect platform
      (LP: #1378995)
    . Fix Mir progressbar example using internal glibc defines(LP: #239272)
    . Stop the default_lifecycle_event_handler raising SIGHUP while 
      disconnecting (LP: #1386185)
    . [regression] Mir fails to build with MIR_ENABLE_TESTS=OFF (LP: #1388539)
    . [regression] mir_demo_server_basic does not start (LP: #1391923)

[ Ubuntu daily release ]
* New rebuild forced

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright © 2014 Canonical Ltd.
 
3
 *
 
4
 * This program is free software: you can redistribute it and/or modify it
 
5
 * under the terms of the GNU General Public License version 3,
 
6
 * as published by the Free Software Foundation.
 
7
 *
 
8
 * This program is distributed in the hope that it will be useful,
 
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
 * GNU General Public License for more details.
 
12
 *
 
13
 * You should have received a copy of the GNU General Public License
 
14
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
15
 *
 
16
 * Authored By: Alan Griffiths <alan@octopull.co.uk>
 
17
 */
 
18
 
 
19
#ifndef MIR_TEST_FRAMEWORK_INTERPROCESS_CLIENT_SERVER_TEST_H_
 
20
#define MIR_TEST_FRAMEWORK_INTERPROCESS_CLIENT_SERVER_TEST_H_
 
21
 
 
22
#include "mir_test_framework/headless_test.h"
 
23
#include "mir_test_framework/cross_process_sync.h"
 
24
 
 
25
namespace mir_test_framework
 
26
{
 
27
class Process;
 
28
 
 
29
class InterprocessClientServerTest : public HeadlessTest
 
30
{
 
31
public:
 
32
    char const* const mir_test_socket = test_socket_file().c_str();
 
33
 
 
34
    ~InterprocessClientServerTest();
 
35
 
 
36
    void init_server(std::function<void()> const& init_code);
 
37
 
 
38
    void run_in_server(std::function<void()> const& exec_code);
 
39
 
 
40
    void run_in_client(std::function<void()> const& client_code);
 
41
 
 
42
    bool is_test_process() const;
 
43
 
 
44
    pid_t client_pid() const { return client_process_id; }
 
45
 
 
46
    void TearDown() override;
 
47
 
 
48
    // Convenient [test|server|client] identifier if adding debug messages
 
49
    auto process_type() const -> char const* { return process_tag; }
 
50
 
 
51
    void expect_server_signalled(int signal);
 
52
 
 
53
    bool sigkill_server_process();
 
54
 
 
55
private:
 
56
 
 
57
    pid_t test_process_id{getpid()};
 
58
    pid_t server_process_id{0};
 
59
    pid_t client_process_id{0};
 
60
    std::shared_ptr<Process> server_process;
 
61
    CrossProcessSync shutdown_sync;
 
62
    char const* process_tag = "test";
 
63
    std::function<void()> server_setup = []{};
 
64
    bool server_signal_expected{false};
 
65
    int expected_server_failure_signal{0};
 
66
};
 
67
}
 
68
 
 
69
#endif /* MIR_TEST_FRAMEWORK_INTERPROCESS_CLIENT_SERVER_TEST_H_ */