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

Unified Diff: test/cctest/test-debug.cc

Issue 42555: Added a test for debugger agent protocol message (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/cctest/test-debug.cc
===================================================================
--- test/cctest/test-debug.cc (revision 1579)
+++ test/cctest/test-debug.cc (working copy)
@@ -3830,9 +3830,9 @@
const int kPort = 5858;
// Make a string with the port number.
- const int kPortBuferLen = 6;
- char port_str[kPortBuferLen];
- OS::SNPrintF(i::Vector<char>(port_str, kPortBuferLen), "%d", kPort);
+ const int kPortBufferLen = 6;
+ char port_str[kPortBufferLen];
+ OS::SNPrintF(i::Vector<char>(port_str, kPortBufferLen), "%d", kPort);
bool ok;
@@ -3863,3 +3863,120 @@
delete server;
}
+
+
+class DebuggerAgentProtocolServerThread : public i::Thread {
+ public:
+ explicit DebuggerAgentProtocolServerThread(int port)
+ : port_(port), server_(NULL), client_(NULL),
+ listening_(OS::CreateSemaphore(0)) {
+ }
+ ~DebuggerAgentProtocolServerThread() {
+ // Close both sockets.
+ delete client_;
+ delete server_;
+ delete listening_;
+ }
+
+ void Run();
+ void WaitForListening() { listening_->Wait(); }
+ char* body() { return *body_; }
+
+ private:
+ int port_;
+ i::SmartPointer<char> body_;
+ i::Socket* server_; // Server socket used for bind/accept.
+ i::Socket* client_; // Single client connection used by the test.
+ i::Semaphore* listening_; // Signalled when the server is in listen mode.
+};
+
+
+void DebuggerAgentProtocolServerThread::Run() {
+ bool ok;
+
+ // Create the server socket and bind it to the requested port.
+ server_ = i::OS::CreateSocket();
+ CHECK(server_ != NULL);
+ ok = server_->Bind(port_);
+ CHECK(ok);
+
+ // Listen for new connections.
+ ok = server_->Listen(1);
+ CHECK(ok);
+ listening_->Signal();
+
+ // Accept a connection.
+ client_ = server_->Accept();
+ CHECK(client_ != NULL);
+
+ // Receive a debugger agent protocol message.
+ i::DebuggerAgentUtil::ReceiveMessage(client_);
+}
+
+
+TEST(DebuggerAgentProtocolOverflowHeader) {
+ // Make sure this port is not used by other tests to allow tests to run in
+ // parallel.
+ const int kPort = 5860;
+ static const char* kLocalhost = "localhost";
+
+ // Make a string with the port number.
+ const int kPortBufferLen = 6;
+ char port_str[kPortBufferLen];
+ OS::SNPrintF(i::Vector<char>(port_str, kPortBufferLen), "%d", kPort);
+
+ // Initialize the socket library.
+ i::Socket::Setup();
+
+ // Create a socket server to receive a debugger agent message.
+ DebuggerAgentProtocolServerThread* server =
+ new DebuggerAgentProtocolServerThread(kPort);
+ server->Start();
+ server->WaitForListening();
+
+ // Connect.
+ i::Socket* client = i::OS::CreateSocket();
+ CHECK(client != NULL);
+ bool ok = client->Connect(kLocalhost, port_str);
+ CHECK(ok);
+
+ // Send headers which overflow the receive buffer.
+ static const int kBufferSize = 1000;
+ char buffer[kBufferSize];
+
+ // Long key and short value: XXXX....XXXX:0\r\n.
+ for (int i = 0; i < kBufferSize - 4; i++) {
+ buffer[i] = 'X';
+ }
+ buffer[kBufferSize - 4] = ':';
+ buffer[kBufferSize - 3] = '0';
+ buffer[kBufferSize - 2] = '\r';
+ buffer[kBufferSize - 1] = '\n';
+ client->Send(buffer, kBufferSize);
+
+ // Short key and long value: X:XXXX....XXXX\r\n.
+ buffer[0] = 'X';
+ buffer[1] = ':';
+ for (int i = 2; i < kBufferSize - 2; i++) {
+ buffer[i] = 'X';
+ }
+ buffer[kBufferSize - 2] = '\r';
+ buffer[kBufferSize - 1] = '\n';
+ client->Send(buffer, kBufferSize);
+
+ // Add empty body to request.
+ const char* content_length_zero_header = "Content-Length:0\r\n";
+ client->Send(content_length_zero_header, strlen(content_length_zero_header));
+ client->Send("\r\n", 2);
+
+ // Wait until data is received.
+ server->Join();
+
+ // Check for empty body.
+ CHECK(server->body() == NULL);
+
+ // Close the client before the server to avoid TIME_WAIT issues.
+ client->Shutdown();
+ delete client;
+ delete server;
+}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698