blob: 40250055b5471df0ee4ec483460bf1486ced0f0f [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
Ben Chan11c213f2014-09-05 08:21:06 -07007#include <base/files/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>
Ben Chana0ddf462014-02-06 11:32:42 -080010#include <base/strings/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 {
Paul Stewartb6063942011-08-05 10:17:29 -070023const char kNameServer0[] = "8.8.8.8";
24const char kNameServer1[] = "8.8.9.9";
25const char kSearchDomain0[] = "chromium.org";
26const char kSearchDomain1[] = "google.com";
Paul Stewartee6b3d72013-07-12 16:07:51 -070027const char kSearchDomain2[] = "crbug.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"
mukesh agrawalf01ddd42013-01-31 18:59:42 -080032 "options single-request timeout:1 attempts:5\n";
Paul Stewart4d5efb72012-09-17 12:24:34 -070033const char kExpectedIgnoredSearchOutput[] =
34 "nameserver 8.8.8.8\n"
35 "nameserver 8.8.9.9\n"
36 "search google.com\n"
mukesh agrawalf01ddd42013-01-31 18:59:42 -080037 "options single-request timeout:1 attempts:5\n";
Alex Vakulenko8a532292014-06-16 17:18:44 -070038} // namespace
Paul Stewartb6063942011-08-05 10:17:29 -070039
40class ResolverTest : public Test {
41 public:
42 ResolverTest() : resolver_(Resolver::GetInstance()) {}
43
44 virtual void SetUp() {
45 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
46 path_ = temp_dir_.path().Append("resolver");
47 resolver_->set_path(path_);
48 }
49
50 virtual void TearDown() {
51 resolver_->set_path(FilePath("")); // Don't try to save the store.
52 ASSERT_TRUE(temp_dir_.Delete());
53 }
54
55 protected:
56 string ReadFile();
57
Paul Stewart5ad16062013-02-21 18:10:48 -080058 base::ScopedTempDir temp_dir_;
Paul Stewart3b30ca52015-06-16 13:13:10 -070059 Resolver* resolver_;
Paul Stewartb6063942011-08-05 10:17:29 -070060 FilePath path_;
61};
62
63string ResolverTest::ReadFile() {
64 string data;
Ben Chana0ddf462014-02-06 11:32:42 -080065 EXPECT_TRUE(base::ReadFileToString(resolver_->path_, &data));
Paul Stewartb6063942011-08-05 10:17:29 -070066 return data;
67}
68
69TEST_F(ResolverTest, NonEmpty) {
Ben Chana0ddf462014-02-06 11:32:42 -080070 EXPECT_FALSE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -070071 EXPECT_TRUE(resolver_->ClearDNS());
72
Paul Stewartb6063942011-08-05 10:17:29 -070073 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070074 vector<string> dns_servers;
75 vector<string> domain_search;
76 dns_servers.push_back(kNameServer0);
77 dns_servers.push_back(kNameServer1);
78 domain_search.push_back(kSearchDomain0);
79 domain_search.push_back(kSearchDomain1);
Paul Stewartb6063942011-08-05 10:17:29 -070080
mukesh agrawal23ac6b72013-01-31 18:52:37 -080081 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Ben Chana0ddf462014-02-06 11:32:42 -080082 EXPECT_TRUE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -070083 EXPECT_EQ(kExpectedOutput, ReadFile());
84
85 EXPECT_TRUE(resolver_->ClearDNS());
86}
87
88TEST_F(ResolverTest, Empty) {
Ben Chana0ddf462014-02-06 11:32:42 -080089 EXPECT_FALSE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -070090
Paul Stewartb6063942011-08-05 10:17:29 -070091 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070092 vector<string> dns_servers;
93 vector<string> domain_search;
Paul Stewartb6063942011-08-05 10:17:29 -070094
mukesh agrawal23ac6b72013-01-31 18:52:37 -080095 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Ben Chana0ddf462014-02-06 11:32:42 -080096 EXPECT_FALSE(base::PathExists(path_));
Paul Stewartb6063942011-08-05 10:17:29 -070097}
98
Paul Stewart4d5efb72012-09-17 12:24:34 -070099TEST_F(ResolverTest, IgnoredSearchList) {
Ben Chana0ddf462014-02-06 11:32:42 -0800100 EXPECT_FALSE(base::PathExists(path_));
Paul Stewart4d5efb72012-09-17 12:24:34 -0700101 EXPECT_TRUE(resolver_->ClearDNS());
102
103 MockControl control;
104 vector<string> dns_servers;
105 vector<string> domain_search;
106 dns_servers.push_back(kNameServer0);
107 dns_servers.push_back(kNameServer1);
108 domain_search.push_back(kSearchDomain0);
109 domain_search.push_back(kSearchDomain1);
110 vector<string> ignored_search;
111 ignored_search.push_back(kSearchDomain0);
112 ignored_search.push_back(kSearchDomain2);
113 resolver_->set_ignored_search_list(ignored_search);
mukesh agrawal23ac6b72013-01-31 18:52:37 -0800114 EXPECT_TRUE(resolver_->SetDNSFromLists(dns_servers, domain_search));
Ben Chana0ddf462014-02-06 11:32:42 -0800115 EXPECT_TRUE(base::PathExists(path_));
Paul Stewart4d5efb72012-09-17 12:24:34 -0700116 EXPECT_EQ(kExpectedIgnoredSearchOutput, ReadFile());
117
118 EXPECT_TRUE(resolver_->ClearDNS());
119}
120
Paul Stewartb6063942011-08-05 10:17:29 -0700121} // namespace shill