From e1c1a9ae367c53561cdb4f53ad8589e2bc859b0b Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 20 Apr 2016 19:57:03 -0500 Subject: add unit tests for greeter --- tests/unit/CMakeLists.txt | 5 ++ tests/unit/greeter-test.cpp | 151 ++++++++++++++++++++++++++++++++++++++ tests/utils/mock-unity-greeter.py | 41 +++++++++++ 3 files changed, 197 insertions(+) create mode 100644 tests/unit/greeter-test.cpp create mode 100644 tests/utils/mock-unity-greeter.py (limited to 'tests') diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index fe70461..9d8cad2 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -14,6 +14,10 @@ set(TEST_LINK_LIBRARIES ${GMOCK_LIBRARIES} ) +add_definitions( + -DGREETER_TEMPLATE="${CMAKE_SOURCE_DIR}/tests/utils/mock-unity-greeter.py" +) + function(add_test_by_name name) set(TEST_NAME ${name}) add_executable (${TEST_NAME} ${TEST_NAME}.cpp) @@ -31,4 +35,5 @@ function(add_qt_test_by_name name) set_property(TEST ${TEST_NAME} APPEND PROPERTY ENVIRONMENT ${CTEST_ENVIRONMENT}) target_link_libraries(${TEST_NAME} ${SERVICE_LINK_LIBRARIES} ${QT_LINK_LIBRARIES} ${TEST_LINK_LIBRARIES} ${THREAD_LINK_LIBRARIES}) endfunction() +add_qt_test_by_name(greeter-test) add_qt_test_by_name(usb-snap-test) diff --git a/tests/unit/greeter-test.cpp b/tests/unit/greeter-test.cpp new file mode 100644 index 0000000..5d29023 --- /dev/null +++ b/tests/unit/greeter-test.cpp @@ -0,0 +1,151 @@ +/* + * Copyright 2016 Canonical Ltd. + * + * This program is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 3, as published + * by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranties of + * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + * + * Authors: + * Charles Kerr + */ + +#include + +#include +#include + +#include +#include +#include + +class GreeterFixture: public QtFixture +{ +private: + + using super = QtFixture; + +public: + + GreeterFixture() =default; + ~GreeterFixture() =default; + +protected: + + std::shared_ptr m_dbus_runner; + std::shared_ptr m_dbus_mock; + GDBusConnection* m_session_bus; + + void SetUp() override + { + super::SetUp(); + + // use a fresh bus for each test + + m_dbus_runner.reset(new QtDBusTest::DBusTestRunner()); + m_dbus_mock.reset(new QtDBusMock::DBusMock(*m_dbus_runner.get())); + + GError* error {}; + m_session_bus = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, &error); + g_assert_no_error(error); + g_dbus_connection_set_exit_on_close(m_session_bus, false); + } + + void TearDown() override + { + g_clear_object(&m_session_bus); + m_dbus_mock.reset(); + m_dbus_runner.reset(); + + super::TearDown(); + } + + void start_greeter_service(bool is_active) + { + // set a watcher to look for our mock to appear + bool owned {}; + QDBusServiceWatcher watcher( + DBusNames::UnityGreeter::NAME, + m_dbus_runner->sessionConnection() + ); + QObject::connect( + &watcher, + &QDBusServiceWatcher::serviceRegistered, + [&owned](const QString&){owned = true;} + ); + + // start the mock greeter + QVariantMap parameters; + parameters["IsActive"] = QVariant(is_active); + m_dbus_mock->registerTemplate( + DBusNames::UnityGreeter::NAME, + GREETER_TEMPLATE, + parameters, + QDBusConnection::SessionBus + ); + m_dbus_runner->startServices(); + + // wait for the watcher to be triggered + ASSERT_TRUE(wait_for([&owned]{return owned;})); + } +}; + +#define ASSERT_PROPERTY_EVENTUALLY(expected_in, property_in) \ + do { \ + const auto& e = expected_in; \ + const auto& p = property_in; \ + ASSERT_TRUE(wait_for([e, &p](){ return e == p.get(); })) \ + << "expected " << e << " but got " << p.get(); \ + } while(0) + +TEST_F(GreeterFixture, ActiveServiceStartsBeforeWatcher) +{ + constexpr bool expected {true}; + + start_greeter_service(expected); + + UnityGreeter greeter(m_session_bus); + + ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); +} + +TEST_F(GreeterFixture, WatcherStartsBeforeActiveService) +{ + constexpr bool expected {true}; + + UnityGreeter greeter(m_session_bus); + + start_greeter_service(expected); + + ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); +} + +TEST_F(GreeterFixture, InactiveServiceStartsBeforeWatcher) +{ + constexpr bool expected {false}; + + start_greeter_service(expected); + + UnityGreeter greeter(m_session_bus); + + ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); +} + +TEST_F(GreeterFixture, WatcherStartsBeforeInactiveService) +{ + constexpr bool expected {false}; + + UnityGreeter greeter(m_session_bus); + + start_greeter_service(expected); + + ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); +} + diff --git a/tests/utils/mock-unity-greeter.py b/tests/utils/mock-unity-greeter.py new file mode 100644 index 0000000..70fb791 --- /dev/null +++ b/tests/utils/mock-unity-greeter.py @@ -0,0 +1,41 @@ +'''unity greeter mock template + +Very basic template that just mocks the greeter is-active flag +''' + +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; either version 3 of the License, or (at your option) any +# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text +# of the license. + +__author__ = 'Charles Kerr' +__email__ = 'charles.kerr@canonical.com' +__copyright__ = '(c) 2016 Canonical Ltd.' +__license__ = 'LGPL 3+' + +import dbus +import os + +from dbusmock import MOCK_IFACE, mockobject + +BUS_NAME = 'com.canonical.UnityGreeter' +MAIN_OBJ = '/' +MAIN_IFACE = 'com.canonical.UnityGreeter' +SYSTEM_BUS = False + + +def load(mock, parameters): + mock.AddMethods( + MAIN_IFACE, [ + ('HideGreeter', '', '', 'self.Set("com.canonical.UnityGreeter", "IsActive", False)'), + ('ShowGreeter', '', '', 'self.Set("com.canonical.UnityGreeter", "IsActive", True)') + ] + ) + mock.AddProperties( + MAIN_IFACE, + dbus.Dictionary({ + 'IsActive': parameters.get('IsActive', False), + }, signature='sv') + ) + -- cgit v1.2.3 From 3b84a37b2caae0c7c971b3c7cc5df9be1319a5ac Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 21 Apr 2016 09:19:25 -0500 Subject: don't pass a GDBusConnection to the Greeter ctor --- tests/unit/greeter-test.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/unit/greeter-test.cpp b/tests/unit/greeter-test.cpp index 5d29023..874efed 100644 --- a/tests/unit/greeter-test.cpp +++ b/tests/unit/greeter-test.cpp @@ -41,7 +41,7 @@ protected: std::shared_ptr m_dbus_runner; std::shared_ptr m_dbus_mock; - GDBusConnection* m_session_bus; + GDBusConnection* m_session_bus {}; void SetUp() override { @@ -111,7 +111,7 @@ TEST_F(GreeterFixture, ActiveServiceStartsBeforeWatcher) start_greeter_service(expected); - UnityGreeter greeter(m_session_bus); + UnityGreeter greeter; ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); } @@ -120,7 +120,7 @@ TEST_F(GreeterFixture, WatcherStartsBeforeActiveService) { constexpr bool expected {true}; - UnityGreeter greeter(m_session_bus); + UnityGreeter greeter; start_greeter_service(expected); @@ -133,7 +133,7 @@ TEST_F(GreeterFixture, InactiveServiceStartsBeforeWatcher) start_greeter_service(expected); - UnityGreeter greeter(m_session_bus); + UnityGreeter greeter; ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); } @@ -142,7 +142,7 @@ TEST_F(GreeterFixture, WatcherStartsBeforeInactiveService) { constexpr bool expected {false}; - UnityGreeter greeter(m_session_bus); + UnityGreeter greeter; start_greeter_service(expected); -- cgit v1.2.3 From d4e82e7d4fa1937d27d1397a036af2b6b03349b3 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 21 Apr 2016 09:33:08 -0500 Subject: code cleanup to prepare for MR --- tests/unit/greeter-test.cpp | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) (limited to 'tests') diff --git a/tests/unit/greeter-test.cpp b/tests/unit/greeter-test.cpp index 874efed..b33c300 100644 --- a/tests/unit/greeter-test.cpp +++ b/tests/unit/greeter-test.cpp @@ -41,35 +41,19 @@ protected: std::shared_ptr m_dbus_runner; std::shared_ptr m_dbus_mock; - GDBusConnection* m_session_bus {}; void SetUp() override { super::SetUp(); - // use a fresh bus for each test - + // use a fresh bus for each test run m_dbus_runner.reset(new QtDBusTest::DBusTestRunner()); m_dbus_mock.reset(new QtDBusMock::DBusMock(*m_dbus_runner.get())); - - GError* error {}; - m_session_bus = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, &error); - g_assert_no_error(error); - g_dbus_connection_set_exit_on_close(m_session_bus, false); - } - - void TearDown() override - { - g_clear_object(&m_session_bus); - m_dbus_mock.reset(); - m_dbus_runner.reset(); - - super::TearDown(); } void start_greeter_service(bool is_active) { - // set a watcher to look for our mock to appear + // set a watcher to look for our mock greeter to appear bool owned {}; QDBusServiceWatcher watcher( DBusNames::UnityGreeter::NAME, @@ -92,19 +76,25 @@ protected: ); m_dbus_runner->startServices(); - // wait for the watcher to be triggered + // wait for the watcher ASSERT_TRUE(wait_for([&owned]{return owned;})); } }; -#define ASSERT_PROPERTY_EVENTUALLY(expected_in, property_in) \ +#define ASSERT_PROPERTY_EQ_EVENTUALLY(expected_in, property_in) \ do { \ const auto& e = expected_in; \ const auto& p = property_in; \ - ASSERT_TRUE(wait_for([e, &p](){ return e == p.get(); })) \ + ASSERT_TRUE(wait_for([e, &p](){return e == p.get();})) \ << "expected " << e << " but got " << p.get(); \ } while(0) +/** + * Test startup timing by looking at four different cases: + * [unity greeter shows up on bus (before, after) we start listening] + * x [unity greeter is (active, inactive)] + */ + TEST_F(GreeterFixture, ActiveServiceStartsBeforeWatcher) { constexpr bool expected {true}; @@ -113,7 +103,7 @@ TEST_F(GreeterFixture, ActiveServiceStartsBeforeWatcher) UnityGreeter greeter; - ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); } TEST_F(GreeterFixture, WatcherStartsBeforeActiveService) @@ -124,7 +114,7 @@ TEST_F(GreeterFixture, WatcherStartsBeforeActiveService) start_greeter_service(expected); - ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); } TEST_F(GreeterFixture, InactiveServiceStartsBeforeWatcher) @@ -135,7 +125,7 @@ TEST_F(GreeterFixture, InactiveServiceStartsBeforeWatcher) UnityGreeter greeter; - ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); } TEST_F(GreeterFixture, WatcherStartsBeforeInactiveService) @@ -146,6 +136,6 @@ TEST_F(GreeterFixture, WatcherStartsBeforeInactiveService) start_greeter_service(expected); - ASSERT_PROPERTY_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); } -- cgit v1.2.3 From b37db33c628675971f118fb3e241dc32a9f0a5d0 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 21 Apr 2016 11:22:56 -0500 Subject: tell glib not to exit when the gdbusconnection is closed --- tests/unit/greeter-test.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'tests') diff --git a/tests/unit/greeter-test.cpp b/tests/unit/greeter-test.cpp index b33c300..72df3bc 100644 --- a/tests/unit/greeter-test.cpp +++ b/tests/unit/greeter-test.cpp @@ -41,6 +41,7 @@ protected: std::shared_ptr m_dbus_runner; std::shared_ptr m_dbus_mock; + GDBusConnection* m_bus {}; void SetUp() override { @@ -49,6 +50,18 @@ protected: // use a fresh bus for each test run m_dbus_runner.reset(new QtDBusTest::DBusTestRunner()); m_dbus_mock.reset(new QtDBusMock::DBusMock(*m_dbus_runner.get())); + + GError* error {}; + m_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, nullptr, &error); + g_assert_no_error(error); + g_dbus_connection_set_exit_on_close(m_bus, FALSE); + } + + void TearDown() override + { + g_clear_object(&m_bus); + + super::TearDown(); } void start_greeter_service(bool is_active) -- cgit v1.2.3 From ce5234162fa0c534ff9abf3fce3d03f4b01e893e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 22 Apr 2016 09:43:44 -0500 Subject: don't prompt when the greeter's not running yet: change greeter's payload from an 'is_active' bool to a three-value state of active, inactive, and unavailable --- tests/integration/usb-manager-test.cpp | 4 ++-- tests/unit/greeter-test.cpp | 29 +++++++++++++++++------------ tests/utils/gtest-print-helpers.h | 18 ++++++++++++++++++ tests/utils/mock-greeter.h | 4 ++-- 4 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 tests/utils/gtest-print-helpers.h (limited to 'tests') diff --git a/tests/integration/usb-manager-test.cpp b/tests/integration/usb-manager-test.cpp index d62756f..7320640 100644 --- a/tests/integration/usb-manager-test.cpp +++ b/tests/integration/usb-manager-test.cpp @@ -206,7 +206,7 @@ TEST_F(UsbManagerFixture, Greeter) auto adbd_server = std::make_shared(*socket_path, std::vector{"PK"+public_key}); // set up a UsbManager to process the request - m_greeter->m_is_active.set(true); + m_greeter->m_state.set(Greeter::State::ACTIVE); auto usb_manager = std::make_shared(*socket_path, *public_keys_path, m_usb_monitor, m_greeter); // add a signal spy to listen to the notification daemon @@ -219,7 +219,7 @@ TEST_F(UsbManagerFixture, Greeter) EXPECT_FALSE(notificationsSpy.wait(2000)); // disable the greeter, the notification should appear - m_greeter->m_is_active.set(false); + m_greeter->m_state.set(Greeter::State::INACTIVE); wait_for_signals(notificationsSpy, 1); EXPECT_EQ("Notify", notificationsSpy.at(0).at(0)); notificationsSpy.clear(); diff --git a/tests/unit/greeter-test.cpp b/tests/unit/greeter-test.cpp index 72df3bc..bfa88e8 100644 --- a/tests/unit/greeter-test.cpp +++ b/tests/unit/greeter-test.cpp @@ -18,6 +18,7 @@ */ #include +#include #include #include @@ -110,45 +111,49 @@ protected: TEST_F(GreeterFixture, ActiveServiceStartsBeforeWatcher) { - constexpr bool expected {true}; + constexpr bool is_active {true}; + constexpr Greeter::State expected {Greeter::State::ACTIVE}; - start_greeter_service(expected); + start_greeter_service(is_active); UnityGreeter greeter; - ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.state()); } TEST_F(GreeterFixture, WatcherStartsBeforeActiveService) { - constexpr bool expected {true}; + constexpr bool is_active {true}; + constexpr Greeter::State expected {Greeter::State::ACTIVE}; UnityGreeter greeter; - start_greeter_service(expected); + start_greeter_service(is_active); - ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.state()); } TEST_F(GreeterFixture, InactiveServiceStartsBeforeWatcher) { - constexpr bool expected {false}; + constexpr bool is_active {false}; + constexpr Greeter::State expected {Greeter::State::INACTIVE}; - start_greeter_service(expected); + start_greeter_service(is_active); UnityGreeter greeter; - ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.state()); } TEST_F(GreeterFixture, WatcherStartsBeforeInactiveService) { - constexpr bool expected {false}; + constexpr bool is_active {false}; + constexpr Greeter::State expected {Greeter::State::INACTIVE}; UnityGreeter greeter; - start_greeter_service(expected); + start_greeter_service(is_active); - ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.is_active()); + ASSERT_PROPERTY_EQ_EVENTUALLY(expected, greeter.state()); } diff --git a/tests/utils/gtest-print-helpers.h b/tests/utils/gtest-print-helpers.h new file mode 100644 index 0000000..75ee13b --- /dev/null +++ b/tests/utils/gtest-print-helpers.h @@ -0,0 +1,18 @@ + +#pragma once + +#include + +inline void PrintTo(const Greeter::State& state, std::ostream* os) { + switch(state) { + case Greeter::State::ACTIVE: *os << "Active"; break; + case Greeter::State::INACTIVE: *os << "Inactive"; break; + default: *os << "Unavailable"; break; + } +} + +std::ostream& operator<<(std::ostream& os, const Greeter::State& state) { + PrintTo(state, &os); + return os; +} + diff --git a/tests/utils/mock-greeter.h b/tests/utils/mock-greeter.h index 5ac85a0..5015087 100644 --- a/tests/utils/mock-greeter.h +++ b/tests/utils/mock-greeter.h @@ -26,7 +26,7 @@ class MockGreeter: public Greeter public: MockGreeter() =default; virtual ~MockGreeter() =default; - core::Property& is_active() override {return m_is_active;} - core::Property m_is_active {false}; + core::Property& state() override {return m_state;} + core::Property m_state {State::INACTIVE}; }; -- cgit v1.2.3 From 0f5534d22903f73e2d33ea2e29efb2307463bfa4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sat, 23 Apr 2016 12:29:45 +0200 Subject: in tests/utils/adbd-server.h, fix a timing bug in the test scaffolding by creating the adb socket in AdbdServer's ctor instead of in its worker thread. --- tests/utils/adbd-server.h | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'tests') diff --git a/tests/utils/adbd-server.h b/tests/utils/adbd-server.h index b574622..585380f 100644 --- a/tests/utils/adbd-server.h +++ b/tests/utils/adbd-server.h @@ -38,7 +38,7 @@ public: GAdbdServer(const std::string& socket_path, const std::vector& requests): m_requests{requests}, - m_socket_path{socket_path}, + m_server_socket{create_server_socket(socket_path)}, m_cancellable{g_cancellable_new()}, m_worker_thread{&GAdbdServer::worker_func, this} { @@ -50,6 +50,7 @@ public: g_cancellable_cancel(m_cancellable); m_worker_thread.join(); g_clear_object(&m_cancellable); + g_clear_object(&m_server_socket); } const std::vector m_requests; @@ -59,18 +60,14 @@ private: void worker_func() // runs in worker thread { - auto server_socket = create_server_socket(m_socket_path); auto requests = m_requests; - GError* error {}; - g_socket_listen (server_socket, &error); - g_assert_no_error (error); - while (!g_cancellable_is_cancelled(m_cancellable) && !requests.empty()) { // wait for a client connection g_message("GAdbdServer::Impl::worker_func() calling g_socket_accept()"); - auto client_socket = g_socket_accept(server_socket, m_cancellable, &error); + GError* error {}; + auto client_socket = g_socket_accept(m_server_socket, m_cancellable, &error); if (error != nullptr) { if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) g_message("GAdbdServer: Error accepting socket connection: %s", error->message); @@ -121,8 +118,6 @@ private: // cleanup g_clear_object(&client_socket); } - - g_clear_object(&server_socket); } // bind to a local domain socket @@ -139,11 +134,14 @@ private: g_assert_no_error (error); g_clear_object (&address); + g_socket_listen (socket, &error); + g_assert_no_error (error); + return socket; } - const std::string m_socket_path; - GCancellable* m_cancellable = nullptr; + GSocket* m_server_socket {}; + GCancellable* m_cancellable {}; std::thread m_worker_thread; }; -- cgit v1.2.3 From 2e88906dc5ced1c5f601cef2514d8e559246e0d5 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 27 Apr 2016 10:16:39 +0200 Subject: silence clang warning in PrintTo gtest helper --- tests/utils/gtest-print-helpers.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/utils/gtest-print-helpers.h b/tests/utils/gtest-print-helpers.h index 75ee13b..6dc1217 100644 --- a/tests/utils/gtest-print-helpers.h +++ b/tests/utils/gtest-print-helpers.h @@ -5,9 +5,9 @@ inline void PrintTo(const Greeter::State& state, std::ostream* os) { switch(state) { - case Greeter::State::ACTIVE: *os << "Active"; break; - case Greeter::State::INACTIVE: *os << "Inactive"; break; - default: *os << "Unavailable"; break; + case Greeter::State::ACTIVE: *os << "Active"; break; + case Greeter::State::INACTIVE: *os << "Inactive"; break; + case Greeter::State::UNAVAILABLE: *os << "Unavailable"; break; } } -- cgit v1.2.3 From fcf75a545e25baa8777a310c648846537590fa2b Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 27 Apr 2016 10:33:05 +0200 Subject: silence 'no previous prototype' warning from clang --- tests/utils/gtest-print-helpers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/utils/gtest-print-helpers.h b/tests/utils/gtest-print-helpers.h index 6dc1217..60f42b4 100644 --- a/tests/utils/gtest-print-helpers.h +++ b/tests/utils/gtest-print-helpers.h @@ -11,7 +11,7 @@ inline void PrintTo(const Greeter::State& state, std::ostream* os) { } } -std::ostream& operator<<(std::ostream& os, const Greeter::State& state) { +inline std::ostream& operator<<(std::ostream& os, const Greeter::State& state) { PrintTo(state, &os); return os; } -- cgit v1.2.3 From ccfe9ef48c6e072f5d0ec9918de90213a2f4a7ee Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 27 Apr 2016 10:40:05 +0200 Subject: sync tests to r33 changes --- tests/unit/usb-snap-test.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/unit/usb-snap-test.cpp b/tests/unit/usb-snap-test.cpp index 3b778dd..6cfbbd9 100644 --- a/tests/unit/usb-snap-test.cpp +++ b/tests/unit/usb-snap-test.cpp @@ -130,14 +130,9 @@ TEST_F(UsbSnapFixture, TestRoundTrip) EXPECT_TRUE(user_response_set); ASSERT_EQ(test.expected_response, user_response); - // confirm that the snap dtor cleans up the notification + // confirm that the snap dtor doesn't try to close + // the notification that's already been closed by user choice snap.reset(); - wait_for_signals(notificationsSpy, 1); - { - QVariantList const& call(notificationsSpy.at(0)); - EXPECT_EQ("CloseNotification", call.at(0)); - QVariantList const& args(call.at(1).toList()); - EXPECT_EQ(id, args.at(0)); - } + EXPECT_FALSE(notificationsSpy.wait(1000)); } } -- cgit v1.2.3 From dfa098f6fcd7203a8975ec891bc1d9f7f9e735ca Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 27 Apr 2016 13:30:59 +0200 Subject: increase timeout interval on usb manager integration test --- tests/integration/usb-manager-test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/integration/usb-manager-test.cpp b/tests/integration/usb-manager-test.cpp index 7320640..6532829 100644 --- a/tests/integration/usb-manager-test.cpp +++ b/tests/integration/usb-manager-test.cpp @@ -143,7 +143,7 @@ TEST_F(UsbManagerFixture, Allow) ); // confirm that the AdbdServer got the right response - wait_for([adbd_server](){return !adbd_server->m_responses.empty();}, 2000); + wait_for([adbd_server](){return !adbd_server->m_responses.empty();}, 5000); ASSERT_EQ(1, adbd_server->m_responses.size()); EXPECT_EQ("OK", adbd_server->m_responses.front()); -- cgit v1.2.3 From 403fd0a388e565daf195729d9211ff03c23c93a0 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 3 May 2016 18:11:00 -0500 Subject: sync UsbManagerFixture::USBDisconnectedDuringPrompt to r40, to expect a 'no' each time there's a usb disconnect --- tests/integration/usb-manager-test.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/integration/usb-manager-test.cpp b/tests/integration/usb-manager-test.cpp index 6532829..805ba6e 100644 --- a/tests/integration/usb-manager-test.cpp +++ b/tests/integration/usb-manager-test.cpp @@ -163,13 +163,16 @@ TEST_F(UsbManagerFixture, USBDisconnectedDuringPrompt) const std::shared_ptr public_keys_path {new std::string{*m_tmpdir+"/adb_keys"}, file_deleter}; // start a mock AdbdServer ready to submit a request + const size_t N_TESTS {3}; const std::string public_key {"public_key"}; - auto adbd_server = std::make_shared(*socket_path, std::vector{"PK"+public_key}); + const std::vector requests(N_TESTS, "PK"+public_key); + const std::vector expected_responses(N_TESTS, "NO"); + auto adbd_server = std::make_shared(*socket_path, requests); // set up a UsbManager to process the request auto usb_manager = std::make_shared(*socket_path, *public_keys_path, m_usb_monitor, m_greeter); - for (int i=0; i<3; i++) + for (std::remove_const::type i=0; im_responses.size() == N_TESTS;}, 5000)); + EXPECT_EQ(expected_responses, adbd_server->m_responses); } TEST_F(UsbManagerFixture, Greeter) -- cgit v1.2.3