Index: remoting/signaling/signaling_address_unittest.cc |
diff --git a/remoting/signaling/signaling_address_unittest.cc b/remoting/signaling/signaling_address_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..92e2f872f9292cd21cb6b61535fb1ff1ea164236 |
--- /dev/null |
+++ b/remoting/signaling/signaling_address_unittest.cc |
@@ -0,0 +1,191 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "remoting/signaling/signaling_address.h" |
+ |
+#include <memory> |
+ |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/libjingle_xmpp/xmllite/xmlelement.h" |
+ |
+using buzz::QName; |
+ |
+namespace remoting { |
+ |
+namespace { |
+ |
+std::unique_ptr<buzz::XmlElement> GetEmptyJingleMessage() { |
+ return std::unique_ptr<buzz::XmlElement>(buzz::XmlElement::ForStr( |
+ "<iq xmlns='jabber:client'><jingle xmlns='urn:xmpp:jingle:1'/></iq>")); |
+} |
+ |
+} // namespace |
+ |
+TEST(SignalingAddressTest, ParseAddress) { |
+ const char kTestMessage[] = |
+ "<cli:iq from='remoting@bot.talk.google.com' " |
+ " to='user@gmail.com/chromiumsy5C6A652D' type='set' " |
+ " xmlns:cli='jabber:client'>" |
+ " <jingle action='session-info' " |
+ " sid='2227053353' xmlns='urn:xmpp:jingle:1' " |
+ " from-channel='lcs' " |
+ " from-endpoint-id='user@gmail.com/xBrnereror='>" |
+ " </jingle>" |
+ "</cli:iq>"; |
+ |
+ std::unique_ptr<buzz::XmlElement> message( |
+ buzz::XmlElement::ForStr(kTestMessage)); |
+ std::string error; |
+ |
+ SignalingAddress from = |
+ SignalingAddress::Parse(message.get(), SignalingAddress::FROM, &error); |
+ EXPECT_FALSE(from.empty()); |
+ EXPECT_TRUE(error.empty()); |
+ |
+ EXPECT_EQ("remoting@bot.talk.google.com", from.jid()); |
+ EXPECT_EQ(SignalingAddress::Channel::LCS, from.channel()); |
+ EXPECT_EQ("user@gmail.com/xBrnereror=", from.endpoint_id()); |
+ EXPECT_EQ("user@gmail.com/xBrnereror=", from.id()); |
+ |
+ SignalingAddress to = |
+ SignalingAddress::Parse(message.get(), SignalingAddress::TO, &error); |
+ EXPECT_FALSE(to.empty()); |
+ EXPECT_TRUE(error.empty()); |
+ |
+ EXPECT_EQ("user@gmail.com/chromiumsy5C6A652D", to.jid()); |
+ EXPECT_EQ(SignalingAddress::Channel::XMPP, to.channel()); |
+ EXPECT_EQ("", to.endpoint_id()); |
+ EXPECT_EQ("user@gmail.com/chromiumsy5C6A652D", to.id()); |
+} |
+ |
+TEST(SignalingAddressTest, ParseErrorAddress) { |
+ const char kTestMessage[] = |
+ "<cli:iq from='remoting@bot.talk.google.com' " |
+ "to='user@gmail.com/chromiumsy5C6A652D' type='error' " |
+ " xmlns:cli='jabber:client'>" |
+ " <jingle action='session-info' " |
+ " sid='2227053353' xmlns='urn:xmpp:jingle:1' " |
+ " to-channel='lcs' " |
+ " to-endpoint-id='user@gmail.com/xBrnereror='>" |
+ " </jingle>" |
+ "<error/>" |
+ "</cli:iq>"; |
+ |
+ std::unique_ptr<buzz::XmlElement> message( |
+ buzz::XmlElement::ForStr(kTestMessage)); |
+ std::string error; |
+ |
+ SignalingAddress from = |
+ SignalingAddress::Parse(message.get(), SignalingAddress::FROM, &error); |
+ EXPECT_FALSE(from.empty()); |
+ |
+ EXPECT_EQ("remoting@bot.talk.google.com", from.jid()); |
+ EXPECT_EQ(SignalingAddress::Channel::LCS, from.channel()); |
+ EXPECT_EQ("user@gmail.com/xBrnereror=", from.endpoint_id()); |
+ EXPECT_EQ("user@gmail.com/xBrnereror=", from.id()); |
+ |
+ SignalingAddress to = |
+ SignalingAddress::Parse(message.get(), SignalingAddress::TO, &error); |
+ EXPECT_FALSE(to.empty()); |
+ |
+ EXPECT_EQ("user@gmail.com/chromiumsy5C6A652D", to.jid()); |
+ EXPECT_EQ(SignalingAddress::Channel::XMPP, to.channel()); |
+ EXPECT_EQ("", to.endpoint_id()); |
+ EXPECT_EQ("user@gmail.com/chromiumsy5C6A652D", to.id()); |
+} |
+ |
+TEST(SignalingAddressTest, ParseInvalidBotAddress) { |
+ // Parse a message with LCS address and invalid from field. |
+ const char kTestMessage[] = |
+ "<cli:iq from='invalid_address@google.com' " |
+ "to='user@gmail.com/chromiumsy5C6A652D' type='result' " |
+ " xmlns:cli='jabber:client'>" |
+ " <jingle action='session-info' " |
+ " sid='2227053353' xmlns='urn:xmpp:jingle:1' " |
+ " from-channel='lcs' " |
+ " from-endpoint-id='user@gmail.com/xBrnereror='>" |
+ " </jingle>" |
+ "</cli:iq>"; |
+ |
+ std::unique_ptr<buzz::XmlElement> message( |
+ buzz::XmlElement::ForStr(kTestMessage)); |
+ std::string error; |
+ |
+ SignalingAddress from = |
+ SignalingAddress::Parse(message.get(), SignalingAddress::FROM, &error); |
+ EXPECT_TRUE(from.empty()); |
+ EXPECT_FALSE(error.empty()); |
+} |
+ |
+TEST(SignalingAddressTest, ParseMissingEndpointId) { |
+ // Parse a message with a missing endpoint-id field. |
+ const char kTestMessage[] = |
+ "<cli:iq from='invalid_address@google.com' " |
+ " to='user@gmail.com/chromiumsy5C6A652D' type='set' " |
+ " xmlns:cli='jabber:client'>" |
+ " <jingle action='session-info' " |
+ " sid='2227053353' xmlns='urn:xmpp:jingle:1' " |
+ " from-channel='lcs'>" |
+ " </jingle>" |
+ "</cli:iq>"; |
+ |
+ std::unique_ptr<buzz::XmlElement> message( |
+ buzz::XmlElement::ForStr(kTestMessage)); |
+ std::string error; |
+ |
+ SignalingAddress from = |
+ SignalingAddress::Parse(message.get(), SignalingAddress::FROM, &error); |
+ EXPECT_TRUE(from.empty()); |
+ EXPECT_FALSE(error.empty()); |
+} |
+ |
+TEST(SignalingAddressTest, FormatToDirect) { |
+ std::unique_ptr<buzz::XmlElement> message = GetEmptyJingleMessage(); |
+ SignalingAddress addr("user@domain.com/resource"); |
+ addr.SetInMessage(message.get(), SignalingAddress::TO); |
+ EXPECT_EQ("user@domain.com/resource", message->Attr(QName("", "to"))); |
+ buzz::XmlElement* jingle = |
+ message->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle")); |
+ EXPECT_EQ("", jingle->Attr(QName("", "to-channel"))); |
+ EXPECT_EQ("", jingle->Attr(QName("", "to-endpoint-id"))); |
+} |
+ |
+TEST(SignalingAddressTest, FormatToLcs) { |
+ std::unique_ptr<buzz::XmlElement> message = GetEmptyJingleMessage(); |
+ SignalingAddress addr("remoting@bot.server.com", "user_id", |
+ SignalingAddress::Channel::LCS); |
+ |
+ addr.SetInMessage(message.get(), SignalingAddress::TO); |
+ EXPECT_EQ("remoting@bot.server.com", message->Attr(QName("", "to"))); |
+ buzz::XmlElement* jingle = |
+ message->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle")); |
+ EXPECT_EQ("lcs", jingle->Attr(QName("", "to-channel"))); |
+ EXPECT_EQ("user_id", jingle->Attr(QName("", "to-endpoint-id"))); |
+} |
+ |
+TEST(SignalingAddressTest, FormatFromDirect) { |
+ std::unique_ptr<buzz::XmlElement> message = GetEmptyJingleMessage(); |
+ SignalingAddress addr("user@domain.com/resource"); |
+ addr.SetInMessage(message.get(), SignalingAddress::FROM); |
+ EXPECT_EQ("user@domain.com/resource", message->Attr(QName("", "from"))); |
+ buzz::XmlElement* jingle = |
+ message->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle")); |
+ EXPECT_EQ("", jingle->Attr(QName("", "from-channel"))); |
+ EXPECT_EQ("", jingle->Attr(QName("", "from-endpoint-id"))); |
+} |
+ |
+TEST(SignalingAddressTest, FormatFromLcs) { |
+ std::unique_ptr<buzz::XmlElement> message = GetEmptyJingleMessage(); |
+ SignalingAddress addr("remoting@bot.server.com", "user_id", |
+ SignalingAddress::Channel::LCS); |
+ |
+ addr.SetInMessage(message.get(), SignalingAddress::FROM); |
+ EXPECT_EQ("remoting@bot.server.com", message->Attr(QName("", "from"))); |
+ buzz::XmlElement* jingle = |
+ message->FirstNamed(buzz::QName("urn:xmpp:jingle:1", "jingle")); |
+ EXPECT_EQ("lcs", jingle->Attr(QName("", "from-channel"))); |
+ EXPECT_EQ("user_id", jingle->Attr(QName("", "from-endpoint-id"))); |
+} |
+ |
+} // namespace remoting |