1// Copyright 2014 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 "chromeos/network/network_type_pattern.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8#include "third_party/cros_system_api/dbus/service_constants.h"
9
10namespace chromeos {
11
12namespace {
13
14class NetworkTypePatternTest : public testing::Test {
15 public:
16  NetworkTypePatternTest()
17      : cellular_(NetworkTypePattern::Cellular()),
18        default_(NetworkTypePattern::Default()),
19        ethernet_(NetworkTypePattern::Ethernet()),
20        mobile_(NetworkTypePattern::Mobile()),
21        non_virtual_(NetworkTypePattern::NonVirtual()),
22        wimax_(NetworkTypePattern::Wimax()),
23        wireless_(NetworkTypePattern::Wireless()) {}
24
25  bool MatchesPattern(const NetworkTypePattern& a,
26                      const NetworkTypePattern& b) {
27    // Verify that NetworkTypePattern::MatchesPattern is symmetric.
28    EXPECT_TRUE(a.MatchesPattern(b) == b.MatchesPattern(a));
29    return a.MatchesPattern(b);
30  }
31
32 protected:
33  const NetworkTypePattern cellular_;
34  const NetworkTypePattern default_;
35  const NetworkTypePattern ethernet_;
36  const NetworkTypePattern mobile_;
37  const NetworkTypePattern non_virtual_;
38  const NetworkTypePattern wimax_;
39  const NetworkTypePattern wireless_;
40};
41
42}  // namespace
43
44TEST_F(NetworkTypePatternTest, MatchesType) {
45  EXPECT_TRUE(mobile_.MatchesType(shill::kTypeCellular));
46  EXPECT_TRUE(mobile_.MatchesType(shill::kTypeWimax));
47  EXPECT_FALSE(mobile_.MatchesType(shill::kTypeWifi));
48
49  EXPECT_TRUE(wireless_.MatchesType(shill::kTypeWifi));
50  EXPECT_TRUE(wireless_.MatchesType(shill::kTypeCellular));
51  EXPECT_TRUE(wireless_.MatchesType(shill::kTypeWimax));
52  EXPECT_FALSE(wireless_.MatchesType(shill::kTypeEthernet));
53}
54
55TEST_F(NetworkTypePatternTest, MatchesPattern) {
56  // Each pair of {Mobile, Wireless, Cellular} is matching. Matching is
57  // reflexive and symmetric (checked in MatchesPattern).
58  EXPECT_TRUE(MatchesPattern(mobile_, mobile_));
59  EXPECT_TRUE(MatchesPattern(wireless_, wireless_));
60  EXPECT_TRUE(MatchesPattern(cellular_, cellular_));
61
62  EXPECT_TRUE(MatchesPattern(mobile_, wireless_));
63  EXPECT_TRUE(MatchesPattern(mobile_, cellular_));
64  EXPECT_TRUE(MatchesPattern(wireless_, cellular_));
65
66  // Cellular matches NonVirtual. NonVirtual matches Ethernet. But Cellular
67  // doesn't match Ethernet.
68  EXPECT_TRUE(MatchesPattern(cellular_, non_virtual_));
69  EXPECT_TRUE(MatchesPattern(non_virtual_, ethernet_));
70  EXPECT_FALSE(MatchesPattern(cellular_, ethernet_));
71
72  // Default matches anything.
73  EXPECT_TRUE(MatchesPattern(default_, default_));
74  EXPECT_TRUE(MatchesPattern(default_, non_virtual_));
75  EXPECT_TRUE(MatchesPattern(default_, cellular_));
76}
77
78TEST_F(NetworkTypePatternTest, Equals) {
79  EXPECT_TRUE(mobile_.Equals(mobile_));
80  EXPECT_FALSE(mobile_.Equals(cellular_));
81  EXPECT_FALSE(cellular_.Equals(mobile_));
82}
83
84TEST_F(NetworkTypePatternTest, Primitive) {
85  const NetworkTypePattern primitive_cellular =
86      NetworkTypePattern::Primitive(shill::kTypeCellular);
87  EXPECT_TRUE(cellular_.Equals(primitive_cellular));
88  EXPECT_TRUE(primitive_cellular.Equals(cellular_));
89
90  const NetworkTypePattern primitive_wimax =
91      NetworkTypePattern::Primitive(shill::kTypeWimax);
92  EXPECT_TRUE(wimax_.Equals(primitive_wimax));
93  EXPECT_TRUE(primitive_wimax.Equals(wimax_));
94}
95
96TEST_F(NetworkTypePatternTest, ToDebugString) {
97  EXPECT_EQ(default_.ToDebugString(), "PatternDefault");
98  EXPECT_EQ(mobile_.ToDebugString(), "PatternMobile");
99  EXPECT_EQ(cellular_.ToDebugString(), "cellular");
100}
101
102}  // namespace chromeos
103