123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #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_;
- };
- }
|