1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 // Tests for the UdpSocketWrapper interface.
12 // This will test the UdpSocket implementations on various platforms.
13 // Note that this test is using a real SocketManager, which starts up
14 // an extra worker thread, making the testing more complex than it
15 // should be.
16 // This is because on Posix, the CloseBlocking function waits for the
17 // ReadyForDeletion function to be called, which has to be called after
18 // CloseBlocking, and thus has to be called from another thread.
19 // The manager is the one actually doing the deleting.
20 // This is done differently in the Winsock2 code, but that code
21 // will also hang if the destructor is called directly.
22
23 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h"
25 #include "webrtc/test/channel_transport/udp_socket_manager_wrapper.h"
26 #include "webrtc/test/channel_transport/udp_socket_wrapper.h"
27
28 using ::testing::_;
29 using ::testing::Return;
30
31 namespace webrtc {
32 namespace test {
33
34 class MockSocketManager : public UdpSocketManager {
35 public:
MockSocketManager()36 MockSocketManager() {}
37 // Access to protected destructor.
Destroy()38 void Destroy() {
39 delete this;
40 }
41 MOCK_METHOD2(Init, bool(int32_t, uint8_t&));
42 MOCK_METHOD0(Start, bool());
43 MOCK_METHOD0(Stop, bool());
44 MOCK_METHOD1(AddSocket, bool(UdpSocketWrapper*));
45 MOCK_METHOD1(RemoveSocket, bool(UdpSocketWrapper*));
46 };
47
48 // Creates a socket using the static constructor method and verifies that
49 // it's added to the socket manager.
TEST(UdpSocketWrapper,CreateSocket)50 TEST(UdpSocketWrapper, CreateSocket) {
51 int32_t id = 42;
52 // We can't test deletion of sockets without a socket manager.
53 uint8_t threads = 1;
54 UdpSocketManager* mgr = UdpSocketManager::Create(id, threads);
55 UdpSocketWrapper* socket =
56 UdpSocketWrapper::CreateSocket(id,
57 mgr,
58 NULL, // CallbackObj
59 NULL, // IncomingSocketCallback
60 false, // ipV6Enable
61 false); // disableGQOS
62 socket->CloseBlocking();
63 UdpSocketManager::Return();
64 }
65
66 } // namespace test
67 } // namespace webrtc
68