UdpSocket: Move tests to their own file
Responding to an ask by Mark to move 2 tests out of udp_socket_unittest.cc
and into their own file
Change-Id: Ifdec922fd30beb927347062670b5821ac5062b29
Reviewed-on: https://chromium-review.googlesource.com/c/openscreen/+/1758850
Commit-Queue: Ryan Keane <rwkeane@google.com>
Reviewed-by: Max Yakimakha <yakimakha@chromium.org>
Reviewed-by: mark a. foltz <mfoltz@chromium.org>
diff --git a/platform/api/socket_integration_unittest.cc b/platform/api/socket_integration_unittest.cc
new file mode 100644
index 0000000..4d469a9
--- /dev/null
+++ b/platform/api/socket_integration_unittest.cc
@@ -0,0 +1,51 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "gtest/gtest.h"
+#include "platform/api/time.h"
+#include "platform/test/fake_clock.h"
+#include "platform/test/fake_task_runner.h"
+#include "platform/test/mock_udp_socket.h"
+
+namespace openscreen {
+namespace platform {
+
+// Tests that a UdpSocket that does not specify any address or port will
+// successfully Bind(), and that the operating system will return the
+// auto-assigned socket name (i.e., the local endpoint's port will not be zero).
+TEST(SocketIntegrationTest, ResolvesLocalEndpoint_IPv4) {
+ const uint8_t kIpV4AddrAny[4] = {};
+ FakeClock clock(Clock::now());
+ FakeTaskRunner task_runner(&clock);
+ MockUdpSocket::MockClient client;
+ ErrorOr<UdpSocketUniquePtr> create_result = UdpSocket::Create(
+ &task_runner, &client, IPEndpoint{IPAddress(kIpV4AddrAny), 0});
+ ASSERT_TRUE(create_result) << create_result.error();
+ const auto socket = create_result.MoveValue();
+ const Error bind_result = socket->Bind();
+ ASSERT_TRUE(bind_result.ok()) << bind_result;
+ const IPEndpoint local_endpoint = socket->GetLocalEndpoint();
+ EXPECT_NE(local_endpoint.port, 0) << local_endpoint;
+}
+
+// Tests that a UdpSocket that does not specify any address or port will
+// successfully Bind(), and that the operating system will return the
+// auto-assigned socket name (i.e., the local endpoint's port will not be zero).
+TEST(SocketIntegrationTest, ResolvesLocalEndpoint_IPv6) {
+ const uint8_t kIpV6AddrAny[16] = {};
+ FakeClock clock(Clock::now());
+ FakeTaskRunner task_runner(&clock);
+ MockUdpSocket::MockClient client;
+ ErrorOr<UdpSocketUniquePtr> create_result = UdpSocket::Create(
+ &task_runner, &client, IPEndpoint{IPAddress(kIpV6AddrAny), 0});
+ ASSERT_TRUE(create_result) << create_result.error();
+ const auto socket = create_result.MoveValue();
+ const Error bind_result = socket->Bind();
+ ASSERT_TRUE(bind_result.ok()) << bind_result;
+ const IPEndpoint local_endpoint = socket->GetLocalEndpoint();
+ EXPECT_NE(local_endpoint.port, 0) << local_endpoint;
+}
+
+} // namespace platform
+} // namespace openscreen