diff options
| author | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2015-09-30 18:32:38 +0200 |
|---|---|---|
| committer | Marco Trevisan (Treviño) <mail@3v1n0.net> | 2015-09-30 18:32:38 +0200 |
| commit | 9d44c249a58159c9dc5a93560dc0b116cf07f17d (patch) | |
| tree | 0b781dac92d95d768664ef926b137e099bc2e3af | |
| parent | 4058e44785e069cf916510d48cbb4cfe7e148f48 (diff) | |
TestGDBusProxy: make tests more robusts when using a cancellable
(bzr r4008.7.19)
| -rw-r--r-- | UnityCore/GLibDBusProxy.cpp | 10 | ||||
| -rw-r--r-- | tests/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | tests/test_glib_dbus_proxy.cpp | 67 | ||||
| -rw-r--r-- | tests/test_result_renderer.cpp | 2 | ||||
| -rw-r--r-- | tests/test_service_panel.cpp | 8 |
5 files changed, 57 insertions, 32 deletions
diff --git a/UnityCore/GLibDBusProxy.cpp b/UnityCore/GLibDBusProxy.cpp index fabef7d48..1cd6f4d3d 100644 --- a/UnityCore/GLibDBusProxy.cpp +++ b/UnityCore/GLibDBusProxy.cpp @@ -344,7 +344,8 @@ void DBusProxy::Impl::WaitForProxy(GCancellable* cancellable, // wait for the signal *con = proxy_acquired.connect([con, canc, timeout, callback] () { - if (!g_cancellable_is_cancelled(canc)) callback(glib::Error()); + if (!g_cancellable_is_cancelled(canc)) + callback(glib::Error()); timeout->Remove(); con->disconnect(); @@ -390,12 +391,15 @@ void DBusProxy::Impl::Call(string const& method_name, if (!proxy_) { glib::Variant sinked_parameters(parameters); - glib::Object<GCancellable>canc(target_canc, glib::AddRef()); + glib::Object<GCancellable> canc(target_canc, glib::AddRef()); + WaitForProxy(canc, timeout_msec, [this, method_name, sinked_parameters, callback, canc, flags, timeout_msec] (glib::Error const& err) { if (err) { - callback(glib::Variant(), err); + if (callback) + callback(glib::Variant(), err); + LOG_WARNING(logger) << "Cannot call method " << method_name << ": " << err; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 831761352..5fea35009 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -355,7 +355,7 @@ if (ENABLE_X_SUPPORT) endif (ENABLE_X_SUPPORT) set (GTEST_TEST_COMMAND_XLESS ./test-gtest-xless --gtest_output=xml:./test-gtest-xless.xml) set (GTEST_TEST_COMMAND_SLOW ./test-gtest-slow --gtest_output=xml:./test-gtest-slow.xml) -set (GTEST_TEST_COMMAND_DBUS dbus-test-runner --max-wait=300 --task ./test-gtest-service --task-name test-service --task=./test-gtest-dbus --task-name=test-dbus --wait-for=com.canonical.Unity.Test.Scope --parameter=--gtest_output=xml:./test-gtest-dbus.xml --parameter=--gtest_filter=-TestCategoriesChanging*) +set (GTEST_TEST_COMMAND_DBUS dbus-test-runner --max-wait=300 --task ./test-gtest-service --task-name test-service --task=./test-gtest-dbus --task-name=test-gtest-dbus --wait-for=com.canonical.Unity.Test --parameter=--gtest_output=xml:./test-gtest-dbus.xml --parameter=--gtest_filter=-TestCategoriesChanging*) set (TEST_COMMAND_XLESS ${GTEST_TEST_COMMAND_XLESS} diff --git a/tests/test_glib_dbus_proxy.cpp b/tests/test_glib_dbus_proxy.cpp index 6afa2d3fd..09fe7e314 100644 --- a/tests/test_glib_dbus_proxy.cpp +++ b/tests/test_glib_dbus_proxy.cpp @@ -88,73 +88,85 @@ TEST_F(TestGDBusProxy, TestMethodReturn) Utils::WaitUntilMSec(got_result_return); Utils::WaitUntilMSec(got_signal_return); - + EXPECT_EQ(returned_result, expected_return); EXPECT_EQ(returned_signal, expected_return); } -TEST_F(TestGDBusProxy, TestCancelling) +TEST_F(TestGDBusProxy, TestCancellingBeforeConnecting) { - std::string call_return; // method callback - auto method_connection = [&](GVariant *variant) + auto method_connection = [this](GVariant *variant, glib::Error const& e) { - if (variant != nullptr) - { - call_return = g_variant_get_string(g_variant_get_child_value(variant, 0), NULL); - } + got_result_return = true; + }; + + Utils::WaitUntilMSec(sigc::mem_fun(proxy, &glib::DBusProxy::IsConnected)); + + glib::Cancellable cancellable; + proxy.CallBegin("TestMethod", g_variant_new("(s)", "TestStringTestString"), + method_connection, cancellable); + + cancellable.Cancel(); + + Utils::WaitPendingEvents(); + EXPECT_FALSE(got_result_return); +} +TEST_F(TestGDBusProxy, TestCancellingAfterConnecting) +{ + // method callback + auto method_connection = [this](GVariant *variant, glib::Error const& e) + { got_result_return = true; }; EXPECT_FALSE(proxy.IsConnected()); // we shouldn't be connected yet + glib::Cancellable cancellable; - // but this has to work eitherway - proxy.Call("TestMethod", g_variant_new("(s)", "TestStringTestString"), - method_connection, cancellable); + proxy.CallBegin("TestMethod", g_variant_new("(s)", "TestStringTestString"), + method_connection, cancellable); - // this could mostly cause the next test to fail + Utils::WaitUntilMSec(sigc::mem_fun(proxy, &glib::DBusProxy::IsConnected)); cancellable.Cancel(); + + Utils::WaitPendingEvents(); EXPECT_FALSE(got_result_return); } -TEST_F(TestGDBusProxy, TestAcquiring) +TEST_F(TestGDBusProxy, TestMultipleCalls) { const int NUM_REQUESTS = 10; int completed = 0; std::string call_return; // method callback - auto method_connection = [&](GVariant* variant, glib::Error const& err) + auto method_connection = [&](GVariant* variant) { - if (variant != nullptr) - { - call_return = g_variant_get_string(g_variant_get_child_value(variant, 0), NULL); - } - if (++completed >= NUM_REQUESTS) got_result_return = true; }; EXPECT_FALSE(proxy.IsConnected()); // we shouldn't be connected yet for (int i = 0; i < NUM_REQUESTS; i++) - { - proxy.CallBegin("TestMethod", g_variant_new("(s)", "TestStringTestString"), - method_connection, nullptr); - Utils::WaitForTimeoutMSec(150); - } - Utils::WaitUntilMSec(got_result_return, 2); + proxy.Call("TestMethod", g_variant_new("(s)", "TestStringTestString"), method_connection, nullptr); + + Utils::WaitPendingEvents(); + Utils::WaitUntilMSec(got_result_return, 150, G_STRLOC); + EXPECT_EQ(completed, NUM_REQUESTS); } TEST_F(TestGDBusProxyInvalidService, TestTimeouting) { std::string call_return; + bool error; // method callback - auto method_connection = [&](GVariant* variant, glib::Error const& err) + auto method_connection = [&](GVariant* variant, glib::Error const& e) { if (variant != nullptr) { call_return = g_variant_get_string(g_variant_get_child_value(variant, 0), NULL); } + error = e; got_result_return = true; }; @@ -168,6 +180,7 @@ TEST_F(TestGDBusProxyInvalidService, TestTimeouting) Utils::WaitUntilMSec(got_result_return); EXPECT_EQ(call_return, ""); + EXPECT_TRUE(error); } TEST_F(TestGDBusProxy, TestMethodCall) @@ -190,7 +203,7 @@ TEST_F(TestGDBusProxy, TestMethodCall) method_connection); Utils::WaitUntilMSec(got_result_return); - + EXPECT_TRUE(proxy.IsConnected()); EXPECT_EQ("TestStringTestString", call_return); } diff --git a/tests/test_result_renderer.cpp b/tests/test_result_renderer.cpp index 7a99d6c6c..8542b7d79 100644 --- a/tests/test_result_renderer.cpp +++ b/tests/test_result_renderer.cpp @@ -79,7 +79,7 @@ public: } private: - std::auto_ptr<dash::TextureContainer> renderer_; + std::unique_ptr<dash::TextureContainer> renderer_; }; TEST_F(TestResultRenderer, TestConstruction) diff --git a/tests/test_service_panel.cpp b/tests/test_service_panel.cpp index ef8d70404..88c4f45dd 100644 --- a/tests/test_service_panel.cpp +++ b/tests/test_service_panel.cpp @@ -17,6 +17,10 @@ static const char * panel_interface = " <arg type='" ENTRY_ARRAY_SIGNATURE "' name='state' direction='out'/>" " </method>" "\n" +" <method name='GetIconPaths'>" +" <arg type='as' name='paths' direction='out'/>" +" </method>" +"\n" " <signal name='ReSync'>" " <arg type='s' name='indicator_id' />" " </signal>" @@ -118,6 +122,10 @@ GVariant* Panel::OnMethodCall(std::string const& method, GVariant *parameters) { return g_variant_new("(b)", trigger_resync1_sent_ ? TRUE : FALSE); } + else if (method == "GetIconPaths") + { + return g_variant_new("(as)", nullptr); + } return nullptr; } |
