diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/testing/common/ut/network_ut.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/testing/common/ut/network_ut.cpp')
-rw-r--r-- | library/cpp/testing/common/ut/network_ut.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/library/cpp/testing/common/ut/network_ut.cpp b/library/cpp/testing/common/ut/network_ut.cpp new file mode 100644 index 0000000000..6a40775fd9 --- /dev/null +++ b/library/cpp/testing/common/ut/network_ut.cpp @@ -0,0 +1,54 @@ +#include <library/cpp/testing/common/network.h> +#include <library/cpp/testing/common/scope.h> + +#include <util/generic/hash_set.h> + +#include <util/folder/dirut.h> +#include <util/folder/path.h> +#include <util/folder/tempdir.h> +#include <util/network/sock.h> +#include <util/system/fs.h> + +#include <library/cpp/testing/gtest/gtest.h> + +static TTempDir TmpDir; + +TEST(NetworkTest, FreePort) { + NTesting::TScopedEnvironment envGuard("PORT_SYNC_PATH", TmpDir.Name()); + + TVector<NTesting::TPortHolder> ports(Reserve(100)); + + for (size_t i = 0; i < 100; ++i) { + ports.push_back(NTesting::GetFreePort()); + } + + THashSet<ui16> uniqPorts; + for (auto& port : ports) { + const TString guardPath = TmpDir.Path() / ToString(static_cast<ui16>(port)); + EXPECT_TRUE(NFs::Exists(guardPath)); + EXPECT_TRUE(uniqPorts.emplace(port).second); + + TInetStreamSocket sock; + TSockAddrInet addr(TIpHost{INADDR_ANY}, port); + ASSERT_EQ(0, SetSockOpt(sock, SOL_SOCKET, SO_REUSEADDR, 1)); + EXPECT_EQ(0, sock.Bind(&addr)); + } + ports.clear(); + for (ui16 port : uniqPorts) { + const TString guardPath = TmpDir.Path() / ToString(port); + EXPECT_FALSE(NFs::Exists(guardPath)); + } +} + + +TEST(FreePortTest, FreePortsRange) { + NTesting::TScopedEnvironment envGuard("PORT_SYNC_PATH", TmpDir.Name()); + + for (ui16 i = 2; i < 10; ++i) { + TVector<NTesting::TPortHolder> ports = NTesting::NLegacy::GetFreePortsRange(i); + ASSERT_EQ(i, ports.size()); + for (ui16 j = 1; j < i; ++j) { + EXPECT_EQ(static_cast<ui16>(ports[j]), static_cast<ui16>(ports[0]) + j); + } + } +} |