147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org/* 247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Copyright 2011 The WebRTC Project Authors. All rights reserved. 347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * 447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * Use of this source code is governed by a BSD-style license 547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * in the file PATENTS. All contributing project authors may 847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org */ 1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#ifdef HAVE_DBUS_GLIB 1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/dbus.h" 1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/gunit.h" 1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include "webrtc/base/thread.h" 1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgnamespace rtc { 1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#define SIG_NAME "NameAcquired" 2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgstatic const uint32 kTimeoutMs = 5000U; 2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgclass DBusSigFilterTest : public DBusSigFilter { 2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org public: 2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // DBusSigFilterTest listens on DBus service itself for "NameAcquired" signal. 2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // This signal should be received when the application connects to DBus 2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // service and gains ownership of a name. 2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // http://dbus.freedesktop.org/doc/dbus-specification.html 2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest() 3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org : DBusSigFilter(GetFilter()), 3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org message_received_(false) { 3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool MessageReceived() { 3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return message_received_; 3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org private: 3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org static std::string GetFilter() { 4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org return rtc::DBusSigFilter::BuildFilterString("", "", SIG_NAME); 4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Implement virtual method of DBusSigFilter. On caller thread. 4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org virtual void ProcessSignal(DBusMessage *message) { 4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(message != NULL); 4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org message_received_ = true; 4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org bool message_received_; 5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}; 5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, StartStopStartStop) { 5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter; 5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor; 5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor) { 5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter)); 5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_NOT_INITIALIZED); 6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 6747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 6847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 6947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 7047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 7147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 7247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_RUNNING); 7347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 7447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 7547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 7647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started. Skipping test."; 7747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 7847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 7947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 8047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// DBusMonitorTest listens on DBus service itself for "NameAcquired" signal. 8147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This signal should be received when the application connects to DBus 8247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// service and gains ownership of a name. 8347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This test is to make sure that we capture the "NameAcquired" signal. 8447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, ReceivedNameAcquiredSignal) { 8547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter; 8647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor; 8747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 8847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor) { 8947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter)); 9047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 9147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 9247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 9347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter.MessageReceived(), kTimeoutMs); 9447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 9547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 9647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 9747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started. Skipping test."; 9847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 9947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 10047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 10147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, ConcurrentMonitors) { 10247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter1; 10347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor1; 10447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor1.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 10547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor1) { 10647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor1->AddFilter(&filter1)); 10747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter2; 10847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor2; 10947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor2.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 11047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor2->AddFilter(&filter2)); 11147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor1->StartMonitoring()); 11347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor1->GetStatus(), kTimeoutMs); 11447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor2->StartMonitoring()); 11547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor2->GetStatus(), kTimeoutMs); 11647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 11747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter2.MessageReceived(), kTimeoutMs); 11847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor2->StopMonitoring()); 11947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor2->GetStatus(), DBusMonitor::DMS_STOPPED); 12047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter1.MessageReceived(), kTimeoutMs); 12247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor1->StopMonitoring()); 12347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor1->GetStatus(), DBusMonitor::DMS_STOPPED); 12447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 12547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started. Skipping test."; 12647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 12747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 12847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 12947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, ConcurrentFilters) { 13047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter1; 13147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter2; 13247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor; 13347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 13447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor) { 13547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter1)); 13647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter2)); 13747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 13847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 13947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 14047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter1.MessageReceived(), kTimeoutMs); 14247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter2.MessageReceived(), kTimeoutMs); 14347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 14447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 14547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 14647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 14747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started. Skipping test."; 14847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 14947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 15047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, NoAddFilterIfRunning) { 15247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter1; 15347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter2; 15447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor; 15547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 15647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor) { 15747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter1)); 15847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 15947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 16047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 16147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_FALSE(monitor->AddFilter(&filter2)); 16247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 16347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 16447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 16547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 16647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started. Skipping test."; 16747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 16847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 16947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 17047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, AddFilterAfterStop) { 17147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter1; 17247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter2; 17347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor; 17447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 17547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor) { 17647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter1)); 17747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 17847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 17947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter1.MessageReceived(), kTimeoutMs); 18047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 18147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 18247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 18347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter2)); 18447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 18547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ_WAIT(DBusMonitor::DMS_RUNNING, monitor->GetStatus(), kTimeoutMs); 18647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter1.MessageReceived(), kTimeoutMs); 18747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE_WAIT(filter2.MessageReceived(), kTimeoutMs); 18847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 18947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(monitor->GetStatus(), DBusMonitor::DMS_STOPPED); 19047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 19147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started. Skipping test."; 19247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 19347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 19447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 19547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusMonitorTest, StopRightAfterStart) { 19647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBusSigFilterTest filter; 19747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::scoped_ptr<rtc::DBusMonitor> monitor; 19847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org monitor.reset(rtc::DBusMonitor::Create(DBUS_BUS_SYSTEM)); 19947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org if (monitor) { 20047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->AddFilter(&filter)); 20147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StartMonitoring()); 20347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_TRUE(monitor->StopMonitoring()); 20447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 20547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // Stop the monitoring thread right after it had been started. 20647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // If the monitoring thread got a chance to receive a DBus signal, it would 20747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // post a message to the main thread and signal the main thread wakeup. 20847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // This message will be cleaned out automatically when the filter get 20947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // destructed. Here we also consume the wakeup signal (if there is one) so 21047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org // that the testing (main) thread is reset to a clean state. 21147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org rtc::Thread::Current()->ProcessMessages(1); 21247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } else { 21347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org LOG(LS_WARNING) << "DBus Monitor not started."; 21447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org } 21547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 21647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 21747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgTEST(DBusSigFilter, BuildFilterString) { 21847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(DBusSigFilter::BuildFilterString("", "", ""), 21947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org (DBUS_TYPE "='" DBUS_SIGNAL "'")); 22047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(DBusSigFilter::BuildFilterString("p", "", ""), 22147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org (DBUS_TYPE "='" DBUS_SIGNAL "'," DBUS_PATH "='p'")); 22247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(DBusSigFilter::BuildFilterString("p","i", ""), 22347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org (DBUS_TYPE "='" DBUS_SIGNAL "'," DBUS_PATH "='p'," 22447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBUS_INTERFACE "='i'")); 22547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org EXPECT_EQ(DBusSigFilter::BuildFilterString("p","i","m"), 22647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org (DBUS_TYPE "='" DBUS_SIGNAL "'," DBUS_PATH "='p'," 22747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org DBUS_INTERFACE "='i'," DBUS_MEMBER "='m'")); 22847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} 22947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org} // namespace rtc 23147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org 23247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#endif // HAVE_DBUS_GLIB 233