summaryrefslogtreecommitdiff
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2015-09-30 18:32:38 +0200
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2015-09-30 18:32:38 +0200
commit9d44c249a58159c9dc5a93560dc0b116cf07f17d (patch)
tree0b781dac92d95d768664ef926b137e099bc2e3af
parent4058e44785e069cf916510d48cbb4cfe7e148f48 (diff)
TestGDBusProxy: make tests more robusts when using a cancellable
(bzr r4008.7.19)
-rw-r--r--UnityCore/GLibDBusProxy.cpp10
-rw-r--r--tests/CMakeLists.txt2
-rw-r--r--tests/test_glib_dbus_proxy.cpp67
-rw-r--r--tests/test_result_renderer.cpp2
-rw-r--r--tests/test_service_panel.cpp8
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;
}