blob: 8ffdab90a985f2ac6e56c7a00b4d364334a2ae1d [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
Albert Chaulk0e1cdea2013-02-27 15:32:55 -080015using base::FilePath;
Paul Stewartb6063942011-08-05 10:17:29 -070016using std::string;
17using std::vector;
18using testing::Test;
19
20namespace shill {
21
22namespace {
23const char kTestDeviceName0[] = "netdev0";
24const char kNameServer0[] = "8.8.8.8";
25const char kNameServer1[] = "8.8.9.9";
26const char kSearchDomain0[] = "chromium.org";
27const char kSearchDomain1[] = "google.com";
Paul Stewart4d5efb72012-09-17 12:24:34 -070028const char kSearchDomain2[] = "crosbug.com";
Paul Stewartb6063942011-08-05 10:17:29 -070029const char kExpectedOutput[] =
30 "nameserver 8.8.8.8\n"
31 "nameserver 8.8.9.9\n"
Thieu Le3bd0faa2012-02-15 15:44:46 -080032 "search chromium.org google.com\n"
mukesh agrawalf01ddd42013-01-31 18:59:42 -080033 "options single-request timeout:1 attempts:5\n";
Paul Stewart4d5efb72012-09-17 12:24:34 -070034const char kExpectedIgnoredSearchOutput[] =
35 "nameserver 8.8.8.8\n"
36 "nameserver 8.8.9.9\n"
37 "search google.com\n"
mukesh agrawalf01ddd42013-01-31 18:59:42 -080038 "options single-request timeout:1 attempts:5\n";
Paul Stewartb6063942011-08-05 10:17:29 -070039} // namespace {}
40
41class ResolverTest : public Test {
42 public:
43 ResolverTest() : resolver_(Resolver::GetInstance()) {}
44
45 virtual void SetUp() {
46 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
47 path_ = temp_dir_.path().Append("resolver");
48 resolver_->set_path(path_);
49 }
50
51 virtual void TearDown() {
52 resolver_->set_path(FilePath("")); // Don't try to save the store.
53 ASSERT_TRUE(temp_dir_.Delete());
54 }
55
56 protected:
57 string ReadFile();
58
Paul Stewart5ad16062013-02-21 18:10:48 -080059 base::ScopedTempDir temp_dir_;
Paul Stewartb6063942011-08-05 10:17:29 -070060 Resolver *resolver_;
61 FilePath path_;
62};
63
64string ResolverTest::ReadFile() {
65 string data;
66 EXPECT_TRUE(file_util::ReadFileToString(resolver_->path_, &data));
67 return data;
68}
69
70TEST_F(ResolverTest, NonEmpty) {
71 EXPECT_FALSE(file_util::PathExists(path_));
72 EXPECT_TRUE(resolver_->ClearDNS());
73
Paul Stewartb6063942011-08-05 10:17:29 -070074 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070075 vector<string> dns_servers;
76 vector<string> domain_search;
77 dns_servers.push_back(kNameServer0);
78 dns_servers.push_back(kNameServer1);
79 domain_search.push_back(kSearchDomain0);
80 domain_search.push_back(kSearchDomain1);
Paul Stewartb6063942011-08-05 10:17:29 -070081
mukesh agrawal23ac6b72013-01-31 18:52:37 -080082 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Paul Stewartb6063942011-08-05 10:17:29 -070083 EXPECT_TRUE(file_util::PathExists(path_));
84 EXPECT_EQ(kExpectedOutput, ReadFile());
85
86 EXPECT_TRUE(resolver_->ClearDNS());
87}
88
89TEST_F(ResolverTest, Empty) {
90 EXPECT_FALSE(file_util::PathExists(path_));
91
Paul Stewartb6063942011-08-05 10:17:29 -070092 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070093 vector<string> dns_servers;
94 vector<string> domain_search;
Paul Stewartb6063942011-08-05 10:17:29 -070095
mukesh agrawal23ac6b72013-01-31 18:52:37 -080096 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Paul Stewartb6063942011-08-05 10:17:29 -070097 EXPECT_FALSE(file_util::PathExists(path_));
98}
99
Paul Stewart4d5efb72012-09-17 12:24:34 -0700100TEST_F(ResolverTest, IgnoredSearchList) {
101 EXPECT_FALSE(file_util::PathExists(path_));
102 EXPECT_TRUE(resolver_->ClearDNS());
103
104 MockControl control;
105 vector<string> dns_servers;
106 vector<string> domain_search;
107 dns_servers.push_back(kNameServer0);
108 dns_servers.push_back(kNameServer1);
109 domain_search.push_back(kSearchDomain0);
110 domain_search.push_back(kSearchDomain1);
111 vector<string> ignored_search;
112 ignored_search.push_back(kSearchDomain0);
113 ignored_search.push_back(kSearchDomain2);
114 resolver_->set_ignored_search_list(ignored_search);
mukesh agrawal23ac6b72013-01-31 18:52:37 -0800115 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Paul Stewart4d5efb72012-09-17 12:24:34 -0700116 EXPECT_TRUE(file_util::PathExists(path_));
117 EXPECT_EQ(kExpectedIgnoredSearchOutput, ReadFile());
118
119 EXPECT_TRUE(resolver_->ClearDNS());
120}
121
Paul Stewartb6063942011-08-05 10:17:29 -0700122} // namespace shill