Index: webrtc/p2p/base/port_unittest.cc |
diff --git a/webrtc/p2p/base/port_unittest.cc b/webrtc/p2p/base/port_unittest.cc |
index be5ced97c0b0085170c30dc0715fb3998fb348e5..d27be2944275995d46b9433328f54d248831be4b 100644 |
--- a/webrtc/p2p/base/port_unittest.cc |
+++ b/webrtc/p2p/base/port_unittest.cc |
@@ -559,6 +559,10 @@ class PortTest : public testing::Test, public sigslot::has_slots<> { |
} |
} |
+ void SetNetworkType(rtc::AdapterType adapter_type) { |
+ network_.set_type(adapter_type); |
+ } |
+ |
void TestCrossFamilyPorts(int type); |
void ExpectPortsCanConnect(bool can_connect, Port* p1, Port* p2); |
@@ -1757,6 +1761,51 @@ TEST_F(PortTest, TestUseCandidateAttribute) { |
ASSERT_TRUE(use_candidate_attr != NULL); |
} |
+TEST_F(PortTest, TestNetworkInfoAttribute) { |
+ rtc::scoped_ptr<TestPort> lport( |
+ CreateTestPort(kLocalAddr1, "lfrag", "lpass")); |
+ // Set the network type for rport to be cellular so its cost will be 999. |
+ SetNetworkType(rtc::ADAPTER_TYPE_CELLULAR); |
+ rtc::scoped_ptr<TestPort> rport( |
+ CreateTestPort(kLocalAddr2, "rfrag", "rpass")); |
+ lport->SetIceRole(cricket::ICEROLE_CONTROLLING); |
+ lport->SetIceTiebreaker(kTiebreaker1); |
+ rport->SetIceRole(cricket::ICEROLE_CONTROLLED); |
+ rport->SetIceTiebreaker(kTiebreaker2); |
+ |
+ uint16_t lnetwork_id = 9; |
+ lport->Network()->set_id(lnetwork_id); |
+ // Send a fake ping from lport to rport. |
+ lport->PrepareAddress(); |
+ rport->PrepareAddress(); |
+ Connection* lconn = |
+ lport->CreateConnection(rport->Candidates()[0], Port::ORIGIN_MESSAGE); |
+ lconn->Ping(0); |
+ ASSERT_TRUE_WAIT(lport->last_stun_msg() != NULL, 1000); |
+ IceMessage* msg = lport->last_stun_msg(); |
+ const StunUInt32Attribute* network_info_attr = |
+ msg->GetUInt32(STUN_ATTR_NETWORK_INFO); |
+ ASSERT_TRUE(network_info_attr != NULL); |
+ uint32_t network_info = network_info_attr->value(); |
+ EXPECT_EQ(lnetwork_id, network_info >> 16); |
+ // Default network cost is 0. |
+ EXPECT_EQ(0U, network_info & 0xFFFF); |
+ |
+ // Send a fake ping from rport to lport. |
+ uint16_t rnetwork_id = 8; |
+ rport->Network()->set_id(rnetwork_id); |
+ Connection* rconn = |
+ rport->CreateConnection(lport->Candidates()[0], Port::ORIGIN_MESSAGE); |
+ rconn->Ping(0); |
+ ASSERT_TRUE_WAIT(rport->last_stun_msg() != NULL, 1000); |
+ msg = rport->last_stun_msg(); |
+ network_info_attr = msg->GetUInt32(STUN_ATTR_NETWORK_INFO); |
+ ASSERT_TRUE(network_info_attr != NULL); |
+ network_info = network_info_attr->value(); |
+ EXPECT_EQ(rnetwork_id, network_info >> 16); |
+ EXPECT_EQ(cricket::kMaxNetworkCost, network_info & 0xFFFF); |
+} |
+ |
// Test handling STUN messages. |
TEST_F(PortTest, TestHandleStunMessage) { |
// Our port will act as the "remote" port. |