Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / libjingle / source / talk / p2p / base / transport_unittest.cc
index b91b1a0..fa2c116 100644 (file)
  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "talk/base/fakesslidentity.h"
-#include "talk/base/gunit.h"
-#include "talk/base/thread.h"
 #include "talk/p2p/base/constants.h"
 #include "talk/p2p/base/fakesession.h"
-#include "talk/p2p/base/parsing.h"
 #include "talk/p2p/base/p2ptransport.h"
+#include "talk/p2p/base/parsing.h"
 #include "talk/p2p/base/rawtransport.h"
 #include "talk/p2p/base/sessionmessages.h"
 #include "talk/xmllite/xmlelement.h"
 #include "talk/xmpp/constants.h"
+#include "webrtc/base/fakesslidentity.h"
+#include "webrtc/base/gunit.h"
+#include "webrtc/base/thread.h"
 
 using cricket::Candidate;
 using cricket::Candidates;
@@ -47,16 +47,19 @@ using cricket::IceRole;
 using cricket::TransportDescription;
 using cricket::WriteError;
 using cricket::ParseError;
-using talk_base::SocketAddress;
+using rtc::SocketAddress;
 
 static const char kIceUfrag1[] = "TESTICEUFRAG0001";
 static const char kIcePwd1[] = "TESTICEPWD00000000000001";
 
+static const char kIceUfrag2[] = "TESTICEUFRAG0002";
+static const char kIcePwd2[] = "TESTICEPWD00000000000002";
+
 class TransportTest : public testing::Test,
                       public sigslot::has_slots<> {
  public:
   TransportTest()
-      : thread_(talk_base::Thread::Current()),
+      : thread_(rtc::Thread::Current()),
         transport_(new FakeTransport(
             thread_, thread_, "test content name", NULL)),
         channel_(NULL),
@@ -94,8 +97,8 @@ class TransportTest : public testing::Test,
     failed_ = true;
   }
 
-  talk_base::Thread* thread_;
-  talk_base::scoped_ptr<FakeTransport> transport_;
+  rtc::Thread* thread_;
+  rtc::scoped_ptr<FakeTransport> transport_;
   FakeTransportChannel* channel_;
   bool connecting_signalled_;
   bool completed_;
@@ -184,6 +187,96 @@ TEST_F(TransportTest, TestChannelIceParameters) {
   EXPECT_EQ(kIcePwd1, channel_->remote_ice_pwd());
 }
 
