#include "quiche/quic/tools/connect_udp_tunnel.h"
#include <memory>
#include <string>
#include <utility>
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "quiche/quic/core/connecting_client_socket.h"
#include "quiche/quic/core/http/quic_spdy_stream.h"
#include "quiche/quic/core/quic_connection_id.h"
#include "quiche/quic/core/quic_error_codes.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/core/socket_factory.h"
#include "quiche/quic/platform/api/quic_socket_address.h"
#include "quiche/quic/platform/api/quic_test_loopback.h"
#include "quiche/quic/test_tools/quic_test_utils.h"
#include "quiche/quic/tools/quic_simple_server_backend.h"
#include "quiche/common/masque/connect_udp_datagram_payload.h"
#include "quiche/common/platform/api/quiche_googleurl.h"
#include "quiche/common/platform/api/quiche_mem_slice.h"
#include "quiche/common/platform/api/quiche_test.h"
#include "quiche/common/platform/api/quiche_url_utils.h"
namespace quic::test {
namespace {
_;
AnyOf;
Eq;
Ge;
Gt;
HasSubstr;
InvokeWithoutArgs;
IsEmpty;
Matcher;
NiceMock;
Pair;
Property;
Return;
StrictMock;
UnorderedElementsAre;
constexpr QuicStreamId kStreamId = …;
class MockStream : public QuicSpdyStream { … };
class MockRequestHandler : public QuicSimpleServerBackend::RequestHandler { … };
class MockSocketFactory : public SocketFactory { … };
class MockSocket : public ConnectingClientSocket { … };
class ConnectUdpTunnelTest : public quiche::test::QuicheTest { … };
TEST_F(ConnectUdpTunnelTest, OpenTunnel) { … }
TEST_F(ConnectUdpTunnelTest, OpenTunnelToIpv4LiteralTarget) { … }
TEST_F(ConnectUdpTunnelTest, OpenTunnelToIpv6LiteralTarget) { … }
TEST_F(ConnectUdpTunnelTest, OpenTunnelWithMalformedRequest) { … }
TEST_F(ConnectUdpTunnelTest, OpenTunnelWithUnacceptableTarget) { … }
TEST_F(ConnectUdpTunnelTest, ReceiveFromTarget) { … }
TEST_F(ConnectUdpTunnelTest, SendToTarget) { … }
}
}