blob: 4635ce0a03264fdd1c23dbd29d0924ac2f8ec630 [file] [log] [blame]
Ben Chanc46c4552013-06-10 18:55:13 -07001// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "mist/config_loader.h"
6
7#include <string>
8
9#include <base/file_path.h>
10#include <base/file_util.h>
11#include <base/files/scoped_temp_dir.h>
12#include <gtest/gtest.h>
13
14#include "mist/proto_bindings/config.pb.h"
15#include "mist/proto_bindings/usb_modem_info.pb.h"
16
17using base::FilePath;
18using std::string;
19
20namespace mist {
21
22namespace {
23
24const char kTestConfigFileContent[] =
25 "# Test config\n"
26 "\n"
27 "# USB modem 1\n"
28 "usb_modem_info {\n"
29 " initial_usb_id {\n"
30 " vendor_id: 0x2345\n"
31 " product_id: 0x7890\n"
32 " }\n"
33 "}\n"
34 "# USB modem 2\n"
35 "usb_modem_info {\n"
36 " initial_usb_id { vendor_id: 0x1234 product_id: 0xabcd }\n"
37 " final_usb_id { vendor_id: 0x5678 product_id: 0xfedc }\n"
38 " final_usb_id { vendor_id: 0x3210 product_id: 0x9876 }\n"
39 " usb_message: \"0123456789abcdef\"\n"
40 "}\n";
41
42} // namespace
43
44class ConfigLoaderTest : public testing::Test {
45 protected:
46 bool CreateConfigFileInDir(const string &content, const FilePath &dir,
47 FilePath *config_file) {
48 if (!file_util::CreateTemporaryFileInDir(dir, config_file))
49 return false;
50
51 if (file_util::WriteFile(*config_file, content.data(), content.size()) !=
52 static_cast<int>(content.size())) {
53 return false;
54 }
55
56 return true;
57 }
58
59 ConfigLoader config_loader_;
60 base::ScopedTempDir temp_dir_;
61};
62
63TEST_F(ConfigLoaderTest, GetUsbModemInfo) {
64 // No config is loaded.
65 EXPECT_TRUE(config_loader_.GetUsbModemInfo(0x1111, 0x2222) == NULL);
66
67 base::FilePath config_file;
68 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
69 ASSERT_TRUE(CreateConfigFileInDir(kTestConfigFileContent, temp_dir_.path(),
70 &config_file));
71
72 EXPECT_TRUE(config_loader_.LoadConfig(config_file));
73
74 EXPECT_TRUE(config_loader_.GetUsbModemInfo(0x1111, 0x2222) == NULL);
75
76 const UsbModemInfo *usb_modem_info1 =
77 config_loader_.GetUsbModemInfo(0x2345, 0x7890);
78 EXPECT_TRUE(usb_modem_info1 != NULL);
79 EXPECT_EQ(0x2345, usb_modem_info1->initial_usb_id().vendor_id());
80 EXPECT_EQ(0x7890, usb_modem_info1->initial_usb_id().product_id());
81
82 const UsbModemInfo *usb_modem_info2 =
83 config_loader_.GetUsbModemInfo(0x1234, 0xabcd);
84 EXPECT_TRUE(usb_modem_info2 != NULL);
85 EXPECT_EQ(0x1234, usb_modem_info2->initial_usb_id().vendor_id());
86 EXPECT_EQ(0xabcd, usb_modem_info2->initial_usb_id().product_id());
87}
88
89TEST_F(ConfigLoaderTest, LoadEmptyConfigFile) {
90 base::FilePath config_file;
91 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
92 ASSERT_TRUE(CreateConfigFileInDir("", temp_dir_.path(), &config_file));
93
94 EXPECT_TRUE(config_loader_.LoadConfig(config_file));
95 Config *config = config_loader_.config_.get();
96 EXPECT_TRUE(config != NULL);
97 EXPECT_EQ(0, config->usb_modem_info_size());
98}
99
100TEST_F(ConfigLoaderTest, LoadInvalidConfigFile) {
101 base::FilePath config_file;
102 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
103 ASSERT_TRUE(CreateConfigFileInDir("<invalid config>", temp_dir_.path(),
104 &config_file));
105
106 EXPECT_FALSE(config_loader_.LoadConfig(config_file));
107 EXPECT_TRUE(config_loader_.config_.get() == NULL);
108}
109
110TEST_F(ConfigLoaderTest, LoadNonExistentConfigFile) {
111 EXPECT_FALSE(config_loader_.LoadConfig(FilePath("/non-existent-file")));
112 EXPECT_TRUE(config_loader_.config_.get() == NULL);
113}
114
115TEST_F(ConfigLoaderTest, LoadValidConfigFile) {
116 base::FilePath config_file;
117 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
118 ASSERT_TRUE(CreateConfigFileInDir(kTestConfigFileContent, temp_dir_.path(),
119 &config_file));
120
121 EXPECT_TRUE(config_loader_.LoadConfig(config_file));
122 Config *config = config_loader_.config_.get();
123 EXPECT_TRUE(config != NULL);
124 EXPECT_EQ(2, config->usb_modem_info_size());
125
126 const UsbModemInfo& usb_modem_info1 = config->usb_modem_info(0);
127 EXPECT_EQ(0x2345, usb_modem_info1.initial_usb_id().vendor_id());
128 EXPECT_EQ(0x7890, usb_modem_info1.initial_usb_id().product_id());
129
130 const UsbModemInfo& usb_modem_info2 = config->usb_modem_info(1);
131 EXPECT_EQ(0x1234, usb_modem_info2.initial_usb_id().vendor_id());
132 EXPECT_EQ(0xabcd, usb_modem_info2.initial_usb_id().product_id());
133}
134
135} // namespace mist