134 lines
4.4 KiB
C++
134 lines
4.4 KiB
C++
// Copyright 2016 Google LLC. All rights reserved.
|
|
//
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file or at
|
|
// https://developers.google.com/open-source/licenses/bsd
|
|
|
|
#include <packager/file/udp_options.h>
|
|
|
|
#include <absl/flags/declare.h>
|
|
#include <absl/flags/flag.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#include <packager/flag_saver.h>
|
|
|
|
ABSL_DECLARE_FLAG(std::string, udp_interface_address);
|
|
|
|
namespace shaka {
|
|
|
|
class UdpOptionsTest : public testing::Test {
|
|
public:
|
|
UdpOptionsTest() : saver(&FLAGS_udp_interface_address) {}
|
|
|
|
void SetUp() override { absl::SetFlag(&FLAGS_udp_interface_address, ""); }
|
|
|
|
private:
|
|
FlagSaver<std::string> saver;
|
|
};
|
|
|
|
TEST_F(UdpOptionsTest, AddressAndPort) {
|
|
auto options = UdpOptions::ParseFromString("224.1.2.30:88");
|
|
ASSERT_TRUE(options);
|
|
EXPECT_EQ("224.1.2.30", options->address());
|
|
EXPECT_EQ(88u, options->port());
|
|
// The below fields are not set.
|
|
EXPECT_FALSE(options->reuse());
|
|
EXPECT_EQ("0.0.0.0", options->interface_address());
|
|
EXPECT_EQ(0u, options->timeout_us());
|
|
EXPECT_FALSE(options->is_source_specific_multicast());
|
|
EXPECT_EQ("0.0.0.0", options->source_address());
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, MissingPort) {
|
|
ASSERT_FALSE(UdpOptions::ParseFromString("224.1.2.30"));
|
|
ASSERT_FALSE(UdpOptions::ParseFromString("224.1.2.30:"));
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, InvalidPort) {
|
|
ASSERT_FALSE(UdpOptions::ParseFromString("224.1.2.30:888888"));
|
|
ASSERT_FALSE(UdpOptions::ParseFromString("224.1.2.30:abcd"));
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, MissingAddress) {
|
|
ASSERT_FALSE(UdpOptions::ParseFromString(":888888"));
|
|
ASSERT_FALSE(UdpOptions::ParseFromString("888888"));
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, UdpInterfaceAddressFlag) {
|
|
absl::SetFlag(&FLAGS_udp_interface_address, "10.11.12.13");
|
|
|
|
auto options = UdpOptions::ParseFromString("224.1.2.30:88");
|
|
ASSERT_TRUE(options);
|
|
EXPECT_EQ("224.1.2.30", options->address());
|
|
EXPECT_EQ(88u, options->port());
|
|
// The below fields are not set.
|
|
EXPECT_FALSE(options->reuse());
|
|
EXPECT_EQ("10.11.12.13", options->interface_address());
|
|
EXPECT_EQ(0u, options->timeout_us());
|
|
EXPECT_FALSE(options->is_source_specific_multicast());
|
|
EXPECT_EQ("0.0.0.0", options->source_address());
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, Reuse) {
|
|
auto options = UdpOptions::ParseFromString("224.1.2.30:88?reuse=1");
|
|
EXPECT_EQ("224.1.2.30", options->address());
|
|
EXPECT_EQ(88u, options->port());
|
|
EXPECT_TRUE(options->reuse());
|
|
EXPECT_EQ("0.0.0.0", options->interface_address());
|
|
EXPECT_EQ(0u, options->timeout_us());
|
|
EXPECT_FALSE(options->is_source_specific_multicast());
|
|
EXPECT_EQ("0.0.0.0", options->source_address());
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, InvalidReuse) {
|
|
ASSERT_FALSE(UdpOptions::ParseFromString("224.1.2.30:88?reuse=7bd"));
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, InterfaceAddress) {
|
|
auto options = UdpOptions::ParseFromString(
|
|
"224.1.2.30:88?reuse=0&interface=10.11.12.13");
|
|
EXPECT_EQ("224.1.2.30", options->address());
|
|
EXPECT_EQ(88u, options->port());
|
|
EXPECT_FALSE(options->reuse());
|
|
EXPECT_EQ("10.11.12.13", options->interface_address());
|
|
EXPECT_EQ(0u, options->timeout_us());
|
|
EXPECT_FALSE(options->is_source_specific_multicast());
|
|
EXPECT_EQ("0.0.0.0", options->source_address());
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, SourceAddress) {
|
|
auto options = UdpOptions::ParseFromString(
|
|
"224.1.2.30:88?interface=10.11.12.13&source=10.14.15.16");
|
|
EXPECT_EQ("224.1.2.30", options->address());
|
|
EXPECT_EQ(88u, options->port());
|
|
EXPECT_FALSE(options->reuse());
|
|
EXPECT_EQ("10.11.12.13", options->interface_address());
|
|
EXPECT_EQ(0u, options->timeout_us());
|
|
EXPECT_TRUE(options->is_source_specific_multicast());
|
|
EXPECT_EQ("10.14.15.16", options->source_address());
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, Timeout) {
|
|
auto options = UdpOptions::ParseFromString(
|
|
"224.1.2.30:88?interface=10.11.12.13&timeout=88888888");
|
|
EXPECT_EQ("224.1.2.30", options->address());
|
|
EXPECT_EQ(88u, options->port());
|
|
EXPECT_FALSE(options->reuse());
|
|
EXPECT_EQ("10.11.12.13", options->interface_address());
|
|
EXPECT_EQ(88888888u, options->timeout_us());
|
|
EXPECT_FALSE(options->is_source_specific_multicast());
|
|
EXPECT_EQ("0.0.0.0", options->source_address());
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, InvalidTimeout) {
|
|
ASSERT_FALSE(UdpOptions::ParseFromString(
|
|
"224.1.2.30:88?interface=10.11.12.13&timeout=1a9"));
|
|
}
|
|
|
|
TEST_F(UdpOptionsTest, BufferSize) {
|
|
auto options = UdpOptions::ParseFromString("224.1.2.30:88?buffer_size=1234");
|
|
EXPECT_EQ(1234, options->buffer_size());
|
|
}
|
|
|
|
} // namespace shaka
|