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/advanced_firewall_manager_win.h" 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/path_service.h" 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/process/process_handle.h" 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/win/scoped_bstr.h" 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace installer { 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass AdvancedFirewallManagerTest : public ::testing::Test { 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AdvancedFirewallManagerTest() : skip_test_(true) {} 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch protected: 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Sets up the test fixture. 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void SetUp() OVERRIDE { 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::IntegrityLevel level = base::INTEGRITY_UNKNOWN; 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!GetProcessIntegrityLevel(base::GetCurrentProcessHandle(), &level) || 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch level != base::HIGH_INTEGRITY) { 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LOG(WARNING) << "XP or not elevated. Skipping the test."; 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch }; 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch skip_test_ = false; 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::FilePath exe_path; 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch PathService::Get(base::FILE_EXE, &exe_path); 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(manager_.Init(L"AdvancedFirewallManagerTest", exe_path)); 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manager_.DeleteAllRules(); 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Tears down the test fixture. 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void TearDown() OVERRIDE { 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (!skip_test_) 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manager_.DeleteAllRules(); 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Forwards calls to |manager_| to avoid making each test a friend of 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // |AdvancedFirewallManager|. 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void GetAllRules(std::vector<base::string16>* rule_names) { 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<base::win::ScopedComPtr<INetFwRule> > rules; 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manager_.GetAllRules(&rules); 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch for (size_t i = 0; i < rules.size(); ++i) { 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::win::ScopedBstr name; 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(SUCCEEDED(rules[i]->get_Name(name.Receive()))); 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(name); 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch rule_names->push_back(base::string16(name)); 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch bool skip_test_; 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch AdvancedFirewallManager manager_; 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private: 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DISALLOW_COPY_AND_ASSIGN(AdvancedFirewallManagerTest); 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 600529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(AdvancedFirewallManagerTest, NoRule) { 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (skip_test_) 620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<base::string16> rule_names; 640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetAllRules(&rule_names); 650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(rule_names.empty()); 660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 680529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(AdvancedFirewallManagerTest, AddRule) { 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch if (skip_test_) 700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return; 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const wchar_t kRuleName[] = L"Port56789"; 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(manager_.AddUDPRule(kRuleName, L"Test Description", 56789)); 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<base::string16> rule_names; 750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetAllRules(&rule_names); 760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(1u, rule_names.size()); 770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(rule_names[0], kRuleName); 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(manager_.HasAnyRule()); 790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manager_.DeleteRuleByName(kRuleName); 810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch rule_names.clear(); 820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GetAllRules(&rule_names); 830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_TRUE(rule_names.empty()); 840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_FALSE(manager_.HasAnyRule()); 850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namespace installer 88