/* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ // Tests for the UdpSocketWrapper interface. // This will test the UdpSocket implementations on various platforms. // Note that this test is using a real SocketManager, which starts up // an extra worker thread, making the testing more complex than it // should be. // This is because on Posix, the CloseBlocking function waits for the // ReadyForDeletion function to be called, which has to be called after // CloseBlocking, and thus has to be called from another thread. // The manager is the one actually doing the deleting. // This is done differently in the Winsock2 code, but that code // will also hang if the destructor is called directly. #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "webrtc/test/channel_transport/udp_socket_manager_wrapper.h" #include "webrtc/test/channel_transport/udp_socket_wrapper.h" using ::testing::_; using ::testing::Return; namespace webrtc { namespace test { class MockSocketManager : public UdpSocketManager { public: MockSocketManager() {} // Access to protected destructor. void Destroy() { delete this; } MOCK_METHOD2(Init, bool(int32_t, uint8_t&)); MOCK_METHOD0(Start, bool()); MOCK_METHOD0(Stop, bool()); MOCK_METHOD1(AddSocket, bool(UdpSocketWrapper*)); MOCK_METHOD1(RemoveSocket, bool(UdpSocketWrapper*)); }; // Creates a socket using the static constructor method and verifies that // it's added to the socket manager. TEST(UdpSocketWrapper, CreateSocket) { int32_t id = 42; // We can't test deletion of sockets without a socket manager. uint8_t threads = 1; UdpSocketManager* mgr = UdpSocketManager::Create(id, threads); UdpSocketWrapper* socket = UdpSocketWrapper::CreateSocket(id, mgr, NULL, // CallbackObj NULL, // IncomingSocketCallback false, // ipV6Enable false); // disableGQOS socket->CloseBlocking(); UdpSocketManager::Return(); } } // namespace test } // namespace webrtc