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 { 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DBusThreadManager::Initialize(); 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(); 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const bool add_to_visible = true; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create a wifi network and set to online. 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_test->AddService("/service/wifi1", "wifi1_guid", "wifi1", 7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kTypeWifi, shill::kStateIdle, 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) add_to_visible); 78ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_test->SetServiceProperty("wifi1", 7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kSecurityProperty, 8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) base::StringValue(shill::kSecurityWep)); 81ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_test->SetServiceProperty("wifi1", 8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kConnectableProperty, 83ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::FundamentalValue(true)); 84ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch service_test->SetServiceProperty("wifi1", 8568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kPassphraseProperty, 86ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch base::StringValue("failure")); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RunAllPendingInMessageLoop(); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NetworkStateNotifierTest); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(NetworkStateNotifierTest, ConnectionFailure) { 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(GetSystemTray()->HasNotificationBubble()); 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ash::network_connect::ConnectToNetwork("wifi1"); 97ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch RunAllPendingInMessageLoop(); 98ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Failure should spawn a notification. 993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) message_center::MessageCenter* message_center = 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) message_center::MessageCenter::Get(); 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) EXPECT_TRUE(message_center->FindVisibleNotificationById( 1023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) network_connect::kNetworkConnectNotificationId)); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace test 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace ash 107