Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(551)

Unified Diff: remoting/protocol/ordered_message_queue_unittest.cc

Issue 2417913002: Process incoming IQs in the same order that they were sent. (Closed)
Patch Set: Reviewer's feedback Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: remoting/protocol/ordered_message_queue_unittest.cc
diff --git a/remoting/protocol/ordered_message_queue_unittest.cc b/remoting/protocol/ordered_message_queue_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0e1ac23141ee9074ba222dbc8dfd791a55f4852e
--- /dev/null
+++ b/remoting/protocol/ordered_message_queue_unittest.cc
@@ -0,0 +1,113 @@
+// Copyright 2016 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/protocol/ordered_message_queue.h"
+
+#include "base/test/gtest_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
+#include "third_party/webrtc/libjingle/xmpp/constants.h"
+
+using buzz::XmlElement;
+
+namespace remoting {
+
+namespace {
+
+std::unique_ptr<XmlElement> CreateIq(std::string type, std::string id) {
+ std::unique_ptr<XmlElement> iq(
+ XmlElement::ForStr("<iq from='from@gmail.com' to='to@gmail.com'></iq>"));
+ iq->AddAttr(buzz::QN_ID, id);
+ iq->AddAttr(buzz::QN_TYPE, type);
+ return iq;
+}
+
+void AssertIqEquals(std::list<std::string> expected_ids,
+ std::list<std::unique_ptr<XmlElement>> iqs) {
+ ASSERT_EQ(expected_ids.size(), iqs.size());
+ auto iq_it = iqs.begin();
+ for (auto id_it = expected_ids.begin(); iq_it != iqs.end();
+ ++iq_it, ++id_it) {
+ std::unique_ptr<XmlElement> stanza = std::move(*iq_it);
+ ASSERT_EQ(*id_it, stanza->Attr(buzz::QN_ID));
+ }
+}
+
+} // namespace
+
+TEST(OrderedMessageQueueTest, OutOfOrderMessages1) {
+ OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
+ std::list<std::unique_ptr<XmlElement>> received;
+ received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
+ AssertIqEquals({"xyz_1"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_4", CreateIq("set", "xyz_4"));
+ ASSERT_EQ(0u, received.size());
+ received = queue.OnIncomingMessage("xyz_3", CreateIq("set", "xyz_3"));
+ ASSERT_EQ(0u, received.size());
+ received = queue.OnIncomingMessage("xyz_2", CreateIq("set", "xyz_2"));
+ AssertIqEquals({"xyz_2", "xyz_3", "xyz_4"}, std::move(received));
+}
+
+TEST(OrderedMessageQueueTest, OutOfOrderMessages2) {
+ OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
+ std::list<std::unique_ptr<XmlElement>> received;
+ received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
+ AssertIqEquals({"xyz_1"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_4", CreateIq("set", "xyz_4"));
+ ASSERT_EQ(0u, received.size());
+ received = queue.OnIncomingMessage("xyz_2", CreateIq("set", "xyz_2"));
+ AssertIqEquals({"xyz_2"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_3", CreateIq("set", "xyz_3"));
+ AssertIqEquals({"xyz_3", "xyz_4"}, std::move(received));
+}
+
+TEST(OrderedMessageQueueTest, DuplicateMessageId1) {
+ OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
+ std::list<std::unique_ptr<XmlElement>> received;
+ received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
+ AssertIqEquals({"xyz_1"}, std::move(received));
+ ASSERT_DCHECK_DEATH(
+ queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1")));
+}
+
+TEST(OrderedMessageQueueTest, DuplicateMessageId2) {
+ OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
+ std::list<std::unique_ptr<XmlElement>> received;
+ received = queue.OnIncomingMessage("xyz_1", CreateIq("get", "xyz_1"));
+ AssertIqEquals({"xyz_1"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_4", CreateIq("get", "xyz_4"));
+ ASSERT_EQ(0u, received.size());
+ received = queue.OnIncomingMessage("xyz_3", CreateIq("get", "xyz_3"));
+ ASSERT_EQ(0u, received.size());
+ ASSERT_DCHECK_DEATH(
+ queue.OnIncomingMessage("xyz_3", CreateIq("get", "xyz_3")));
+}
+
+TEST(OrderedMessageQueueTest, InOrderMessages) {
+ OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
+ std::list<std::unique_ptr<XmlElement>> received;
+ received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
+ AssertIqEquals({"xyz_1"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_2", CreateIq("set", "xyz_2"));
+ AssertIqEquals({"xyz_2"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_3", CreateIq("set", "xyz_3"));
+ AssertIqEquals({"xyz_3"}, std::move(received));
+ received = queue.OnIncomingMessage("xyz_4", CreateIq("set", "xyz_4"));
+ AssertIqEquals({"xyz_4"}, std::move(received));
+}
+
+TEST(OrderedMessageQueueTest, LegacyMessages) {
+ OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
+ std::list<std::unique_ptr<XmlElement>> received;
+ received = queue.OnIncomingMessage("1004", CreateIq("set", "1004"));
+ AssertIqEquals({"1004"}, std::move(received));
+ received = queue.OnIncomingMessage("1002", CreateIq("set", "1002"));
+ AssertIqEquals({"1002"}, std::move(received));
+ received = queue.OnIncomingMessage("1003", CreateIq("set", "1003"));
+ AssertIqEquals({"1003"}, std::move(received));
+ received = queue.OnIncomingMessage("1001", CreateIq("set", "1001"));
+ AssertIqEquals({"1001"}, std::move(received));
+}
+
+} // namespace remoting

Powered by Google App Engine
This is Rietveld 408576698