12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/chromeos/network/network_state_notifier.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/root_window_controller.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/shelf_widget.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/shell.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "ash/system/chromeos/network/network_connect.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/status_area_widget.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/system/tray/system_tray.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/test/ash_test_base.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/shill_device_client.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/dbus/shill_service_client.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/login/login_state.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/network/network_handler.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "ui/message_center/message_center.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ash::SystemTray* GetSystemTray() { 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return ash::Shell::GetPrimaryRootWindowController()->shelf()-> 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) status_area_widget()->system_tray(); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::DBusThreadManager; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::ShillDeviceClient; 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using chromeos::ShillServiceClient; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace ash { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NetworkStateNotifierTest : public AshTestBase { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NetworkStateNotifierTest() {} 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~NetworkStateNotifierTest() {} 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::InitializeWithStub(); 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::LoginState::Initialize(); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetupDefaultShillState(); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chromeos::NetworkHandler::Initialize(); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunAllPendingInMessageLoop(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AshTestBase::SetUp(); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AshTestBase::TearDown(); 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chromeos::LoginState::Shutdown(); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) chromeos::NetworkHandler::Shutdown(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::Shutdown(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetupDefaultShillState() { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunAllPendingInMessageLoop(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShillDeviceClient::TestInterface* device_test = 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_test->ClearDevices(); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_test->AddDevice("/device/stub_wifi_device1", 6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, "stub_wifi_device1"); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) device_test->AddDevice("/device/stub_cellular_device1", 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeCellular, "stub_cellular_device1"); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShillServiceClient::TestInterface* service_test = 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_test->ClearServices(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool add_to_watchlist = true; 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const bool add_to_visible = true; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create wifi and cellular networks and set to online. 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) service_test->AddService("wifi1", "wifi1", 7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, shill::kStateIdle, 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch add_to_visible, add_to_watchlist); 79ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_test->SetServiceProperty("wifi1", 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kSecurityProperty, 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kSecurityWep)); 82ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_test->SetServiceProperty("wifi1", 8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kConnectableProperty, 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FundamentalValue(true)); 85ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_test->SetServiceProperty("wifi1", 8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kPassphraseProperty, 87ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::StringValue("failure")); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunAllPendingInMessageLoop(); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkStateNotifierTest); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkStateNotifierTest, ConnectionFailure) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(GetSystemTray()->HasNotificationBubble()); 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ash::network_connect::ConnectToNetwork("wifi1", NULL /* owning_window */); 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch RunAllPendingInMessageLoop(); 99ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Failure should spawn a notification. 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) message_center::MessageCenter* message_center = 1013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) message_center::MessageCenter::Get(); 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) EXPECT_TRUE(message_center->HasNotification( 1033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) network_connect::kNetworkConnectNotificationId)); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace test 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash 108