+// Verifies that IceCredentialsChanged returns true when either ufrag or pwd
+// changed, and false in other cases.
+TEST_F(TransportTest, TestIceCredentialsChanged) {
+  EXPECT_TRUE(cricket::IceCredentialsChanged("u1", "p1", "u2", "p2"));
+  EXPECT_TRUE(cricket::IceCredentialsChanged("u1", "p1", "u2", "p1"));
+  EXPECT_TRUE(cricket::IceCredentialsChanged("u1", "p1", "u1", "p2"));
+  EXPECT_FALSE(cricket::IceCredentialsChanged("u1", "p1", "u1", "p1"));
+}
+
+// This test verifies that the callee's ICE role changes from controlled to
+// controlling when the callee triggers an ICE restart.
+TEST_F(TransportTest, TestIceControlledToControllingOnIceRestart) {
+  EXPECT_TRUE(SetupChannel());
+  transport_->SetIceRole(cricket::ICEROLE_CONTROLLED);
+
+  cricket::TransportDescription desc(
+      cricket::NS_JINGLE_ICE_UDP, kIceUfrag1, kIcePwd1);
+  ASSERT_TRUE(transport_->SetRemoteTransportDescription(desc,
+                                                        cricket::CA_OFFER,
+                                                        NULL));
+  ASSERT_TRUE(transport_->SetLocalTransportDescription(desc,
+                                                       cricket::CA_ANSWER,
+                                                       NULL));
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLED, transport_->ice_role());
+
+  cricket::TransportDescription new_local_desc(
+      cricket::NS_JINGLE_ICE_UDP, kIceUfrag2, kIcePwd2);
+  ASSERT_TRUE(transport_->SetLocalTransportDescription(new_local_desc,
+                                                       cricket::CA_OFFER,
+                                                       NULL));
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+}
+
+// This test verifies that the caller's ICE role changes from controlling to
+// controlled when the callee triggers an ICE restart.
+TEST_F(TransportTest, TestIceControllingToControlledOnIceRestart) {
+  EXPECT_TRUE(SetupChannel());
+  transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
+
+  cricket::TransportDescription desc(
+      cricket::NS_JINGLE_ICE_UDP, kIceUfrag1, kIcePwd1);
+  ASSERT_TRUE(transport_->SetLocalTransportDescription(desc,
+                                                       cricket::CA_OFFER,
+                                                       NULL));
+  ASSERT_TRUE(transport_->SetRemoteTransportDescription(desc,
+                                                        cricket::CA_ANSWER,
+                                                        NULL));
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+
+  cricket::TransportDescription new_local_desc(
+      cricket::NS_JINGLE_ICE_UDP, kIceUfrag2, kIcePwd2);
+  ASSERT_TRUE(transport_->SetLocalTransportDescription(new_local_desc,
+                                                       cricket::CA_ANSWER,
+                                                       NULL));
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLED, transport_->ice_role());
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLED, channel_->GetIceRole());
+}
+
+// This test verifies that the caller's ICE role is still controlling after the
+// callee triggers ICE restart if the callee's ICE mode is LITE.
+TEST_F(TransportTest, TestIceControllingOnIceRestartIfRemoteIsIceLite) {
+  EXPECT_TRUE(SetupChannel());
+  transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
+
+  cricket::TransportDescription desc(
+      cricket::NS_JINGLE_ICE_UDP, kIceUfrag1, kIcePwd1);
+  ASSERT_TRUE(transport_->SetLocalTransportDescription(desc,
+                                                       cricket::CA_OFFER,
+                                                       NULL));
+
+  cricket::TransportDescription remote_desc(
+      cricket::NS_JINGLE_ICE_UDP, std::vector<std::string>(),
+      kIceUfrag1, kIcePwd1, cricket::ICEMODE_LITE,
+      cricket::CONNECTIONROLE_NONE, NULL, cricket::Candidates());
+  ASSERT_TRUE(transport_->SetRemoteTransportDescription(remote_desc,
+                                                        cricket::CA_ANSWER,
+                                                        NULL));
+
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+
+  cricket::TransportDescription new_local_desc(
+      cricket::NS_JINGLE_ICE_UDP, kIceUfrag2, kIcePwd2);
+  ASSERT_TRUE(transport_->SetLocalTransportDescription(new_local_desc,
+                                                       cricket::CA_ANSWER,
+                                                       NULL));
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLING, transport_->ice_role());
+  EXPECT_EQ(cricket::ICEROLE_CONTROLLING, channel_->GetIceRole());
+}
+
 // This test verifies that the Completed and Failed states can be reached.
 TEST_F(TransportTest, TestChannelCompletedAndFailed) {
   transport_->SetIceRole(cricket::ICEROLE_CONTROLLING);
@@ -272,20 +365,20 @@ TEST_F(TransportTest, TestSetRemoteIceLiteInAnswer) {
 TEST_F(TransportTest, TestP2PTransportWriteAndParseCandidate) {
   Candidate test_candidate(
       "", 1, "udp",
-      talk_base::SocketAddress("2001:db8:fefe::1", 9999),
+      rtc::SocketAddress("2001:db8:fefe::1", 9999),
       738197504, "abcdef", "ghijkl", "foo", "testnet", 50, "");
   Candidate test_candidate2(
       "", 2, "tcp",
-      talk_base::SocketAddress("192.168.7.1", 9999),
+      rtc::SocketAddress("192.168.7.1", 9999),
       1107296256, "mnopqr", "stuvwx", "bar", "testnet2", 100, "");
-  talk_base::SocketAddress host_address("www.google.com", 24601);
-  host_address.SetResolvedIP(talk_base::IPAddress(0x0A000001));
+  rtc::SocketAddress host_address("www.google.com", 24601);
+  host_address.SetResolvedIP(rtc::IPAddress(0x0A000001));
   Candidate test_candidate3(
       "", 3, "spdy", host_address, 1476395008, "yzabcd",
       "efghij", "baz", "testnet3", 150, "");
   WriteError write_error;
   ParseError parse_error;
-  talk_base::scoped_ptr<buzz::XmlElement> elem;
+  rtc::scoped_ptr<buzz::XmlElement> elem;
   cricket::Candidate parsed_candidate;
   cricket::P2PTransportParser parser;