| Index: net/websockets/websocket_job_unittest.cc
|
| diff --git a/net/websockets/websocket_job_unittest.cc b/net/websockets/websocket_job_unittest.cc
|
| index 28ba53cc12b2ad738548683818b68782f4dcf823..3ce52790cba95a19086ddf4b7fae6d2ad2692b82 100644
|
| --- a/net/websockets/websocket_job_unittest.cc
|
| +++ b/net/websockets/websocket_job_unittest.cc
|
| @@ -392,7 +392,7 @@ class WebSocketJobTest : public PlatformTest,
|
| }
|
| void SkipToConnecting() {
|
| websocket_->state_ = WebSocketJob::CONNECTING;
|
| - WebSocketThrottle::GetInstance()->PutInQueue(websocket_.get());
|
| + ASSERT_TRUE(WebSocketThrottle::GetInstance()->PutInQueue(websocket_.get()));
|
| }
|
| WebSocketJob::State GetWebSocketJobState() {
|
| return websocket_->state_;
|
| @@ -432,6 +432,7 @@ class WebSocketJobTest : public PlatformTest,
|
| void TestInvalidSendData();
|
| void TestConnectByWebSocket(ThrottlingOption throttling);
|
| void TestConnectBySpdy(SpdyOption spdy, ThrottlingOption throttling);
|
| + void TestThrottlingLimit();
|
|
|
| SpdyWebSocketTestUtil spdy_util_;
|
| StreamType stream_type_;
|
| @@ -821,7 +822,8 @@ void WebSocketJobTest::TestConnectByWebSocket(
|
| // Create former WebSocket object which obstructs the latter one.
|
| block_websocket = new WebSocketJob(NULL);
|
| block_websocket->addresses_ = AddressList(websocket_->address_list());
|
| - WebSocketThrottle::GetInstance()->PutInQueue(block_websocket.get());
|
| + ASSERT_TRUE(
|
| + WebSocketThrottle::GetInstance()->PutInQueue(block_websocket.get()));
|
| }
|
|
|
| websocket_->Connect();
|
| @@ -832,10 +834,9 @@ void WebSocketJobTest::TestConnectByWebSocket(
|
|
|
| // Remove the former WebSocket object from throttling queue to unblock the
|
| // latter.
|
| - WebSocketThrottle::GetInstance()->RemoveFromQueue(block_websocket.get());
|
| block_websocket->state_ = WebSocketJob::CLOSED;
|
| + WebSocketThrottle::GetInstance()->RemoveFromQueue(block_websocket.get());
|
| block_websocket = NULL;
|
| - WebSocketThrottle::GetInstance()->WakeupSocketIfNecessary();
|
| }
|
|
|
| EXPECT_EQ(OK, WaitForResult());
|
| @@ -950,7 +951,8 @@ void WebSocketJobTest::TestConnectBySpdy(
|
| // Create former WebSocket object which obstructs the latter one.
|
| block_websocket = new WebSocketJob(NULL);
|
| block_websocket->addresses_ = AddressList(websocket_->address_list());
|
| - WebSocketThrottle::GetInstance()->PutInQueue(block_websocket.get());
|
| + ASSERT_TRUE(
|
| + WebSocketThrottle::GetInstance()->PutInQueue(block_websocket.get()));
|
| }
|
|
|
| websocket_->Connect();
|
| @@ -961,10 +963,9 @@ void WebSocketJobTest::TestConnectBySpdy(
|
|
|
| // Remove the former WebSocket object from throttling queue to unblock the
|
| // latter.
|
| - WebSocketThrottle::GetInstance()->RemoveFromQueue(block_websocket.get());
|
| block_websocket->state_ = WebSocketJob::CLOSED;
|
| + WebSocketThrottle::GetInstance()->RemoveFromQueue(block_websocket.get());
|
| block_websocket = NULL;
|
| - WebSocketThrottle::GetInstance()->WakeupSocketIfNecessary();
|
| }
|
|
|
| EXPECT_EQ(OK, WaitForResult());
|
| @@ -973,6 +974,33 @@ void WebSocketJobTest::TestConnectBySpdy(
|
| EXPECT_EQ(WebSocketJob::CLOSED, GetWebSocketJobState());
|
| }
|
|
|
| +void WebSocketJobTest::TestThrottlingLimit() {
|
| + std::vector<scoped_refptr<WebSocketJob> > jobs;
|
| + const int kMaxWebSocketJobsThrottled = 1024;
|
| + IPAddressNumber ip;
|
| + ParseIPLiteralToNumber("127.0.0.1", &ip);
|
| + for (int i = 0; i < kMaxWebSocketJobsThrottled + 1; ++i) {
|
| + scoped_refptr<WebSocketJob> job = new WebSocketJob(NULL);
|
| + job->addresses_ = AddressList(AddressList::CreateFromIPAddress(ip, 80));
|
| + if (i >= kMaxWebSocketJobsThrottled)
|
| + EXPECT_FALSE(WebSocketThrottle::GetInstance()->PutInQueue(job));
|
| + else
|
| + EXPECT_TRUE(WebSocketThrottle::GetInstance()->PutInQueue(job));
|
| + jobs.push_back(job);
|
| + }
|
| +
|
| + // Close the jobs in reverse order. Otherwise, We need to make them prepared
|
| + // for Wakeup call.
|
| + for (std::vector<scoped_refptr<WebSocketJob> >::reverse_iterator iter =
|
| + jobs.rbegin();
|
| + iter != jobs.rend();
|
| + ++iter) {
|
| + WebSocketJob* job = (*iter).get();
|
| + job->state_ = WebSocketJob::CLOSED;
|
| + WebSocketThrottle::GetInstance()->RemoveFromQueue(job);
|
| + }
|
| +}
|
| +
|
| // Execute tests in both spdy-disabled mode and spdy-enabled mode.
|
| TEST_P(WebSocketJobTest, SimpleHandshake) {
|
| WebSocketJob::set_websocket_over_spdy_enabled(false);
|
| @@ -1059,6 +1087,10 @@ TEST_P(WebSocketJobTest, ThrottlingWebSocket) {
|
| TestConnectByWebSocket(THROTTLING_ON);
|
| }
|
|
|
| +TEST_P(WebSocketJobTest, ThrottlingMaxNumberOfThrottledJobLimit) {
|
| + TestThrottlingLimit();
|
| +}
|
| +
|
| TEST_P(WebSocketJobTest, ThrottlingWebSocketSpdyEnabled) {
|
| WebSocketJob::set_websocket_over_spdy_enabled(true);
|
| TestConnectByWebSocket(THROTTLING_ON);
|
|
|