blob: cabf495d05541d40101587d2a6b2e03df252828d [file] [log] [blame]
Peter Qiuc0beca52015-09-03 11:25:46 -07001//
2// Copyright (C) 2012 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
Paul Stewartb6063942011-08-05 10:17:29 -070016
17#include "shill/resolver.h"
18
Ben Chan11c213f2014-09-05 08:21:06 -070019#include <base/files/file_util.h>
Paul Stewart5ad16062013-02-21 18:10:48 -080020#include <base/files/scoped_temp_dir.h>
Eric Shienbrood3e20a232012-02-16 11:35:56 -050021#include <base/stl_util.h>
Ben Chana0ddf462014-02-06 11:32:42 -080022#include <base/strings/stringprintf.h>
Paul Stewartb6063942011-08-05 10:17:29 -070023#include <gtest/gtest.h>
24
Paul Stewartb6063942011-08-05 10:17:29 -070025#include "shill/mock_control.h"
26
Albert Chaulk0e1cdea2013-02-27 15:32:55 -080027using base::FilePath;
Paul Stewartb6063942011-08-05 10:17:29 -070028using std::string;
29using std::vector;
30using testing::Test;
31
32namespace shill {
33
34namespace {
Paul Stewartb6063942011-08-05 10:17:29 -070035const char kNameServer0[] = "8.8.8.8";
36const char kNameServer1[] = "8.8.9.9";
37const char kSearchDomain0[] = "chromium.org";
38const char kSearchDomain1[] = "google.com";
Paul Stewartee6b3d72013-07-12 16:07:51 -070039const char kSearchDomain2[] = "crbug.com";
Paul Stewartb6063942011-08-05 10:17:29 -070040const char kExpectedOutput[] =
41 "nameserver 8.8.8.8\n"
42 "nameserver 8.8.9.9\n"
Thieu Le3bd0faa2012-02-15 15:44:46 -080043 "search chromium.org google.com\n"
mukesh agrawalf01ddd42013-01-31 18:59:42 -080044 "options single-request timeout:1 attempts:5\n";
Paul Stewart4d5efb72012-09-17 12:24:34 -070045const char kExpectedIgnoredSearchOutput[] =
46 "nameserver 8.8.8.8\n"
47 "nameserver 8.8.9.9\n"
48 "search google.com\n"
mukesh agrawalf01ddd42013-01-31 18:59:42 -080049 "options single-request timeout:1 attempts:5\n";
Alex Vakulenko8a532292014-06-16 17:18:44 -070050} // namespace
Paul Stewartb6063942011-08-05 10:17:29 -070051
52class ResolverTest : public Test {
53 public:
54 ResolverTest() : resolver_(Resolver::GetInstance()) {}
55
56 virtual void SetUp() {
57 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
58 path_ = temp_dir_.path().Append("resolver");
59 resolver_->set_path(path_);
60 }
61
62 virtual void TearDown() {
63 resolver_->set_path(FilePath("")); // Don't try to save the store.
64 ASSERT_TRUE(temp_dir_.Delete());
65 }
66
67 protected:
68 string ReadFile();
69
Paul Stewart5ad16062013-02-21 18:10:48 -080070 base::ScopedTempDir temp_dir_;
Paul Stewart3b30ca52015-06-16 13:13:10 -070071 Resolver* resolver_;
Paul Stewartb6063942011-08-05 10:17:29 -070072 FilePath path_;
73};
74
75string ResolverTest::ReadFile() {
76 string data;
Ben Chana0ddf462014-02-06 11:32:42 -080077 EXPECT_TRUE(base::ReadFileToString(resolver_->path_, &data));
Paul Stewartb6063942011-08-05 10:17:29 -070078 return data;
79}
80
81TEST_F(ResolverTest, NonEmpty) {
Ben Chana0ddf462014-02-06 11:32:42 -080082 EXPECT_FALSE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -070083 EXPECT_TRUE(resolver_->ClearDNS());
84
Paul Stewartb6063942011-08-05 10:17:29 -070085 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070086 vector<string> dns_servers;
87 vector<string> domain_search;
88 dns_servers.push_back(kNameServer0);
89 dns_servers.push_back(kNameServer1);
90 domain_search.push_back(kSearchDomain0);
91 domain_search.push_back(kSearchDomain1);
Paul Stewartb6063942011-08-05 10:17:29 -070092
mukesh agrawal23ac6b72013-01-31 18:52:37 -080093 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Ben Chana0ddf462014-02-06 11:32:42 -080094 EXPECT_TRUE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -070095 EXPECT_EQ(kExpectedOutput, ReadFile());
96
97 EXPECT_TRUE(resolver_->ClearDNS());
98}
99
100TEST_F(ResolverTest, Empty) {
Ben Chana0ddf462014-02-06 11:32:42 -0800101 EXPECT_FALSE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -0700102
Paul Stewartb6063942011-08-05 10:17:29 -0700103 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700104 vector<string> dns_servers;
105 vector<string> domain_search;
Paul Stewartb6063942011-08-05 10:17:29 -0700106
mukesh agrawal23ac6b72013-01-31 18:52:37 -0800107 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Ben Chana0ddf462014-02-06 11:32:42 -0800108 EXPECT_FALSE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -0700109}
110
Paul Stewart4d5efb72012-09-17 12:24:34 -0700111TEST_F(ResolverTest, IgnoredSearchList) {
Ben Chana0ddf462014-02-06 11:32:42 -0800112 EXPECT_FALSE(base::PathExists(path_));
Paul Stewart4d5efb72012-09-17 12:24:34 -0700113 EXPECT_TRUE(resolver_->ClearDNS());
114
115 MockControl control;
116 vector<string> dns_servers;
117 vector<string> domain_search;
118 dns_servers.push_back(kNameServer0);
119 dns_servers.push_back(kNameServer1);
120 domain_search.push_back(kSearchDomain0);
121 domain_search.push_back(kSearchDomain1);
122 vector<string> ignored_search;
123 ignored_search.push_back(kSearchDomain0);
124 ignored_search.push_back(kSearchDomain2);
125 resolver_->set_ignored_search_list(ignored_search);
mukesh agrawal23ac6b72013-01-31 18:52:37 -0800126 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Ben Chana0ddf462014-02-06 11:32:42 -0800127 EXPECT_TRUE(base::PathExists(path_));
Paul Stewart4d5efb72012-09-17 12:24:34 -0700128 EXPECT_EQ(kExpectedIgnoredSearchOutput, ReadFile());
129
130 EXPECT_TRUE(resolver_->ClearDNS());
131}
132
Paul Stewartb6063942011-08-05 10:17:29 -0700133} // namespace shill