Mir

[enhancement] In the tests make it possible to get a DefaultConfiguration initialized from the command line

Bug #1316987 reported by Alan Griffiths
10
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Mir
Fix Released
Wishlist
Josh Arenson
mir (Ubuntu)
Fix Released
Undecided
Unassigned

Bug Description

stubbed_server_configuration.cpp intercepts the gtest startup to extract the command line arguments for StubbedServerConfiguration.

But we're now writing tests that don't stub the configuration (e.g. https://code.launchpad.net/~josharenson/mir/install_glmark2/+merge/218334). So it should be possible to get the corresponding mo::DefaultConfiguration() object for use elsewhere.

Tags: enhancement

Related branches

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

Note that the above MP dummies out the command line:

93 +char const* dummy[] = {0};
94 +int argc = 0;
95 +char const** argv = dummy;

This is a bit unsatisfactory as it means that configuring the Mir server can't be done on the command line as is possible with other tests. When we fix the bug we should fix the test too.

Changed in mir:
assignee: nobody → Josh Arenson (josharenson)
Changed in mir:
status: New → Confirmed
Revision history for this message
Josh Arenson (josharenson) wrote :

I can think of several ways to fix this, most of which make this bug invalid.

1. Modify the gtest framework to expose argc and argv. Obviously this is a terrible idea.
2. We are currently using the default "main" function supplied by gtest. There is no reason we can't override main and capture the variables. I may propose this change to https://code.launchpad.net/~josharenson/mir/install_glmark2/+merge/218334 as it seems like the best option.
3. Create a subclass of testing::Test that implements a main method that exposes cli args.

Since it seems this is a feature that would only be used in very specific cases, I would propose marking this as invalid and just implementing choice #2 when needed. Thoughts?

Revision history for this message
Alan Griffiths (alan-griffiths) wrote :

I think it is a small task to separate main() and argc, argv from stubbed_server_configuration.cpp into a new file and write a new function to go with it.

auto mtf::configuration_from_commandline()
-> shared_ptr<mo::Configuration>
{
  return std::make_shared<mo::DefaultConfiguration>(::argc, ::argv);
}

This can then be called both from StubbedServerConfiguration and any other places that need it.

Changed in mir:
importance: Undecided → Wishlist
tags: added: enhancement
Changed in mir:
status: Confirmed → In Progress
Changed in mir:
milestone: none → 0.2.0
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :

Fix committed into lp:mir/devel at revision None, scheduled for release in mir, milestone Unknown

Changed in mir:
status: In Progress → Fix Committed
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (7.2 KiB)

This bug was fixed in the package mir - 0.2.0+14.10.20140605-0ubuntu1

---------------
mir (0.2.0+14.10.20140605-0ubuntu1) utopic; urgency=medium

  [ Daniel van Vugt ]
  * New upstream release 0.2.0 (https://launchpad.net/mir/+milestone/0.2.0)
    - mirclient ABI unchanged, still at 7. Clients do not need rebuilding.
    - mirserver ABI bumped to 20. Shells need rebuilding.
      . Cursor::set_image() parameters changed.
      . Display::the_cursor() renamed to Display::create_hardware_cursor()
      . Platform::create_display() requires a new parameter; gl_program_factory
      . Renderable::buffer() no longer accepts any parameter at all. Multi-
        monitor frame sync is guaranteed in other ways now.
      . Scene::generate_renderable_list() renamed to renderable_list_for(id)
        where id is an opaque compositor ID of your choosing.
      . Scene::set_change_callback() replaced by the more generic:
        add_observer() and remove_observer() functions.
      . Added default implementation for SceneObserver.
      . SessionCreator renamed to ConnectionCreator.
      . ConnectedSessions renamed to Connections.
      . ProtobufSessionCreator renamed to ProtobufConnectionCreator.
      . SessionAuthorizer: pid_t parameters replaced by SessionCredentials.
      . Massive architectural changes to Input-everything.
      . Surface no longer implements Renderable, but emits one via
        compositor_snapshot().
      . Pass the full renderable list to Renderer::render().
      . Graceful handling of exceptions thrown from server threads.
      . Clarify size position interfaces in the Surface classes.
      . Plumbing for trusted sessions.
      . Allow posting and managing custom main-loop actions.
      . Timer extension.
      . Identify client process when client connects to Mir not when socket
        connects.
      . Use the ServerActionQueue for display config.
      . Recomposition signal moved to the MultiThreadedCompositor.
      . Make timer service replaceable.
      . Clarify assumptions about how many buffers a client can fill without
        blocking.
      . Introduce EmergencyCleanup interface.
    - Demo shell enhancements:
      . You can now change graphics modes on the fly using Ctrl+Alt+(-/=).
        To reset to the preferred mode use Ctrl+Alt+0.
      . The above mode changing as well as existing screen rotation keys
        (Ctrl+Alt+arrows) are now per-display; only applied to the monitor
        the mouse pointer is on.
      . New shell controls documented.
    - A new testing category, performance test, was introduced. It currently
      runs glmark2-es2 and compares the result to a minimum threshold.
    - MIR_VERSION_MINOR is tied to MIRSERVER_ABI in the sense that a change
      in the former now requires dependent projects that a rebuild is
      necessary.
    - SwitchingBundle was replaced by BufferQueue.
    - Expand credentials to include uid/gid for session authorizer.
    - Bypass control is now Mesa-specific and tied to the command line options.
      So the environment variable MIR_BYPASS has changed to MIR_SERVER_BYPASS.
    - Ongoing architectural changes in the compositor/renderer logic to
   ...

Read more...

Changed in mir (Ubuntu):
status: New → Fix Released
Changed in mir:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.