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

Side by Side Diff: remoting/jingle_glue/iq_sender_unittest.cc

Issue 9447087: Revert 123635 - Implement timeouts for IQ requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « remoting/jingle_glue/iq_sender.cc ('k') | remoting/jingle_glue/jingle_info_request.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/message_loop.h"
8 #include "base/stringprintf.h" 7 #include "base/stringprintf.h"
9 #include "remoting/jingle_glue/iq_sender.h" 8 #include "remoting/jingle_glue/iq_sender.h"
10 #include "remoting/jingle_glue/mock_objects.h" 9 #include "remoting/jingle_glue/mock_objects.h"
11 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
13 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h" 12 #include "third_party/libjingle/source/talk/xmllite/xmlelement.h"
14 #include "third_party/libjingle/source/talk/xmpp/constants.h" 13 #include "third_party/libjingle/source/talk/xmpp/constants.h"
15 14
16 using ::testing::_; 15 using ::testing::_;
17 using ::testing::DeleteArg; 16 using ::testing::DeleteArg;
18 using ::testing::InvokeWithoutArgs;
19 using ::testing::NotNull; 17 using ::testing::NotNull;
20 using ::testing::Return; 18 using ::testing::Return;
21 using ::testing::SaveArg; 19 using ::testing::SaveArg;
22 20
23 using ::buzz::QName; 21 using ::buzz::QName;
24 using ::buzz::XmlElement; 22 using ::buzz::XmlElement;
25 23
26 namespace remoting { 24 namespace remoting {
27 25
28 namespace { 26 namespace {
29 27
30 const char kStanzaId[] = "123"; 28 const char kStanzaId[] = "123";
31 const char kNamespace[] = "chromium:testns"; 29 const char kNamespace[] = "chromium:testns";
32 const char kNamespacePrefix[] = "tes"; 30 const char kNamespacePrefix[] = "tes";
33 const char kBodyTag[] = "test"; 31 const char kBodyTag[] = "test";
34 const char kType[] = "get"; 32 const char kType[] = "get";
35 const char kTo[] = "user@domain.com"; 33 const char kTo[] = "user@domain.com";
36 34
37 class MockCallback { 35 class MockCallback {
38 public: 36 public:
39 MOCK_METHOD2(OnReply, void(IqRequest* request, const XmlElement* reply)); 37 MOCK_METHOD1(OnReply, void(const XmlElement* reply));
40 }; 38 };
41 39
42 } // namespace 40 } // namespace
43 41
44 class IqSenderTest : public testing::Test { 42 class IqSenderTest : public testing::Test {
45 public: 43 public:
46 IqSenderTest() { 44 IqSenderTest() {
47 EXPECT_CALL(signal_strategy_, AddListener(NotNull())); 45 EXPECT_CALL(signal_strategy_, AddListener(NotNull()));
48 sender_.reset(new IqSender(&signal_strategy_)); 46 sender_.reset(new IqSender(&signal_strategy_));
49 EXPECT_CALL(signal_strategy_, RemoveListener( 47 EXPECT_CALL(signal_strategy_, RemoveListener(
50 static_cast<SignalStrategy::Listener*>(sender_.get()))); 48 static_cast<SignalStrategy::Listener*>(sender_.get())));
51 } 49 }
52 50
53 protected: 51 protected:
54 void SendTestMessage() {
55 scoped_ptr<XmlElement> iq_body(
56 new XmlElement(QName(kNamespace, kBodyTag)));
57 XmlElement* sent_stanza;
58 EXPECT_CALL(signal_strategy_, GetNextId())
59 .WillOnce(Return(kStanzaId));
60 EXPECT_CALL(signal_strategy_, SendStanzaPtr(_))
61 .WillOnce(DoAll(SaveArg<0>(&sent_stanza), Return(true)));
62 request_ = sender_->SendIq(kType, kTo, iq_body.Pass(), base::Bind(
63 &MockCallback::OnReply, base::Unretained(&callback_)));
64
65 std::string expected_xml_string =
66 base::StringPrintf(
67 "<cli:iq type=\"%s\" to=\"%s\" id=\"%s\" "
68 "xmlns:cli=\"jabber:client\">"
69 "<%s:%s xmlns:%s=\"%s\"/>"
70 "</cli:iq>",
71 kType, kTo, kStanzaId, kNamespacePrefix, kBodyTag,
72 kNamespacePrefix, kNamespace);
73 EXPECT_EQ(expected_xml_string, sent_stanza->Str());
74 delete sent_stanza;
75 }
76
77 MessageLoop message_loop_;
78 MockSignalStrategy signal_strategy_; 52 MockSignalStrategy signal_strategy_;
79 scoped_ptr<IqSender> sender_; 53 scoped_ptr<IqSender> sender_;
80 MockCallback callback_; 54 MockCallback callback_;
81 scoped_ptr<IqRequest> request_;
82 }; 55 };
83 56
84 TEST_F(IqSenderTest, SendIq) { 57 TEST_F(IqSenderTest, SendIq) {
85 ASSERT_NO_FATAL_FAILURE({ 58 scoped_ptr<XmlElement> iq_body(
86 SendTestMessage(); 59 new XmlElement(QName(kNamespace, kBodyTag)));
87 }); 60 XmlElement* sent_stanza;
61 EXPECT_CALL(signal_strategy_, GetNextId())
62 .WillOnce(Return(kStanzaId));
63 EXPECT_CALL(signal_strategy_, SendStanzaPtr(_))
64 .WillOnce(DoAll(SaveArg<0>(&sent_stanza), Return(true)));
65 scoped_ptr<IqRequest> request =
66 sender_->SendIq(kType, kTo, iq_body.Pass(), base::Bind(
67 &MockCallback::OnReply, base::Unretained(&callback_)));
68
69 std::string expected_xml_string =
70 base::StringPrintf(
71 "<cli:iq type=\"%s\" to=\"%s\" id=\"%s\" "
72 "xmlns:cli=\"jabber:client\">"
73 "<%s:%s xmlns:%s=\"%s\"/>"
74 "</cli:iq>",
75 kType, kTo, kStanzaId, kNamespacePrefix, kBodyTag,
76 kNamespacePrefix, kNamespace);
77 EXPECT_EQ(expected_xml_string, sent_stanza->Str());
78 delete sent_stanza;
88 79
89 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ)); 80 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ));
90 response->AddAttr(QName("", "type"), "result"); 81 response->AddAttr(QName("", "type"), "result");
91 response->AddAttr(QName("", "id"), kStanzaId); 82 response->AddAttr(QName("", "id"), kStanzaId);
92 response->AddAttr(QName("", "from"), kTo);
93 83
94 XmlElement* result = new XmlElement( 84 XmlElement* result = new XmlElement(
95 QName("test:namespace", "response-body")); 85 QName("test:namespace", "response-body"));
96 response->AddElement(result); 86 response->AddElement(result);
97 87
98 EXPECT_CALL(callback_, OnReply(request_.get(), response.get())); 88 EXPECT_CALL(callback_, OnReply(response.get()));
99 EXPECT_TRUE(sender_->OnSignalStrategyIncomingStanza(response.get())); 89 EXPECT_TRUE(sender_->OnSignalStrategyIncomingStanza(response.get()));
100 } 90 }
101 91
102 TEST_F(IqSenderTest, Timeout) {
103 ASSERT_NO_FATAL_FAILURE({
104 SendTestMessage();
105 });
106
107 request_->SetTimeout(base::TimeDelta::FromMilliseconds(2));
108
109 EXPECT_CALL(callback_, OnReply(request_.get(), NULL))
110 .WillOnce(InvokeWithoutArgs(&message_loop_, &MessageLoop::Quit));
111 message_loop_.Run();
112 }
113
114 TEST_F(IqSenderTest, InvalidFrom) {
115 ASSERT_NO_FATAL_FAILURE({
116 SendTestMessage();
117 });
118
119 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ));
120 response->AddAttr(QName("", "type"), "result");
121 response->AddAttr(QName("", "id"), kStanzaId);
122 response->AddAttr(QName("", "from"), "different_user@domain.com");
123
124 XmlElement* result = new XmlElement(
125 QName("test:namespace", "response-body"));
126 response->AddElement(result);
127
128 EXPECT_CALL(callback_, OnReply(request_.get(), response.get()))
129 .Times(0);
130 EXPECT_FALSE(sender_->OnSignalStrategyIncomingStanza(response.get()));
131 }
132
133 TEST_F(IqSenderTest, IdMatchingHack) {
134 ASSERT_NO_FATAL_FAILURE({
135 SendTestMessage();
136 });
137
138 scoped_ptr<XmlElement> response(new XmlElement(buzz::QN_IQ));
139 response->AddAttr(QName("", "type"), "result");
140 response->AddAttr(QName("", "id"), "DIFFERENT_ID");
141 response->AddAttr(QName("", "from"), kTo);
142
143 XmlElement* result = new XmlElement(
144 QName("test:namespace", "response-body"));
145 response->AddElement(result);
146
147 EXPECT_CALL(callback_, OnReply(request_.get(), response.get()));
148 EXPECT_TRUE(sender_->OnSignalStrategyIncomingStanza(response.get()));
149 }
150
151 } // namespace remoting 92 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/jingle_glue/iq_sender.cc ('k') | remoting/jingle_glue/jingle_info_request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698