10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file.
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/installer/util/legacy_firewall_manager_win.h"
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/path_service.h"
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/process/process_handle.h"
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace installer {
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass LegacyFirewallManagerTest : public ::testing::Test {
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public:
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  LegacyFirewallManagerTest() : skip_test_(true) {}
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected:
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Sets up the test fixture.
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void SetUp() OVERRIDE {
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    base::IntegrityLevel level = base::INTEGRITY_UNKNOWN;
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    if (GetProcessIntegrityLevel(base::GetCurrentProcessHandle(), &level) &&
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        level != base::HIGH_INTEGRITY) {
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      LOG(WARNING) << "Not elevated. Skipping the test.";
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      return;
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    };
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    skip_test_ = false;
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    base::FilePath exe_path;
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    PathService::Get(base::FILE_EXE, &exe_path);
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    EXPECT_TRUE(manager_.Init(L"LegacyFirewallManagerTest", exe_path));
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    manager_.DeleteRule();
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  }
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Tears down the test fixture.
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void TearDown() OVERRIDE {
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    if (!skip_test_)
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      manager_.DeleteRule();
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  }
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool skip_test_;
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  LegacyFirewallManager manager_;
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private:
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  DISALLOW_COPY_AND_ASSIGN(LegacyFirewallManagerTest);
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch};
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
460529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(LegacyFirewallManagerTest, NoRule) {
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (skip_test_)
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return;
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_FALSE(manager_.GetAllowIncomingConnection(NULL));
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
520529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(LegacyFirewallManagerTest, AllowRule) {
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (skip_test_)
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return;
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(manager_.SetAllowIncomingConnection(true));
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool allowed = false;
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(manager_.GetAllowIncomingConnection(&allowed));
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(allowed);
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  manager_.DeleteRule();
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_FALSE(manager_.GetAllowIncomingConnection(NULL));
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
630529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(LegacyFirewallManagerTest, BlockRule) {
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (skip_test_)
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    return;
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(manager_.SetAllowIncomingConnection(false));
670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  bool allowed = true;
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(manager_.GetAllowIncomingConnection(&allowed));
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_FALSE(allowed);
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  manager_.DeleteRule();
710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_FALSE(manager_.GetAllowIncomingConnection(NULL));
720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}  // namespace installer
75