1 // Copyright (c) 2010 The Chromium 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 "net/base/host_mapping_rules.h" 6 7 #include "net/base/host_port_pair.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace net { 11 12 namespace { 13 14 TEST(HostMappingRulesTest, SetRulesFromString) { 15 HostMappingRules rules; 16 rules.SetRulesFromString( 17 "map *.com baz , map *.net bar:60, EXCLUDE *.foo.com"); 18 19 HostPortPair host_port("test", 1234); 20 EXPECT_FALSE(rules.RewriteHost(&host_port)); 21 EXPECT_EQ("test", host_port.host()); 22 EXPECT_EQ(1234u, host_port.port()); 23 24 host_port = HostPortPair("chrome.net", 80); 25 EXPECT_TRUE(rules.RewriteHost(&host_port)); 26 EXPECT_EQ("bar", host_port.host()); 27 EXPECT_EQ(60u, host_port.port()); 28 29 host_port = HostPortPair("crack.com", 80); 30 EXPECT_TRUE(rules.RewriteHost(&host_port)); 31 EXPECT_EQ("baz", host_port.host()); 32 EXPECT_EQ(80u, host_port.port()); 33 34 host_port = HostPortPair("wtf.foo.com", 666); 35 EXPECT_FALSE(rules.RewriteHost(&host_port)); 36 EXPECT_EQ("wtf.foo.com", host_port.host()); 37 EXPECT_EQ(666u, host_port.port()); 38 } 39 40 TEST(HostMappingRulesTest, PortSpecificMatching) { 41 HostMappingRules rules; 42 rules.SetRulesFromString( 43 "map *.com:80 baz:111 , map *.com:443 blat:333, EXCLUDE *.foo.com"); 44 45 // No match 46 HostPortPair host_port("test.com", 1234); 47 EXPECT_FALSE(rules.RewriteHost(&host_port)); 48 EXPECT_EQ("test.com", host_port.host()); 49 EXPECT_EQ(1234u, host_port.port()); 50 51 // Match port 80 52 host_port = HostPortPair("crack.com", 80); 53 EXPECT_TRUE(rules.RewriteHost(&host_port)); 54 EXPECT_EQ("baz", host_port.host()); 55 EXPECT_EQ(111u, host_port.port()); 56 57 // Match port 443 58 host_port = HostPortPair("wtf.com", 443); 59 EXPECT_TRUE(rules.RewriteHost(&host_port)); 60 EXPECT_EQ("blat", host_port.host()); 61 EXPECT_EQ(333u, host_port.port()); 62 63 // Match port 443, but excluded. 64 host_port = HostPortPair("wtf.foo.com", 443); 65 EXPECT_FALSE(rules.RewriteHost(&host_port)); 66 EXPECT_EQ("wtf.foo.com", host_port.host()); 67 EXPECT_EQ(443u, host_port.port()); 68 } 69 70 // Parsing bad rules should silently discard the rule (and never crash). 71 TEST(HostMappingRulesTest, ParseInvalidRules) { 72 HostMappingRules rules; 73 74 EXPECT_FALSE(rules.AddRuleFromString("xyz")); 75 EXPECT_FALSE(rules.AddRuleFromString("")); 76 EXPECT_FALSE(rules.AddRuleFromString(" ")); 77 EXPECT_FALSE(rules.AddRuleFromString("EXCLUDE")); 78 EXPECT_FALSE(rules.AddRuleFromString("EXCLUDE foo bar")); 79 EXPECT_FALSE(rules.AddRuleFromString("INCLUDE")); 80 EXPECT_FALSE(rules.AddRuleFromString("INCLUDE x")); 81 EXPECT_FALSE(rules.AddRuleFromString("INCLUDE x :10")); 82 } 83 84 } // namespace 85 86 } // namespace net 87