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