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