Index: net/socket/websocket_endpoint_lock_manager_unittest.cc |
diff --git a/net/socket/websocket_endpoint_lock_manager_unittest.cc b/net/socket/websocket_endpoint_lock_manager_unittest.cc |
index 03d4dbc8d62e6be1c8bd3a865f86ad8f8b1b97b3..cfc6cc679f5b11ee11cd7be2e793d13380dad1b4 100644 |
--- a/net/socket/websocket_endpoint_lock_manager_unittest.cc |
+++ b/net/socket/websocket_endpoint_lock_manager_unittest.cc |
@@ -196,14 +196,33 @@ TEST_F(WebSocketEndpointLockManagerTest, RememberSocketWorks) { |
UnlockDummyEndpoint(1); |
} |
-// Calling UnlockSocket() on the same socket a second time should be harmless. |
-TEST_F(WebSocketEndpointLockManagerTest, UnlockSocketTwice) { |
+// UnlockEndpoint() should cause any sockets remembered for this endpoint |
+// to be forgotten. |
+TEST_F(WebSocketEndpointLockManagerTest, SocketAssociationForgottenOnUnlock) { |
FakeWaiter waiter; |
FakeStreamSocket dummy_socket; |
+ |
EXPECT_EQ(OK, instance()->LockEndpoint(DummyEndpoint(), &waiter)); |
instance()->RememberSocket(&dummy_socket, DummyEndpoint()); |
- instance()->UnlockSocket(&dummy_socket); |
- instance()->UnlockSocket(&dummy_socket); |
+ instance()->UnlockEndpoint(DummyEndpoint()); |
+ EXPECT_TRUE(instance()->IsEmpty()); |
+} |
+ |
+// When ownership of the endpoint is passed to a new waiter, the new waiter can |
+// call RememberSocket() again. |
+TEST_F(WebSocketEndpointLockManagerTest, NextWaiterCanCallRememberSocketAgain) { |
+ FakeWaiter waiters[2]; |
+ FakeStreamSocket dummy_sockets[2]; |
+ EXPECT_EQ(OK, instance()->LockEndpoint(DummyEndpoint(), &waiters[0])); |
+ EXPECT_EQ(ERR_IO_PENDING, |
+ instance()->LockEndpoint(DummyEndpoint(), &waiters[1])); |
+ |
+ instance()->RememberSocket(&dummy_sockets[0], DummyEndpoint()); |
+ instance()->UnlockEndpoint(DummyEndpoint()); |
+ EXPECT_TRUE(waiters[1].called()); |
+ instance()->RememberSocket(&dummy_sockets[1], DummyEndpoint()); |
+ |
+ UnlockDummyEndpoint(1); |
} |
} // namespace |