blob: 4107145a7cc5afaa692a9aa234ab95380db1bd79 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#pragma once
#include <util/generic/ptr.h>
#include <util/generic/vector.h>
namespace NTesting {
//@brief network port holder interface
class IPort {
public:
virtual ~IPort() {}
virtual ui16 Get() = 0;
};
class TPortHolder : private THolder<IPort> {
using TBase = THolder<IPort>;
public:
using TBase::TBase;
using TBase::Release;
using TBase::Reset;
operator ui16() const& {
return (*this)->Get();
}
operator ui16() const&& = delete;
};
IOutputStream& operator<<(IOutputStream& out, const TPortHolder& port);
//@brief Get first free port.
[[nodiscard]] TPortHolder GetFreePort();
namespace NLegacy {
// Do not use these methods made for Unittest TPortManager backward compatibility.
// Returns continuous sequence of the specified number of ports.
[[nodiscard]] TVector<TPortHolder> GetFreePortsRange(size_t count);
//@brief Returns port from parameter if NO_RANDOM_PORTS env var is set, otherwise first free port
[[nodiscard]] TPortHolder GetPort(ui16 port);
}
//@brief Reinitialize singleton from environment vars for tests
void InitPortManagerFromEnv();
//@brief helper class for inheritance
struct TFreePortOwner {
TFreePortOwner() : Port_(GetFreePort()) {}
ui16 GetPort() const {
return Port_;
}
private:
TPortHolder Port_;
};
}
|