1 // 2 // Copyright (C) 2013 The Android Open Source Project 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 #include "shill/ppp_device.h" 18 19 #include <map> 20 #include <string> 21 22 #include <gtest/gtest.h> 23 24 #include "shill/metrics.h" 25 #include "shill/mock_control.h" 26 #include "shill/mock_metrics.h" 27 #include "shill/mock_ppp_device.h" 28 29 using std::map; 30 using std::string; 31 32 namespace shill { 33 34 // TODO(quiche): Add test for UpdateIPConfigFromPPP. crbug.com/266404 35 36 TEST(PPPDeviceTest, GetInterfaceName) { 37 map<string, string> config; 38 config[kPPPInterfaceName] = "ppp0"; 39 config["foo"] = "bar"; 40 EXPECT_EQ("ppp0", PPPDevice::GetInterfaceName(config)); 41 } 42 43 TEST(PPPDeviceTest, ParseIPConfiguration) { 44 MockControl control; 45 MockMetrics metrics(nullptr); 46 scoped_refptr<PPPDevice> device = new PPPDevice(&control, nullptr, &metrics, 47 nullptr, "test0", 0); 48 49 map<string, string> config; 50 config[kPPPInternalIP4Address] = "4.5.6.7"; 51 config[kPPPExternalIP4Address] = "33.44.55.66"; 52 config[kPPPGatewayAddress] = "192.168.1.1"; 53 config[kPPPDNS1] = "1.1.1.1"; 54 config[kPPPDNS2] = "2.2.2.2"; 55 config[kPPPInterfaceName] = "ppp0"; 56 config[kPPPLNSAddress] = "99.88.77.66"; 57 config[kPPPMRU] = "1492"; 58 config["foo"] = "bar"; // Unrecognized keys don't cause crash. 59 EXPECT_CALL(metrics, SendSparseToUMA(Metrics::kMetricPPPMTUValue, 1492)); 60 IPConfig::Properties props = device->ParseIPConfiguration("in-test", config); 61 EXPECT_EQ(IPAddress::kFamilyIPv4, props.address_family); 62 EXPECT_EQ(IPAddress::GetMaxPrefixLength(IPAddress::kFamilyIPv4), 63 props.subnet_prefix); 64 EXPECT_EQ("4.5.6.7", props.address); 65 EXPECT_EQ("33.44.55.66", props.peer_address); 66 EXPECT_EQ("192.168.1.1", props.gateway); 67 ASSERT_EQ(2, props.dns_servers.size()); 68 EXPECT_EQ("1.1.1.1", props.dns_servers[0]); 69 EXPECT_EQ("2.2.2.2", props.dns_servers[1]); 70 EXPECT_EQ("99.88.77.66/32", props.exclusion_list[0]); 71 EXPECT_EQ(1, props.exclusion_list.size()); 72 EXPECT_EQ(1492, props.mtu); 73 74 // No gateway specified. 75 config.erase(kPPPGatewayAddress); 76 EXPECT_CALL(metrics, SendSparseToUMA(Metrics::kMetricPPPMTUValue, 1492)); 77 IPConfig::Properties props2 = device->ParseIPConfiguration("in-test", config); 78 EXPECT_EQ("33.44.55.66", props2.gateway); 79 } 80 81 } // namespace shill 82