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