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

Unified Diff: ppapi/tests/test_websocket.cc

Issue 8956021: Revert 115093 because of memory test failures - WebSocket Pepper API: C++ helper class implementa... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years 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
===================================================================
--- ppapi/tests/test_websocket.cc (revision 115098)
+++ ppapi/tests/test_websocket.cc (working copy)
@@ -15,15 +15,11 @@
#include "ppapi/c/ppb_core.h"
#include "ppapi/c/ppb_var.h"
#include "ppapi/cpp/dev/websocket_dev.h"
-#include "ppapi/cpp/helper/dev/websocket_api_dev.h"
#include "ppapi/cpp/instance.h"
#include "ppapi/cpp/module.h"
#include "ppapi/tests/test_utils.h"
#include "ppapi/tests/testing_instance.h"
-// These servers are provided by pywebsocket server side handlers in
-// LayoutTests/http/tests/websocket/tests/hybi/*_wsh.
-// pywebsocket server itself is launched in ppapi_ui_test.cc.
const char kEchoServerURL[] =
"ws://localhost:8880/websocket/tests/hybi/echo";
@@ -45,119 +41,6 @@
// See section 7.4.1. of RFC 6455.
const uint16_t kCloseCodeNormalClosure = 1000U;
-namespace {
-
-struct WebSocketEvent {
- enum EventType {
- EVENT_OPEN,
- EVENT_MESSAGE,
- EVENT_ERROR,
- EVENT_CLOSE
- };
-
- WebSocketEvent(EventType type,
- bool was_clean,
- uint16_t close_code,
- const pp::Var& var)
- : event_type(type),
- was_clean(was_clean),
- close_code(close_code),
- var(var) {}
- EventType event_type;
- bool was_clean;
- uint16_t close_code;
- pp::Var var;
-};
-
-class TestWebSocketAPI : public pp::helper::WebSocketAPI_Dev {
- public:
- explicit TestWebSocketAPI(pp::Instance* instance)
- : pp::helper::WebSocketAPI_Dev(instance),
- connected_(false),
- received_(false),
- closed_(false),
- wait_for_connected_(false),
- wait_for_received_(false),
- wait_for_closed_(false),
- instance_(instance->pp_instance()) {}
-
- virtual void OnOpen() {
- events_.push_back(
- WebSocketEvent(WebSocketEvent::EVENT_OPEN, true, 0U, pp::Var()));
- connected_ = true;
- if (wait_for_connected_) {
- GetTestingInterface()->QuitMessageLoop(instance_);
- wait_for_connected_ = false;
- }
- }
-
- virtual void OnMessage(const pp::Var &message) {
- events_.push_back(
- WebSocketEvent(WebSocketEvent::EVENT_MESSAGE, true, 0U, message));
- received_ = true;
- if (wait_for_received_) {
- GetTestingInterface()->QuitMessageLoop(instance_);
- wait_for_received_ = false;
- received_ = false;
- }
- }
-
- virtual void OnError() {
- events_.push_back(
- WebSocketEvent(WebSocketEvent::EVENT_ERROR, true, 0U, pp::Var()));
- }
-
- virtual void OnClose(
- bool was_clean, uint16_t code, const pp::Var& reason) {
- events_.push_back(
- WebSocketEvent(WebSocketEvent::EVENT_CLOSE, was_clean, code, reason));
- connected_ = true;
- closed_ = true;
- if (wait_for_connected_ || wait_for_closed_) {
- GetTestingInterface()->QuitMessageLoop(instance_);
- wait_for_connected_ = false;
- wait_for_closed_ = false;
- }
- }
-
- void WaitForConnected() {
- if (!connected_) {
- wait_for_connected_ = true;
- GetTestingInterface()->RunMessageLoop(instance_);
- }
- }
-
- void WaitForReceived() {
- if (!received_) {
- wait_for_received_ = true;
- GetTestingInterface()->RunMessageLoop(instance_);
- }
- }
-
- void WaitForClosed() {
- if (!closed_) {
- wait_for_closed_ = true;
- GetTestingInterface()->RunMessageLoop(instance_);
- }
- }
-
- const std::vector<WebSocketEvent>& GetSeenEvents() const {
- return events_;
- }
-
- private:
- std::vector<WebSocketEvent> events_;
- bool connected_;
- bool received_;
- bool closed_;
- bool wait_for_connected_;
- bool wait_for_received_;
- bool wait_for_closed_;
- PP_Instance instance_;
-};
-
-} // namespace
-
REGISTER_TEST_CASE(WebSocket);
bool TestWebSocket::Init() {
@@ -186,15 +69,6 @@
RUN_TEST_WITH_REFERENCE_CHECK(TextSendReceive, filter);
RUN_TEST_WITH_REFERENCE_CHECK(CcInterfaces, filter);
-
- RUN_TEST_WITH_REFERENCE_CHECK(HelperInvalidConnect, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperProtocols, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperGetURL, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperValidConnect, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperInvalidClose, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperValidClose, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperGetProtocol, filter);
- RUN_TEST_WITH_REFERENCE_CHECK(HelperTextSendReceive, filter);
}
PP_Var TestWebSocket::CreateVar(const char* string) {
@@ -549,8 +423,8 @@
// TODO(toyoshim): Add other function tests.
std::string TestWebSocket::TestCcInterfaces() {
- // The C++ bindings is simple straightforward. This just verifies that the
- // bindings work fine as an interface bridge.
+ // C++ bindings is simple straightforward, then just verifies interfaces work
+ // as a interface bridge fine.
pp::WebSocket_Dev ws(instance_);
// Check uninitialized properties access.
@@ -565,8 +439,8 @@
// Check communication interfaces (connect, send, receive, and close).
TestCompletionCallback connect_callback(instance_->pp_instance());
- int32_t result = ws.Connect(
- pp::Var(std::string(kCloseServerURL)), NULL, 0U, connect_callback);
+ int32_t result = ws.Connect(pp::Var(std::string(kCloseServerURL)), NULL, 0U,
+ connect_callback);
ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
result = connect_callback.WaitForResult();
ASSERT_EQ(PP_OK, result);
@@ -602,239 +476,3 @@
PASS();
}
-
-std::string TestWebSocket::TestHelperInvalidConnect() {
- const pp::Var protocols[] = { pp::Var() };
-
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(pp::Var(), protocols, 1U);
- ASSERT_EQ(PP_ERROR_BADARGUMENT, result);
- ASSERT_EQ(0U, websocket.GetSeenEvents().size());
-
- result = websocket.Connect(pp::Var(), protocols, 1U);
- ASSERT_EQ(PP_ERROR_INPROGRESS, result);
- ASSERT_EQ(0U, websocket.GetSeenEvents().size());
-
- for (int i = 0; kInvalidURLs[i]; ++i) {
- TestWebSocketAPI ws(instance_);
- result = ws.Connect(pp::Var(std::string(kInvalidURLs[i])), protocols, 0U);
- ASSERT_EQ(PP_ERROR_BADARGUMENT, result);
- ASSERT_EQ(0U, ws.GetSeenEvents().size());
- }
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperProtocols() {
- const pp::Var bad_protocols[] = {
- pp::Var(std::string("x-test")), pp::Var(std::string("x-test")) };
- const pp::Var good_protocols[] = {
- pp::Var(std::string("x-test")), pp::Var(std::string("x-yatest")) };
-
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(
- pp::Var(std::string(kEchoServerURL)), bad_protocols, 2U);
- ASSERT_EQ(PP_ERROR_BADARGUMENT, result);
- ASSERT_EQ(0U, websocket.GetSeenEvents().size());
- }
-
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(
- pp::Var(std::string(kEchoServerURL)), good_protocols, 2U);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForConnected();
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- // Protocol arguments are valid, but this test run without a WebSocket
- // server. As a result, OnError() and OnClose() are invoked because of
- // a connection establishment failure.
- ASSERT_EQ(2U, events.size());
- ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[0].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[1].event_type);
- ASSERT_FALSE(events[1].was_clean);
- }
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperGetURL() {
- const pp::Var protocols[] = { pp::Var() };
-
- for (int i = 0; kInvalidURLs[i]; ++i) {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(
- pp::Var(std::string(kInvalidURLs[i])), protocols, 0U);
- ASSERT_EQ(PP_ERROR_BADARGUMENT, result);
- pp::Var url = websocket.GetURL();
- ASSERT_TRUE(AreEqual(url.pp_var(), kInvalidURLs[i]));
- ASSERT_EQ(0U, websocket.GetSeenEvents().size());
- }
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperValidConnect() {
- const pp::Var protocols[] = { pp::Var() };
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(
- pp::Var(std::string(kEchoServerURL)), protocols, 0U);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForConnected();
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- ASSERT_EQ(1U, events.size());
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type);
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperInvalidClose() {
- const pp::Var reason = pp::Var(std::string("close for test"));
-
- // Close before connect.
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Close(kCloseCodeNormalClosure, reason);
- ASSERT_EQ(PP_ERROR_FAILED, result);
- ASSERT_EQ(0U, websocket.GetSeenEvents().size());
- }
-
- // Close with bad arguments.
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(pp::Var(std::string(kEchoServerURL)),
- NULL, 0);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForConnected();
- result = websocket.Close(1U, reason);
- ASSERT_EQ(PP_ERROR_NOACCESS, result);
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- ASSERT_EQ(1U, events.size());
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type);
- }
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperValidClose() {
- std::string reason("close for test");
- pp::Var url = pp::Var(std::string(kCloseServerURL));
-
- // Close.
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(url, NULL, 0U);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForConnected();
- result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason));
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForClosed();
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- ASSERT_EQ(2U, events.size());
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[1].event_type);
- ASSERT_TRUE(events[1].was_clean);
- ASSERT_EQ(kCloseCodeNormalClosure, events[1].close_code);
- ASSERT_TRUE(AreEqual(events[1].var.pp_var(), reason.c_str()));
- }
-
- // Close in connecting.
- // The ongoing connect failed with PP_ERROR_ABORTED, then the close is done
- // successfully.
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(url, NULL, 0U);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason));
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForClosed();
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- ASSERT_TRUE(events.size() == 2 || events.size() == 3);
- int index = 0;
- if (events.size() == 3)
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[index++].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[index++].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[index].event_type);
- ASSERT_FALSE(events[index].was_clean);
- }
-
- // Close in closing.
- // The first close will be done successfully, then the second one failed with
- // with PP_ERROR_INPROGRESS immediately.
- {
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(url, NULL, 0U);
- result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason));
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- result = websocket.Close(kCloseCodeNormalClosure, pp::Var(reason));
- ASSERT_EQ(PP_ERROR_INPROGRESS, result);
- websocket.WaitForClosed();
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- ASSERT_TRUE(events.size() == 2 || events.size() == 3)
- int index = 0;
- if (events.size() == 3)
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[index++].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_ERROR, events[index++].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_CLOSE, events[index].event_type);
- ASSERT_FALSE(events[index].was_clean);
- }
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperGetProtocol() {
- const std::string protocol("x-chat");
- const pp::Var protocols[] = { pp::Var(protocol) };
- std::string url(kProtocolTestServerURL);
- url += protocol;
- TestWebSocketAPI websocket(instance_);
- int32_t result = websocket.Connect(pp::Var(url), protocols, 1U);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForReceived();
- ASSERT_TRUE(AreEqual(websocket.GetProtocol().pp_var(), protocol.c_str()));
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- // The server to which this test connect returns the decided protocol as a
- // text frame message. So the WebSocketEvent records EVENT_MESSAGE event
- // after EVENT_OPEN event.
- ASSERT_EQ(2U, events.size());
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_MESSAGE, events[1].event_type);
- ASSERT_TRUE(AreEqual(events[1].var.pp_var(), protocol.c_str()));
- ASSERT_TRUE(events[1].was_clean);
-
- PASS();
-}
-
-std::string TestWebSocket::TestHelperTextSendReceive() {
- const pp::Var protocols[] = { pp::Var() };
- TestWebSocketAPI websocket(instance_);
- int32_t result =
- websocket.Connect(pp::Var(std::string(kEchoServerURL)), protocols, 0U);
- ASSERT_EQ(PP_OK_COMPLETIONPENDING, result);
- websocket.WaitForConnected();
-
- // Send 'hello pepper'.
- std::string message1("hello pepper");
- result = websocket.Send(pp::Var(std::string(message1)));
- ASSERT_EQ(PP_OK, result);
-
- // Receive echoed 'hello pepper'.
- websocket.WaitForReceived();
-
- // Send 'goodbye pepper'.
- std::string message2("goodbye pepper");
- result = websocket.Send(pp::Var(std::string(message2)));
-
- // Receive echoed 'goodbye pepper'.
- websocket.WaitForReceived();
-
- const std::vector<WebSocketEvent>& events = websocket.GetSeenEvents();
- ASSERT_EQ(3U, events.size());
- ASSERT_EQ(WebSocketEvent::EVENT_OPEN, events[0].event_type);
- ASSERT_EQ(WebSocketEvent::EVENT_MESSAGE, events[1].event_type);
- ASSERT_TRUE(AreEqual(events[1].var.pp_var(), message1.c_str()));
- ASSERT_EQ(WebSocketEvent::EVENT_MESSAGE, events[2].event_type);
- ASSERT_TRUE(AreEqual(events[2].var.pp_var(), message2.c_str()));
-
- PASS();
-}
« 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