blob: 0f9d6ef363ca40792e82522b44bb52ed97d89ccb [file] [log] [blame]
Thieu Le3bd0faa2012-02-15 15:44:46 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Paul Stewartb6063942011-08-05 10:17:29 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "shill/resolver.h"
6
7#include <base/file_util.h>
Paul Stewart5ad16062013-02-21 18:10:48 -08008#include <base/files/scoped_temp_dir.h>
Eric Shienbrood3e20a232012-02-16 11:35:56 -05009#include <base/stl_util.h>
Paul Stewartb6063942011-08-05 10:17:29 -070010#include <base/stringprintf.h>
Paul Stewartb6063942011-08-05 10:17:29 -070011#include <gtest/gtest.h>
12
Paul Stewartb6063942011-08-05 10:17:29 -070013#include "shill/mock_control.h"
14
15using std::string;
16using std::vector;
17using testing::Test;
18
19namespace shill {
20
21namespace {
22const char kTestDeviceName0[] = "netdev0";
23const char kNameServer0[] = "8.8.8.8";
24const char kNameServer1[] = "8.8.9.9";
25const char kSearchDomain0[] = "chromium.org";
26const char kSearchDomain1[] = "google.com";
Paul Stewart4d5efb72012-09-17 12:24:34 -070027const char kSearchDomain2[] = "crosbug.com";
Paul Stewartb6063942011-08-05 10:17:29 -070028const char kExpectedOutput[] =
29 "nameserver 8.8.8.8\n"
30 "nameserver 8.8.9.9\n"
Thieu Le3bd0faa2012-02-15 15:44:46 -080031 "search chromium.org google.com\n"
Paul Stewartbf667612012-06-29 14:49:54 -070032 "options single-request timeout:1 attempts:3\n";
33const char kExpectedShortTimeoutOutput[] =
34 "nameserver 8.8.8.8\n"
35 "nameserver 8.8.9.9\n"
36 "search chromium.org google.com\n"
37 "options single-request timeout-ms:300 attempts:15\n";
Paul Stewart4d5efb72012-09-17 12:24:34 -070038const char kExpectedIgnoredSearchOutput[] =
39 "nameserver 8.8.8.8\n"
40 "nameserver 8.8.9.9\n"
41 "search google.com\n"
42 "options single-request timeout:1 attempts:3\n";
Paul Stewartb6063942011-08-05 10:17:29 -070043} // namespace {}
44
45class ResolverTest : public Test {
46 public:
47 ResolverTest() : resolver_(Resolver::GetInstance()) {}
48
49 virtual void SetUp() {
50 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
51 path_ = temp_dir_.path().Append("resolver");
52 resolver_->set_path(path_);
53 }
54
55 virtual void TearDown() {
56 resolver_->set_path(FilePath("")); // Don't try to save the store.
57 ASSERT_TRUE(temp_dir_.Delete());
58 }
59
60 protected:
61 string ReadFile();
62
Paul Stewart5ad16062013-02-21 18:10:48 -080063 base::ScopedTempDir temp_dir_;
Paul Stewartb6063942011-08-05 10:17:29 -070064 Resolver *resolver_;
65 FilePath path_;
66};
67
68string ResolverTest::ReadFile() {
69 string data;
70 EXPECT_TRUE(file_util::ReadFileToString(resolver_->path_, &data));
71 return data;
72}
73
74TEST_F(ResolverTest, NonEmpty) {
75 EXPECT_FALSE(file_util::PathExists(path_));
76 EXPECT_TRUE(resolver_->ClearDNS());
77
Paul Stewartb6063942011-08-05 10:17:29 -070078 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070079 vector<string> dns_servers;
80 vector<string> domain_search;
81 dns_servers.push_back(kNameServer0);
82 dns_servers.push_back(kNameServer1);
83 domain_search.push_back(kSearchDomain0);
84 domain_search.push_back(kSearchDomain1);
Paul Stewartb6063942011-08-05 10:17:29 -070085
Paul Stewart6f65c0b2012-09-11 14:57:32 -070086 EXPECT_TRUE(resolver_->SetDNSFromLists(
87 dns_servers, domain_search, Resolver::kDefaultTimeout));
Paul Stewartb6063942011-08-05 10:17:29 -070088 EXPECT_TRUE(file_util::PathExists(path_));
89 EXPECT_EQ(kExpectedOutput, ReadFile());
90
91 EXPECT_TRUE(resolver_->ClearDNS());
92}
93
Paul Stewartbf667612012-06-29 14:49:54 -070094TEST_F(ResolverTest, ShortTimeout) {
95 EXPECT_FALSE(file_util::PathExists(path_));
96 EXPECT_TRUE(resolver_->ClearDNS());
97
Paul Stewartbf667612012-06-29 14:49:54 -070098 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070099 vector<string> dns_servers;
100 vector<string> domain_search;
101 dns_servers.push_back(kNameServer0);
102 dns_servers.push_back(kNameServer1);
103 domain_search.push_back(kSearchDomain0);
104 domain_search.push_back(kSearchDomain1);
Paul Stewartbf667612012-06-29 14:49:54 -0700105
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700106 EXPECT_TRUE(resolver_->SetDNSFromLists(
107 dns_servers, domain_search, Resolver::kShortTimeout));
Paul Stewartbf667612012-06-29 14:49:54 -0700108 EXPECT_TRUE(file_util::PathExists(path_));
109 EXPECT_EQ(kExpectedShortTimeoutOutput, ReadFile());
110
111 EXPECT_TRUE(resolver_->ClearDNS());
112}
113
Paul Stewartb6063942011-08-05 10:17:29 -0700114TEST_F(ResolverTest, Empty) {
115 EXPECT_FALSE(file_util::PathExists(path_));
116
Paul Stewartb6063942011-08-05 10:17:29 -0700117 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700118 vector<string> dns_servers;
119 vector<string> domain_search;
Paul Stewartb6063942011-08-05 10:17:29 -0700120
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700121 EXPECT_TRUE(resolver_->SetDNSFromLists(
122 dns_servers, domain_search, Resolver::kDefaultTimeout));
Paul Stewartb6063942011-08-05 10:17:29 -0700123 EXPECT_FALSE(file_util::PathExists(path_));
124}
125
Paul Stewart4d5efb72012-09-17 12:24:34 -0700126TEST_F(ResolverTest, IgnoredSearchList) {
127 EXPECT_FALSE(file_util::PathExists(path_));
128 EXPECT_TRUE(resolver_->ClearDNS());
129
130 MockControl control;
131 vector<string> dns_servers;
132 vector<string> domain_search;
133 dns_servers.push_back(kNameServer0);
134 dns_servers.push_back(kNameServer1);
135 domain_search.push_back(kSearchDomain0);
136 domain_search.push_back(kSearchDomain1);
137 vector<string> ignored_search;
138 ignored_search.push_back(kSearchDomain0);
139 ignored_search.push_back(kSearchDomain2);
140 resolver_->set_ignored_search_list(ignored_search);
141 EXPECT_TRUE(resolver_->SetDNSFromLists(
142 dns_servers, domain_search, Resolver::kDefaultTimeout));
143 EXPECT_TRUE(file_util::PathExists(path_));
144 EXPECT_EQ(kExpectedIgnoredSearchOutput, ReadFile());
145
146 EXPECT_TRUE(resolver_->ClearDNS());
147}
148
Paul Stewartb6063942011-08-05 10:17:29 -0700149} // namespace shill