| 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
|
|
|