blob: 2ede6549616c42c6b9bb4d873f5867acb55f2caf [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>
Eric Shienbrood3e20a232012-02-16 11:35:56 -05008#include <base/scoped_temp_dir.h>
9#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";
27const char kExpectedOutput[] =
28 "nameserver 8.8.8.8\n"
29 "nameserver 8.8.9.9\n"
Thieu Le3bd0faa2012-02-15 15:44:46 -080030 "search chromium.org google.com\n"
Paul Stewartbf667612012-06-29 14:49:54 -070031 "options single-request timeout:1 attempts:3\n";
32const char kExpectedShortTimeoutOutput[] =
33 "nameserver 8.8.8.8\n"
34 "nameserver 8.8.9.9\n"
35 "search chromium.org google.com\n"
36 "options single-request timeout-ms:300 attempts:15\n";
Paul Stewartb6063942011-08-05 10:17:29 -070037} // namespace {}
38
39class ResolverTest : public Test {
40 public:
41 ResolverTest() : resolver_(Resolver::GetInstance()) {}
42
43 virtual void SetUp() {
44 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
45 path_ = temp_dir_.path().Append("resolver");
46 resolver_->set_path(path_);
47 }
48
49 virtual void TearDown() {
50 resolver_->set_path(FilePath("")); // Don't try to save the store.
51 ASSERT_TRUE(temp_dir_.Delete());
52 }
53
54 protected:
55 string ReadFile();
56
57 ScopedTempDir temp_dir_;
58 Resolver *resolver_;
59 FilePath path_;
60};
61
62string ResolverTest::ReadFile() {
63 string data;
64 EXPECT_TRUE(file_util::ReadFileToString(resolver_->path_, &data));
65 return data;
66}
67
68TEST_F(ResolverTest, NonEmpty) {
69 EXPECT_FALSE(file_util::PathExists(path_));
70 EXPECT_TRUE(resolver_->ClearDNS());
71
Paul Stewartb6063942011-08-05 10:17:29 -070072 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070073 vector<string> dns_servers;
74 vector<string> domain_search;
75 dns_servers.push_back(kNameServer0);
76 dns_servers.push_back(kNameServer1);
77 domain_search.push_back(kSearchDomain0);
78 domain_search.push_back(kSearchDomain1);
Paul Stewartb6063942011-08-05 10:17:29 -070079
Paul Stewart6f65c0b2012-09-11 14:57:32 -070080 EXPECT_TRUE(resolver_->SetDNSFromLists(
81 dns_servers, domain_search, Resolver::kDefaultTimeout));
Paul Stewartb6063942011-08-05 10:17:29 -070082 EXPECT_TRUE(file_util::PathExists(path_));
83 EXPECT_EQ(kExpectedOutput, ReadFile());
84
85 EXPECT_TRUE(resolver_->ClearDNS());
86}
87
Paul Stewartbf667612012-06-29 14:49:54 -070088TEST_F(ResolverTest, ShortTimeout) {
89 EXPECT_FALSE(file_util::PathExists(path_));
90 EXPECT_TRUE(resolver_->ClearDNS());
91
Paul Stewartbf667612012-06-29 14:49:54 -070092 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -070093 vector<string> dns_servers;
94 vector<string> domain_search;
95 dns_servers.push_back(kNameServer0);
96 dns_servers.push_back(kNameServer1);
97 domain_search.push_back(kSearchDomain0);
98 domain_search.push_back(kSearchDomain1);
Paul Stewartbf667612012-06-29 14:49:54 -070099
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700100 EXPECT_TRUE(resolver_->SetDNSFromLists(
101 dns_servers, domain_search, Resolver::kShortTimeout));
Paul Stewartbf667612012-06-29 14:49:54 -0700102 EXPECT_TRUE(file_util::PathExists(path_));
103 EXPECT_EQ(kExpectedShortTimeoutOutput, ReadFile());
104
105 EXPECT_TRUE(resolver_->ClearDNS());
106}
107
Paul Stewartb6063942011-08-05 10:17:29 -0700108TEST_F(ResolverTest, Empty) {
109 EXPECT_FALSE(file_util::PathExists(path_));
110
Paul Stewartb6063942011-08-05 10:17:29 -0700111 MockControl control;
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700112 vector<string> dns_servers;
113 vector<string> domain_search;
Paul Stewartb6063942011-08-05 10:17:29 -0700114
Paul Stewart6f65c0b2012-09-11 14:57:32 -0700115 EXPECT_TRUE(resolver_->SetDNSFromLists(
116 dns_servers, domain_search, Resolver::kDefaultTimeout));
Paul Stewartb6063942011-08-05 10:17:29 -0700117 EXPECT_FALSE(file_util::PathExists(path_));
118}
119
120} // namespace shill