1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 The Android Open Source Project 3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License"); 5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License. 6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at 7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// http://www.apache.org/licenses/LICENSE-2.0 9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software 11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS, 12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and 14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License. 15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// 16b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 17b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart#include "shill/resolver.h" 18b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 1911c213f3cf64f27a0e42ee6da95e98bd1d4b3202Ben Chan#include <base/files/file_util.h> 205ad1606ad8b3f74b2b7960a3003a2d1ca75d52b8Paul Stewart#include <base/files/scoped_temp_dir.h> 213e20a2341d0aeb7681e4ee0f89eae6817ade2b3bEric Shienbrood#include <base/stl_util.h> 22a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan#include <base/strings/stringprintf.h> 23b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart#include <gtest/gtest.h> 24b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 25b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart#include "shill/mock_control.h" 26b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 270e1cdeae24dd678a5fe27c840802582c0ca45ec0Albert Chaulkusing base::FilePath; 28b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartusing std::string; 29b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartusing std::vector; 30b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartusing testing::Test; 31b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 32b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartnamespace shill { 33b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 34b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartnamespace { 35b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartconst char kNameServer0[] = "8.8.8.8"; 36b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartconst char kNameServer1[] = "8.8.9.9"; 37b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartconst char kSearchDomain0[] = "chromium.org"; 38b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartconst char kSearchDomain1[] = "google.com"; 39ee6b3d7f9d49fa52072a352fbb59f06127b1ba4cPaul Stewartconst char kSearchDomain2[] = "crbug.com"; 40b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartconst char kExpectedOutput[] = 41b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart "nameserver 8.8.8.8\n" 42b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart "nameserver 8.8.9.9\n" 433bd0faa1bb82cec28874926a96165c2dab78a543Thieu Le "search chromium.org google.com\n" 44f01ddd48950b26c1882caa50245df31c3b13067emukesh agrawal "options single-request timeout:1 attempts:5\n"; 454d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewartconst char kExpectedIgnoredSearchOutput[] = 464d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart "nameserver 8.8.8.8\n" 474d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart "nameserver 8.8.9.9\n" 484d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart "search google.com\n" 49f01ddd48950b26c1882caa50245df31c3b13067emukesh agrawal "options single-request timeout:1 attempts:5\n"; 508a5322984f2d81bcbfd8d44c59747a11bd9b904bAlex Vakulenko} // namespace 51b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 52b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartclass ResolverTest : public Test { 53b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart public: 54b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart ResolverTest() : resolver_(Resolver::GetInstance()) {} 55b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 56b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart virtual void SetUp() { 57b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 58b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart path_ = temp_dir_.path().Append("resolver"); 59b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart resolver_->set_path(path_); 60b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart } 61b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 62b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart virtual void TearDown() { 63b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart resolver_->set_path(FilePath("")); // Don't try to save the store. 64b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart ASSERT_TRUE(temp_dir_.Delete()); 65b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart } 66b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 67b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart protected: 68b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart string ReadFile(); 69b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 705ad1606ad8b3f74b2b7960a3003a2d1ca75d52b8Paul Stewart base::ScopedTempDir temp_dir_; 713b30ca58d13cf66b75ba0729b222ddc42ae68b33Paul Stewart Resolver* resolver_; 72b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart FilePath path_; 73b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart}; 74b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 75b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewartstring ResolverTest::ReadFile() { 76b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart string data; 77a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_TRUE(base::ReadFileToString(resolver_->path_, &data)); 78b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart return data; 79b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart} 80b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 81b6063942a712bc2825e78dc026a24a5d7b6131fcPaul StewartTEST_F(ResolverTest, NonEmpty) { 82a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_FALSE(base::PathExists(path_)); 83b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart EXPECT_TRUE(resolver_->ClearDNS()); 84b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 85b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart MockControl control; 866f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart vector<string> dns_servers; 876f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart vector<string> domain_search; 886f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart dns_servers.push_back(kNameServer0); 896f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart dns_servers.push_back(kNameServer1); 906f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart domain_search.push_back(kSearchDomain0); 916f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart domain_search.push_back(kSearchDomain1); 926f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart 9323ac6b72d44c446bca88175883ba26b39c5ed817mukesh agrawal EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search)); 94a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_TRUE(base::PathExists(path_)); 95b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart EXPECT_EQ(kExpectedOutput, ReadFile()); 96b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 97b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart EXPECT_TRUE(resolver_->ClearDNS()); 98b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart} 99b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 100b6063942a712bc2825e78dc026a24a5d7b6131fcPaul StewartTEST_F(ResolverTest, Empty) { 101a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_FALSE(base::PathExists(path_)); 102b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 103b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart MockControl control; 1046f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart vector<string> dns_servers; 1056f65c0b387f6dde8113f52745b758ca1c4f349bePaul Stewart vector<string> domain_search; 106b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 10723ac6b72d44c446bca88175883ba26b39c5ed817mukesh agrawal EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search)); 108a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_FALSE(base::PathExists(path_)); 109b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart} 110b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart 1114d5efb7d5d130e3e6e52ab732127a273bcb95261Paul StewartTEST_F(ResolverTest, IgnoredSearchList) { 112a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_FALSE(base::PathExists(path_)); 1134d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart EXPECT_TRUE(resolver_->ClearDNS()); 1144d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart 1154d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart MockControl control; 1164d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart vector<string> dns_servers; 1174d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart vector<string> domain_search; 1184d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart dns_servers.push_back(kNameServer0); 1194d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart dns_servers.push_back(kNameServer1); 1204d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart domain_search.push_back(kSearchDomain0); 1214d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart domain_search.push_back(kSearchDomain1); 1224d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart vector<string> ignored_search; 1234d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart ignored_search.push_back(kSearchDomain0); 1244d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart ignored_search.push_back(kSearchDomain2); 1254d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart resolver_->set_ignored_search_list(ignored_search); 12623ac6b72d44c446bca88175883ba26b39c5ed817mukesh agrawal EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search)); 127a0ddf46e466bd4ba3d20952f0a6988c680c1af14Ben Chan EXPECT_TRUE(base::PathExists(path_)); 1284d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart EXPECT_EQ(kExpectedIgnoredSearchOutput, ReadFile()); 1294d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart 1304d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart EXPECT_TRUE(resolver_->ClearDNS()); 1314d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart} 1324d5efb7d5d130e3e6e52ab732127a273bcb95261Paul Stewart 133b6063942a712bc2825e78dc026a24a5d7b6131fcPaul Stewart} // namespace shill 134