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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 "remoting/protocol/ordered_message_queue.h"
6
7 #include "base/test/gtest_util.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "third_party/webrtc/libjingle/xmllite/xmlelement.h"
10 #include "third_party/webrtc/libjingle/xmpp/constants.h"
11
12 using buzz::XmlElement;
13
14 namespace remoting {
15
16 namespace {
17
18 std::unique_ptr<XmlElement> CreateIq(std::string type, std::string id) {
19 std::unique_ptr<XmlElement> iq(
20 XmlElement::ForStr("<iq from='from@gmail.com' to='to@gmail.com'></iq>"));
21 iq->AddAttr(buzz::QN_ID, id);
22 iq->AddAttr(buzz::QN_TYPE, type);
23 return iq;
24 }
25
26 void AssertIqEquals(std::list<std::string> expected_ids,
27 std::list<std::unique_ptr<XmlElement>> iqs) {
28 ASSERT_EQ(expected_ids.size(), iqs.size());
29 auto iq_it = iqs.begin();
30 for (auto id_it = expected_ids.begin(); iq_it != iqs.end();
31 ++iq_it, ++id_it) {
32 std::unique_ptr<XmlElement> stanza = std::move(*iq_it);
33 ASSERT_EQ(*id_it, stanza->Attr(buzz::QN_ID));
34 }
35 }
36
37 } // namespace
38
39 TEST(OrderedMessageQueueTest, OutOfOrderMessages1) {
40 OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
41 std::list<std::unique_ptr<XmlElement>> received;
42 received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
43 AssertIqEquals({"xyz_1"}, std::move(received));
44 received = queue.OnIncomingMessage("xyz_4", CreateIq("set", "xyz_4"));
45 ASSERT_EQ(0u, received.size());
46 received = queue.OnIncomingMessage("xyz_3", CreateIq("set", "xyz_3"));
47 ASSERT_EQ(0u, received.size());
48 received = queue.OnIncomingMessage("xyz_2", CreateIq("set", "xyz_2"));
49 AssertIqEquals({"xyz_2", "xyz_3", "xyz_4"}, std::move(received));
50 }
51
52 TEST(OrderedMessageQueueTest, OutOfOrderMessages2) {
53 OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
54 std::list<std::unique_ptr<XmlElement>> received;
55 received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
56 AssertIqEquals({"xyz_1"}, std::move(received));
57 received = queue.OnIncomingMessage("xyz_4", CreateIq("set", "xyz_4"));
58 ASSERT_EQ(0u, received.size());
59 received = queue.OnIncomingMessage("xyz_2", CreateIq("set", "xyz_2"));
60 AssertIqEquals({"xyz_2"}, std::move(received));
61 received = queue.OnIncomingMessage("xyz_3", CreateIq("set", "xyz_3"));
62 AssertIqEquals({"xyz_3", "xyz_4"}, std::move(received));
63 }
64
65 TEST(OrderedMessageQueueTest, DuplicateMessageId1) {
66 OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
67 std::list<std::unique_ptr<XmlElement>> received;
68 received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
69 AssertIqEquals({"xyz_1"}, std::move(received));
70 ASSERT_DCHECK_DEATH(
71 queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1")));
72 }
73
74 TEST(OrderedMessageQueueTest, DuplicateMessageId2) {
75 OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
76 std::list<std::unique_ptr<XmlElement>> received;
77 received = queue.OnIncomingMessage("xyz_1", CreateIq("get", "xyz_1"));
78 AssertIqEquals({"xyz_1"}, std::move(received));
79 received = queue.OnIncomingMessage("xyz_4", CreateIq("get", "xyz_4"));
80 ASSERT_EQ(0u, received.size());
81 received = queue.OnIncomingMessage("xyz_3", CreateIq("get", "xyz_3"));
82 ASSERT_EQ(0u, received.size());
83 ASSERT_DCHECK_DEATH(
84 queue.OnIncomingMessage("xyz_3", CreateIq("get", "xyz_3")));
85 }
86
87 TEST(OrderedMessageQueueTest, InOrderMessages) {
88 OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
89 std::list<std::unique_ptr<XmlElement>> received;
90 received = queue.OnIncomingMessage("xyz_1", CreateIq("set", "xyz_1"));
91 AssertIqEquals({"xyz_1"}, std::move(received));
92 received = queue.OnIncomingMessage("xyz_2", CreateIq("set", "xyz_2"));
93 AssertIqEquals({"xyz_2"}, std::move(received));
94 received = queue.OnIncomingMessage("xyz_3", CreateIq("set", "xyz_3"));
95 AssertIqEquals({"xyz_3"}, std::move(received));
96 received = queue.OnIncomingMessage("xyz_4", CreateIq("set", "xyz_4"));
97 AssertIqEquals({"xyz_4"}, std::move(received));
98 }
99
100 TEST(OrderedMessageQueueTest, LegacyMessages) {
101 OrderedMessageQueue<std::unique_ptr<XmlElement>> queue;
102 std::list<std::unique_ptr<XmlElement>> received;
103 received = queue.OnIncomingMessage("1004", CreateIq("set", "1004"));
104 AssertIqEquals({"1004"}, std::move(received));
105 received = queue.OnIncomingMessage("1002", CreateIq("set", "1002"));
106 AssertIqEquals({"1002"}, std::move(received));
107 received = queue.OnIncomingMessage("1003", CreateIq("set", "1003"));
108 AssertIqEquals({"1003"}, std::move(received));
109 received = queue.OnIncomingMessage("1001", CreateIq("set", "1001"));
110 AssertIqEquals({"1001"}, std::move(received));
111 }
112
113 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698