Index: net/websockets/websocket_job_unittest.cc |
diff --git a/net/websockets/websocket_job_unittest.cc b/net/websockets/websocket_job_unittest.cc |
index 69f8560098c0e99f7ccc2b768956b83c0f19624a..9b3e786b272e9143723c0e45fade579ac3ef44d6 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) |
szym
2013/07/12 15:31:05
suggest >=
tyoshino (SeeGerritForStatus)
2013/07/17 06:58:26
Done.
|
+ 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); |