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

Unified Diff: ppapi/tests/test_websocket.cc

Issue 8989047: WebSocket Pepper API: add a unit test for the bufferedAmount property (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase to handle the conflict Created 8 years, 11 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
« no previous file with comments | « ppapi/tests/test_websocket.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/tests/test_websocket.cc
diff --git a/ppapi/tests/test_websocket.cc b/ppapi/tests/test_websocket.cc
index 67c1ef08dc2bdc71448865dcc8afe5f29bc832e0..da09d82eb2547497cbc232f58960bd4f513d93fb 100644
--- a/ppapi/tests/test_websocket.cc
+++ b/ppapi/tests/test_websocket.cc
@@ -42,6 +42,10 @@ const char* const kInvalidURLs[] = {
// See section 7.4.1. of RFC 6455.
const uint16_t kCloseCodeNormalClosure = 1000U;
+// Internal packet sizes.
+const uint64_t kCloseFrameSize = 6;
+const uint64_t kMessageFrameOverhead = 6;
+
REGISTER_TEST_CASE(WebSocket);
bool TestWebSocket::Init() {
@@ -73,6 +77,7 @@ void TestWebSocket::RunTests(const std::string& filter) {
RUN_TEST_WITH_REFERENCE_CHECK(GetProtocol, filter);
RUN_TEST_WITH_REFERENCE_CHECK(TextSendReceive, filter);
RUN_TEST_WITH_REFERENCE_CHECK(BinarySendReceive, filter);
+ RUN_TEST_WITH_REFERENCE_CHECK(BufferedAmount, filter);
RUN_TEST_WITH_REFERENCE_CHECK(CcInterfaces, filter);
}
@@ -478,13 +483,70 @@ std::string TestWebSocket::TestBinarySendReceive() {
PASS();
}
-// TODO(toyoshim): Add tests for GetBufferedAmount().
-// For now, the function doesn't work fine because update callback in WebKit is
-// not landed yet.
+std::string TestWebSocket::TestBufferedAmount() {
+ // Connect to test echo server.
+ int32_t connect_result;
+ PP_Resource ws = Connect(kEchoServerURL, &connect_result, NULL);
+ ASSERT_TRUE(ws);
+ ASSERT_EQ(PP_OK, connect_result);
+
+ // Prepare a large message that is not aligned with the internal buffer
+ // sizes.
+ char message[8194];
+ memset(message, 'x', 8193);
+ message[8193] = 0;
+ PP_Var message_var = CreateVarString(message);
+
+ uint64_t buffered_amount = 0;
+ int32_t result;
+ for (int i = 0; i < 100; i++) {
+ result = websocket_interface_->SendMessage(ws, message_var);
+ ASSERT_EQ(PP_OK, result);
+ buffered_amount = websocket_interface_->GetBufferedAmount(ws);
+ // Buffered amount size 262144 is too big for the internal buffer size.
+ if (buffered_amount > 262144)
+ break;
+ }
+
+ // Close connection.
+ std::string reason_str = "close while busy";
+ PP_Var reason = CreateVarString(reason_str.c_str());
+ TestCompletionCallback callback(instance_->pp_instance());
+ result = websocket_interface_->Close(ws, kCloseCodeNormalClosure, reason,
+ static_cast<pp::CompletionCallback>(callback).pp_completion_callback());
+ ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
+ ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSING_DEV,
+ websocket_interface_->GetReadyState(ws));
+
+ result = callback.WaitForResult();
+ ASSERT_EQ(PP_OK, result);
+ ASSERT_EQ(PP_WEBSOCKETREADYSTATE_CLOSED_DEV,
+ websocket_interface_->GetReadyState(ws));
+
+ uint64_t base_buffered_amount = websocket_interface_->GetBufferedAmount(ws);
-// TODO(toyoshim): Add tests for didReceiveMessageError().
+ // After connection closure, all sending requests fail and just increase
+ // the bufferedAmount property.
+ PP_Var empty_string = CreateVarString("");
+ result = websocket_interface_->SendMessage(ws, empty_string);
+ ASSERT_EQ(PP_ERROR_FAILED, result);
+ buffered_amount = websocket_interface_->GetBufferedAmount(ws);
+ ASSERT_EQ(base_buffered_amount + kMessageFrameOverhead, buffered_amount);
+ base_buffered_amount = buffered_amount;
-// TODO(toyoshim): Add other function tests.
+ result = websocket_interface_->SendMessage(ws, reason);
+ ASSERT_EQ(PP_ERROR_FAILED, result);
+ buffered_amount = websocket_interface_->GetBufferedAmount(ws);
+ uint64_t reason_frame_size = kMessageFrameOverhead + reason_str.length();
+ ASSERT_EQ(base_buffered_amount + reason_frame_size, buffered_amount);
+
+ ReleaseVar(message_var);
+ ReleaseVar(reason);
+ ReleaseVar(empty_string);
+ core_interface_->ReleaseResource(ws);
+
+ PASS();
+}
std::string TestWebSocket::TestCcInterfaces() {
// C++ bindings is simple straightforward, then just verifies interfaces work
« no previous file with comments | « ppapi/tests/test_websocket.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698