| // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <iostream> |
| #include <string> |
| |
| #include <base/at_exit.h> |
| #include <base/command_line.h> |
| #include <gtest/gtest.h> |
| |
| #include <glib.h> |
| #include <dbus-c++/dbus.h> |
| #include <dbus-c++/glib-integration.h> |
| |
| #include "shill/dbus_control.h" |
| #include "shill/device_info.h" |
| #include "shill/wifi.h" |
| |
| namespace switches { |
| // wi-fi device name |
| static const char kDeviceName[] = "device-name"; |
| // Flag that causes shill to show the help message and exit. |
| static const char kHelp[] = "help"; |
| // The help message shown if help flag is passed to the program. |
| static const char kHelpMessage[] = "\n" |
| "Switches for " __FILE__ "\n" |
| " --device-name\n" |
| " name of wi-fi device (e.g. wlan0).\n"; |
| } // namespace switches |
| |
| namespace shill { |
| using ::testing::Test; |
| |
| const int kInterfaceIndexUnknown = -1; |
| const unsigned int kScanTimeoutSecs = 60; |
| const char kDefaultDeviceName[] = "wlan0"; |
| DBus::Glib::BusDispatcher dbus_glib_dispatcher; |
| std::string device_name; |
| |
| class WiFiTest : public Test { |
| public: |
| WiFiTest() : timed_out_(false) { |
| dbus_control_.Init(); |
| wifi_ = new WiFi(&dbus_control_, NULL, NULL, device_name, |
| kInterfaceIndexUnknown); |
| } |
| |
| bool ScanPending() { |
| return wifi_->scan_pending_; |
| } |
| |
| void TimeOut() { |
| timed_out_ = true; |
| } |
| |
| ~WiFiTest() { |
| } |
| |
| static gboolean TimeoutHandler(void *test_instance) { |
| static_cast<WiFiTest *>(test_instance)->TimeOut(); |
| return false; |
| } |
| |
| protected: |
| DBusControl dbus_control_; |
| scoped_refptr<WiFi> wifi_; |
| bool timed_out_; |
| }; |
| |
| |
| TEST_F(WiFiTest, SSIDScanning) { |
| wifi_->Start(); |
| g_timeout_add_seconds(10, WiFiTest::TimeoutHandler, this); |
| |
| // Crank the glib main loop |
| while (ScanPending() && !timed_out_) { |
| LOG(INFO) << "cranking event loop"; |
| g_main_context_iteration(NULL, TRUE); |
| } |
| |
| ASSERT_FALSE(timed_out_); |
| } |
| |
| } // namespace shill |
| |
| int main(int argc, char **argv) { |
| base::AtExitManager exit_manager; |
| ::testing::InitGoogleTest(&argc, argv); |
| CommandLine::Init(argc, argv); |
| CommandLine *cl = CommandLine::ForCurrentProcess(); |
| |
| if (cl->HasSwitch(switches::kHelp)) { |
| // NB(quiche): google test prints test framework help message |
| // at InitGoogleTest, above. |
| std::cout << switches::kHelpMessage; |
| return 0; |
| } |
| |
| if (cl->HasSwitch(switches::kDeviceName)) { |
| shill::device_name = |
| cl->GetSwitchValueASCII(switches::kDeviceName); |
| } else { |
| shill::device_name = shill::kDefaultDeviceName; |
| } |
| |
| shill::dbus_glib_dispatcher.attach(NULL); // NULL => default context |
| DBus::default_dispatcher = &shill::dbus_glib_dispatcher; |
| return RUN_ALL_TESTS(); |
| } |