aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/tvmauth/client/misc/api/dynamic_dst
diff options
context:
space:
mode:
authorcerevra <cerevra@yandex-team.ru>2022-02-10 16:45:58 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:58 +0300
commitbf41dd01f6c920583e9faae7cd55ed25e547e052 (patch)
treeec7c8c285ffa648a5c5efeff453787a15ab811ac /library/cpp/tvmauth/client/misc/api/dynamic_dst
parente2c3e3004f7cd68441cefcfa4aaccd3d8051c846 (diff)
downloadydb-bf41dd01f6c920583e9faae7cd55ed25e547e052.tar.gz
Restoring authorship annotation for <cerevra@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/tvmauth/client/misc/api/dynamic_dst')
-rw-r--r--library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.cpp244
-rw-r--r--library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h116
-rw-r--r--library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/tvm_client_ut.cpp1126
-rw-r--r--library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/ya.make18
-rw-r--r--library/cpp/tvmauth/client/misc/api/dynamic_dst/ya.make38
5 files changed, 771 insertions, 771 deletions
diff --git a/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.cpp b/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.cpp
index 6ec15c0e88..dee9b05d1f 100644
--- a/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.cpp
+++ b/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.cpp
@@ -1,126 +1,126 @@
-#include "tvm_client.h"
-
-#include <util/string/builder.h>
-
-namespace NTvmAuth::NDynamicClient {
- TAsyncUpdaterPtr TTvmClient::Create(const NTvmApi::TClientSettings& settings, TLoggerPtr logger) {
- Y_ENSURE_EX(logger, TNonRetriableException() << "Logger is required");
- THolder<TTvmClient> p(new TTvmClient(settings, std::move(logger)));
- p->Init();
- p->StartWorker();
- return p.Release();
- }
-
- NThreading::TFuture<TAddResponse> TTvmClient::Add(TDsts&& dsts) {
- if (dsts.empty()) {
- LogDebug("Adding dst: got empty task");
- return NThreading::MakeFuture<TAddResponse>(TAddResponse{});
- }
-
- const size_t size = dsts.size();
- const ui64 id = ++TaskIds_;
- NThreading::TPromise<TAddResponse> promise = NThreading::NewPromise<TAddResponse>();
-
- TaskQueue_.Enqueue(TTask{id, promise, std::move(dsts)});
-
- LogDebug(TStringBuilder() << "Adding dst: got task #" << id << " with " << size << " dsts");
- return promise.GetFuture();
- }
-
- std::optional<TString> TTvmClient::GetOptionalServiceTicketFor(const TTvmId dst) {
- TServiceTicketsPtr tickets = GetCachedServiceTickets();
- Y_ENSURE_EX(tickets,
- TBrokenTvmClientSettings()
- << "Need to enable fetching of service tickets in settings");
-
- auto it = tickets->TicketsById.find(dst);
- if (it != tickets->TicketsById.end()) {
- return it->second;
- }
-
- it = tickets->ErrorsById.find(dst);
- if (it != tickets->ErrorsById.end()) {
- ythrow TMissingServiceTicket()
- << "Failed to get ticket for '" << dst << "': "
- << it->second;
- }
-
- return {};
- }
-
- TTvmClient::TTvmClient(const NTvmApi::TClientSettings& settings, TLoggerPtr logger)
- : TBase(settings, logger)
- {
- }
-
+#include "tvm_client.h"
+
+#include <util/string/builder.h>
+
+namespace NTvmAuth::NDynamicClient {
+ TAsyncUpdaterPtr TTvmClient::Create(const NTvmApi::TClientSettings& settings, TLoggerPtr logger) {
+ Y_ENSURE_EX(logger, TNonRetriableException() << "Logger is required");
+ THolder<TTvmClient> p(new TTvmClient(settings, std::move(logger)));
+ p->Init();
+ p->StartWorker();
+ return p.Release();
+ }
+
+ NThreading::TFuture<TAddResponse> TTvmClient::Add(TDsts&& dsts) {
+ if (dsts.empty()) {
+ LogDebug("Adding dst: got empty task");
+ return NThreading::MakeFuture<TAddResponse>(TAddResponse{});
+ }
+
+ const size_t size = dsts.size();
+ const ui64 id = ++TaskIds_;
+ NThreading::TPromise<TAddResponse> promise = NThreading::NewPromise<TAddResponse>();
+
+ TaskQueue_.Enqueue(TTask{id, promise, std::move(dsts)});
+
+ LogDebug(TStringBuilder() << "Adding dst: got task #" << id << " with " << size << " dsts");
+ return promise.GetFuture();
+ }
+
+ std::optional<TString> TTvmClient::GetOptionalServiceTicketFor(const TTvmId dst) {
+ TServiceTicketsPtr tickets = GetCachedServiceTickets();
+ Y_ENSURE_EX(tickets,
+ TBrokenTvmClientSettings()
+ << "Need to enable fetching of service tickets in settings");
+
+ auto it = tickets->TicketsById.find(dst);
+ if (it != tickets->TicketsById.end()) {
+ return it->second;
+ }
+
+ it = tickets->ErrorsById.find(dst);
+ if (it != tickets->ErrorsById.end()) {
+ ythrow TMissingServiceTicket()
+ << "Failed to get ticket for '" << dst << "': "
+ << it->second;
+ }
+
+ return {};
+ }
+
+ TTvmClient::TTvmClient(const NTvmApi::TClientSettings& settings, TLoggerPtr logger)
+ : TBase(settings, logger)
+ {
+ }
+
TTvmClient::~TTvmClient() {
TBase::StopWorker();
}
- void TTvmClient::Worker() {
- TBase::Worker();
- ProcessTasks();
- }
-
- void TTvmClient::ProcessTasks() {
- TaskQueue_.DequeueAll(&Tasks_);
- if (Tasks_.empty()) {
- return;
- }
-
- TDsts required;
- for (const TTask& task : Tasks_) {
- for (const auto& dst : task.Dsts) {
- required.insert(dst);
- }
- }
-
- TServiceTicketsPtr cache = UpdateMissingServiceTickets(required);
-
- for (TTask& task : Tasks_) {
- try {
- SetResponseForTask(task, *cache);
- } catch (const std::exception& e) {
- LogError(TStringBuilder()
- << "Adding dst: task #" << task.Id << ": exception: " << e.what());
- } catch (...) {
- LogError(TStringBuilder()
- << "Adding dst: task #" << task.Id << ": exception: " << CurrentExceptionMessage());
- }
- }
-
- Tasks_.clear();
- }
-
- static const TString UNKNOWN = "Unknown reason";
- void TTvmClient::SetResponseForTask(TTvmClient::TTask& task, const TServiceTickets& cache) {
- if (task.Promise.HasValue()) {
- LogWarning(TStringBuilder() << "Adding dst: task #" << task.Id << " already has value");
- return;
- }
-
- TAddResponse response;
-
- for (const auto& dst : task.Dsts) {
- if (cache.TicketsById.contains(dst.Id)) {
- AddDstToSettings(dst);
- response.emplace(dst, TDstResponse{EDstStatus::Success, TString()});
-
- LogDebug(TStringBuilder() << "Adding dst: task #" << task.Id
- << ": dst=" << dst.Id << " got ticket");
- continue;
- }
-
- auto it = cache.ErrorsById.find(dst.Id);
- const TString& error = it == cache.ErrorsById.end() ? UNKNOWN : it->second;
- response.emplace(dst, TDstResponse{EDstStatus::Fail, error});
-
- LogWarning(TStringBuilder() << "Adding dst: task #" << task.Id
- << ": dst=" << dst.Id
- << " failed to get ticket: " << error);
- }
-
- LogDebug(TStringBuilder() << "Adding dst: task #" << task.Id << ": set value");
- task.Promise.SetValue(std::move(response));
- }
-}
+ void TTvmClient::Worker() {
+ TBase::Worker();
+ ProcessTasks();
+ }
+
+ void TTvmClient::ProcessTasks() {
+ TaskQueue_.DequeueAll(&Tasks_);
+ if (Tasks_.empty()) {
+ return;
+ }
+
+ TDsts required;
+ for (const TTask& task : Tasks_) {
+ for (const auto& dst : task.Dsts) {
+ required.insert(dst);
+ }
+ }
+
+ TServiceTicketsPtr cache = UpdateMissingServiceTickets(required);
+
+ for (TTask& task : Tasks_) {
+ try {
+ SetResponseForTask(task, *cache);
+ } catch (const std::exception& e) {
+ LogError(TStringBuilder()
+ << "Adding dst: task #" << task.Id << ": exception: " << e.what());
+ } catch (...) {
+ LogError(TStringBuilder()
+ << "Adding dst: task #" << task.Id << ": exception: " << CurrentExceptionMessage());
+ }
+ }
+
+ Tasks_.clear();
+ }
+
+ static const TString UNKNOWN = "Unknown reason";
+ void TTvmClient::SetResponseForTask(TTvmClient::TTask& task, const TServiceTickets& cache) {
+ if (task.Promise.HasValue()) {
+ LogWarning(TStringBuilder() << "Adding dst: task #" << task.Id << " already has value");
+ return;
+ }
+
+ TAddResponse response;
+
+ for (const auto& dst : task.Dsts) {
+ if (cache.TicketsById.contains(dst.Id)) {
+ AddDstToSettings(dst);
+ response.emplace(dst, TDstResponse{EDstStatus::Success, TString()});
+
+ LogDebug(TStringBuilder() << "Adding dst: task #" << task.Id
+ << ": dst=" << dst.Id << " got ticket");
+ continue;
+ }
+
+ auto it = cache.ErrorsById.find(dst.Id);
+ const TString& error = it == cache.ErrorsById.end() ? UNKNOWN : it->second;
+ response.emplace(dst, TDstResponse{EDstStatus::Fail, error});
+
+ LogWarning(TStringBuilder() << "Adding dst: task #" << task.Id
+ << ": dst=" << dst.Id
+ << " failed to get ticket: " << error);
+ }
+
+ LogDebug(TStringBuilder() << "Adding dst: task #" << task.Id << ": set value");
+ task.Promise.SetValue(std::move(response));
+ }
+}
diff --git a/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h b/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h
index 58ed953b63..a3aed7210a 100644
--- a/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h
+++ b/library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h
@@ -1,60 +1,60 @@
-#pragma once
-
-#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
-
+#pragma once
+
+#include <library/cpp/tvmauth/client/misc/api/threaded_updater.h>
+
#include <library/cpp/threading/future/future.h>
-
-#include <util/generic/map.h>
-#include <util/thread/lfqueue.h>
-
-#include <optional>
-
-namespace NTvmAuth::NDynamicClient {
- enum class EDstStatus {
- Success,
- Fail,
- };
-
- struct TDstResponse {
- EDstStatus Status = EDstStatus::Fail;
- TString Error;
-
- bool operator==(const TDstResponse& o) const {
- return Status == o.Status && Error == o.Error;
- }
- };
-
- using TDsts = NTvmApi::TDstSet;
- using TAddResponse = TMap<NTvmApi::TClientSettings::TDst, TDstResponse>;
-
- class TTvmClient: public NTvmApi::TThreadedUpdater {
- public:
- static TAsyncUpdaterPtr Create(const NTvmApi::TClientSettings& settings, TLoggerPtr logger);
+
+#include <util/generic/map.h>
+#include <util/thread/lfqueue.h>
+
+#include <optional>
+
+namespace NTvmAuth::NDynamicClient {
+ enum class EDstStatus {
+ Success,
+ Fail,
+ };
+
+ struct TDstResponse {
+ EDstStatus Status = EDstStatus::Fail;
+ TString Error;
+
+ bool operator==(const TDstResponse& o) const {
+ return Status == o.Status && Error == o.Error;
+ }
+ };
+
+ using TDsts = NTvmApi::TDstSet;
+ using TAddResponse = TMap<NTvmApi::TClientSettings::TDst, TDstResponse>;
+
+ class TTvmClient: public NTvmApi::TThreadedUpdater {
+ public:
+ static TAsyncUpdaterPtr Create(const NTvmApi::TClientSettings& settings, TLoggerPtr logger);
virtual ~TTvmClient();
-
- NThreading::TFuture<TAddResponse> Add(TDsts&& dsts);
- std::optional<TString> GetOptionalServiceTicketFor(const TTvmId dst);
-
- protected: // for tests
- struct TTask {
- ui64 Id = 0;
- NThreading::TPromise<TAddResponse> Promise;
- TDsts Dsts;
- };
-
- using TBase = NTvmApi::TThreadedUpdater;
-
- protected: // for tests
- TTvmClient(const NTvmApi::TClientSettings& settings, TLoggerPtr logger);
-
- void Worker() override;
- void ProcessTasks();
-
- void SetResponseForTask(TTask& task, const TServiceTickets& cache);
-
- private:
- std::atomic<ui64> TaskIds_ = {0};
- TLockFreeQueue<TTask> TaskQueue_;
- TVector<TTask> Tasks_;
- };
-}
+
+ NThreading::TFuture<TAddResponse> Add(TDsts&& dsts);
+ std::optional<TString> GetOptionalServiceTicketFor(const TTvmId dst);
+
+ protected: // for tests
+ struct TTask {
+ ui64 Id = 0;
+ NThreading::TPromise<TAddResponse> Promise;
+ TDsts Dsts;
+ };
+
+ using TBase = NTvmApi::TThreadedUpdater;
+
+ protected: // for tests
+ TTvmClient(const NTvmApi::TClientSettings& settings, TLoggerPtr logger);
+
+ void Worker() override;
+ void ProcessTasks();
+
+ void SetResponseForTask(TTask& task, const TServiceTickets& cache);
+
+ private:
+ std::atomic<ui64> TaskIds_ = {0};
+ TLockFreeQueue<TTask> TaskQueue_;
+ TVector<TTask> Tasks_;
+ };
+}
diff --git a/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/tvm_client_ut.cpp b/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/tvm_client_ut.cpp
index 89403c15e4..e0b4562a31 100644
--- a/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/tvm_client_ut.cpp
+++ b/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/tvm_client_ut.cpp
@@ -1,119 +1,119 @@
-#include <library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h>
-
-#include <library/cpp/tvmauth/client/misc/disk_cache.h>
-
-#include <library/cpp/tvmauth/unittest.h>
-
+#include <library/cpp/tvmauth/client/misc/api/dynamic_dst/tvm_client.h>
+
+#include <library/cpp/tvmauth/client/misc/disk_cache.h>
+
+#include <library/cpp/tvmauth/unittest.h>
+
#include <library/cpp/testing/unittest/registar.h>
-
-#include <util/stream/file.h>
-#include <util/system/fs.h>
-
-#include <regex>
-
-using namespace NTvmAuth;
-using namespace NTvmAuth::NDynamicClient;
-
-Y_UNIT_TEST_SUITE(DynamicClient) {
- static const std::regex TIME_REGEX(R"(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{6}Z)");
- static const TString CACHE_DIR = "./tmp/";
-
- static void WriteFile(TString name, TStringBuf body, TInstant time) {
- NFs::Remove(CACHE_DIR + name);
- TFileOutput f(CACHE_DIR + name);
- f << TDiskWriter::PrepareData(time, body);
- }
-
- static void CleanCache() {
- NFs::RemoveRecursive(CACHE_DIR);
- NFs::MakeDirectoryRecursive(CACHE_DIR);
- }
-
- class TLogger: public NTvmAuth::ILogger {
- public:
- void Log(int lvl, const TString& msg) override {
- Cout << TInstant::Now() << " lvl=" << lvl << " msg: " << msg << "\n";
- Stream << lvl << ": " << msg << Endl;
- }
-
- TStringStream Stream;
- };
-
- class TOfflineUpdater: public NDynamicClient::TTvmClient {
- public:
- TOfflineUpdater(const NTvmApi::TClientSettings& settings,
- TIntrusivePtr<TLogger> l,
- bool fail = true,
- std::vector<TString> tickets = {})
- : TTvmClient(settings, l)
- , Fail(fail)
- , Tickets(std::move(tickets))
- {
- Init();
- ExpBackoff_.SetEnabled(false);
- }
-
- NUtils::TFetchResult FetchServiceTicketsFromHttp(const TString& req) const override {
- if (Fail) {
- throw yexception() << "tickets: alarm";
- }
-
- TString response;
- if (!Tickets.empty()) {
- response = Tickets.front();
- Tickets.erase(Tickets.begin());
- }
-
- Cout << "*** FetchServiceTicketsFromHttp. request: " << req << ". response: " << response << Endl;
- return {200, {}, "/2/ticket", response, ""};
- }
-
- NUtils::TFetchResult FetchPublicKeysFromHttp() const override {
- if (Fail) {
- throw yexception() << "keysalarm";
- }
- Cout << "*** FetchPublicKeysFromHttp" << Endl;
- return {200, {}, "/2/keys", PublicKeys, ""};
- }
-
- using TTvmClient::GetDsts;
- using TTvmClient::ProcessTasks;
- using TTvmClient::SetResponseForTask;
- using TTvmClient::Worker;
-
- bool Fail = true;
- TString PublicKeys = NUnittest::TVMKNIFE_PUBLIC_KEYS;
- mutable std::vector<TString> Tickets;
- };
-
+
+#include <util/stream/file.h>
+#include <util/system/fs.h>
+
+#include <regex>
+
+using namespace NTvmAuth;
+using namespace NTvmAuth::NDynamicClient;
+
+Y_UNIT_TEST_SUITE(DynamicClient) {
+ static const std::regex TIME_REGEX(R"(\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d.\d{6}Z)");
+ static const TString CACHE_DIR = "./tmp/";
+
+ static void WriteFile(TString name, TStringBuf body, TInstant time) {
+ NFs::Remove(CACHE_DIR + name);
+ TFileOutput f(CACHE_DIR + name);
+ f << TDiskWriter::PrepareData(time, body);
+ }
+
+ static void CleanCache() {
+ NFs::RemoveRecursive(CACHE_DIR);
+ NFs::MakeDirectoryRecursive(CACHE_DIR);
+ }
+
+ class TLogger: public NTvmAuth::ILogger {
+ public:
+ void Log(int lvl, const TString& msg) override {
+ Cout << TInstant::Now() << " lvl=" << lvl << " msg: " << msg << "\n";
+ Stream << lvl << ": " << msg << Endl;
+ }
+
+ TStringStream Stream;
+ };
+
+ class TOfflineUpdater: public NDynamicClient::TTvmClient {
+ public:
+ TOfflineUpdater(const NTvmApi::TClientSettings& settings,
+ TIntrusivePtr<TLogger> l,
+ bool fail = true,
+ std::vector<TString> tickets = {})
+ : TTvmClient(settings, l)
+ , Fail(fail)
+ , Tickets(std::move(tickets))
+ {
+ Init();
+ ExpBackoff_.SetEnabled(false);
+ }
+
+ NUtils::TFetchResult FetchServiceTicketsFromHttp(const TString& req) const override {
+ if (Fail) {
+ throw yexception() << "tickets: alarm";
+ }
+
+ TString response;
+ if (!Tickets.empty()) {
+ response = Tickets.front();
+ Tickets.erase(Tickets.begin());
+ }
+
+ Cout << "*** FetchServiceTicketsFromHttp. request: " << req << ". response: " << response << Endl;
+ return {200, {}, "/2/ticket", response, ""};
+ }
+
+ NUtils::TFetchResult FetchPublicKeysFromHttp() const override {
+ if (Fail) {
+ throw yexception() << "keysalarm";
+ }
+ Cout << "*** FetchPublicKeysFromHttp" << Endl;
+ return {200, {}, "/2/keys", PublicKeys, ""};
+ }
+
+ using TTvmClient::GetDsts;
+ using TTvmClient::ProcessTasks;
+ using TTvmClient::SetResponseForTask;
+ using TTvmClient::Worker;
+
+ bool Fail = true;
+ TString PublicKeys = NUnittest::TVMKNIFE_PUBLIC_KEYS;
+ mutable std::vector<TString> Tickets;
+ };
+
Y_UNIT_TEST(StartWithIncompleteTicketsSet) {
- TInstant now = TInstant::Now();
- CleanCache();
- WriteFile("./service_tickets",
- R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
- "\t100500",
- now);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
+ TInstant now = TInstant::Now();
+ CleanCache();
+ WriteFile("./service_tickets",
+ R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
+ "\t100500",
+ now);
+
+ NTvmApi::TClientSettings s;
+ s.SetSelfTvmId(100500);
s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}}, false);
s.SetDiskCacheDir(CACHE_DIR);
auto l = MakeIntrusive<TLogger>();
{
- TOfflineUpdater client(s,
- l,
- false,
- {
- R"({"213" : { "error" : "some error"}})",
- R"({"123" : { "ticket" : "service_ticket_3"}})",
- });
+ TOfflineUpdater client(s,
+ l,
+ false,
+ {
+ R"({"213" : { "error" : "some error"}})",
+ R"({"123" : { "ticket" : "service_ticket_3"}})",
+ });
UNIT_ASSERT_VALUES_EQUAL(TClientStatus::IncompleteTicketsSet, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
NThreading::TFuture<TAddResponse> fut = client.Add({123});
UNIT_ASSERT_VALUES_EQUAL(TClientStatus::IncompleteTicketsSet, client.GetStatus());
@@ -121,12 +121,12 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
client.Worker();
UNIT_ASSERT_VALUES_EQUAL(TClientStatus::IncompleteTicketsSet, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
UNIT_ASSERT(fut.HasValue());
TAddResponse resp{
@@ -134,7 +134,7 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
};
UNIT_ASSERT_VALUES_EQUAL(resp, fut.GetValue());
- UNIT_ASSERT(client.Tickets.empty());
+ UNIT_ASSERT(client.Tickets.empty());
TDsts dsts{19, 123, 213};
UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
@@ -144,7 +144,7 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
}
Y_UNIT_TEST(StartWithEmptyTicketsSet) {
- CleanCache();
+ CleanCache();
NTvmApi::TClientSettings s;
s.SetSelfTvmId(100500);
@@ -154,16 +154,16 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
auto l = MakeIntrusive<TLogger>();
{
- TOfflineUpdater client(s,
- l,
- false,
- {
- R"({"213" : { "error" : "some error"}})",
- R"({"123" : { "ticket" : "3:serv:CBAQ__________9_IgYIlJEGEHs:CcafYQH-FF5XaXMuJrgLZj98bIC54cs1ZkcFS9VV_9YM9iOM_0PXCtMkdg85rFjxE_BMpg7bE8ZuoqNfdw0FPt0BAKNeISwlydj4o0IjY82--LZBpP8CRn-EpAnkRaDShdlfrcF2pk1SSmEX8xdyZVQEnkUPY0cHGlFnu231vnE"}})",
- });
+ TOfflineUpdater client(s,
+ l,
+ false,
+ {
+ R"({"213" : { "error" : "some error"}})",
+ R"({"123" : { "ticket" : "3:serv:CBAQ__________9_IgYIlJEGEHs:CcafYQH-FF5XaXMuJrgLZj98bIC54cs1ZkcFS9VV_9YM9iOM_0PXCtMkdg85rFjxE_BMpg7bE8ZuoqNfdw0FPt0BAKNeISwlydj4o0IjY82--LZBpP8CRn-EpAnkRaDShdlfrcF2pk1SSmEX8xdyZVQEnkUPY0cHGlFnu231vnE"}})",
+ });
UNIT_ASSERT_VALUES_EQUAL(TClientStatus::IncompleteTicketsSet, client.GetStatus());
- UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
UNIT_ASSERT_EXCEPTION_CONTAINS(client.GetOptionalServiceTicketFor(213), TMissingServiceTicket, "some error");
NThreading::TFuture<TAddResponse> fut = client.Add({123});
@@ -172,10 +172,10 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
client.Worker();
UNIT_ASSERT_VALUES_EQUAL(TClientStatus::IncompleteTicketsSet, client.GetStatus());
- UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
UNIT_ASSERT(fut.HasValue());
TAddResponse resp{
@@ -183,7 +183,7 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
};
UNIT_ASSERT_VALUES_EQUAL(resp, fut.GetValue());
- UNIT_ASSERT(client.Tickets.empty());
+ UNIT_ASSERT(client.Tickets.empty());
TDsts dsts{123, 213};
UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
@@ -193,443 +193,443 @@ Y_UNIT_TEST_SUITE(DynamicClient) {
};
Y_UNIT_TEST(StartWithIncompleteCacheAndAdd) {
TInstant now = TInstant::Now();
- CleanCache();
- WriteFile("./service_tickets",
+ CleanCache();
+ WriteFile("./service_tickets",
R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
"\t100500",
now);
NTvmApi::TClientSettings s;
s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
-
- UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l),
- TRetriableException,
- "Failed to start TvmClient. You can retry: ServiceTickets: tickets: alarm");
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "4: Failed to get ServiceTickets: tickets: alarm\n"
- << "4: Failed to get ServiceTickets: tickets: alarm\n"
- << "4: Failed to get ServiceTickets: tickets: alarm\n"
- << "4: Failed to update service tickets: tickets: alarm\n",
- std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
- l->Stream.Str().clear();
-
- {
- TOfflineUpdater client(s,
- l,
- false,
- {
- R"({"213" : { "ticket" : "service_ticket_2"}})",
- R"({"123" : { "ticket" : "service_ticket_3"}})",
- });
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
-
- NThreading::TFuture<TAddResponse> fut = client.Add({123});
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
-
- client.Worker();
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
-
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
-
- UNIT_ASSERT(fut.HasValue());
- TAddResponse resp{
- {123, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp, fut.GetValue());
-
- UNIT_ASSERT(client.Tickets.empty());
-
- TDsts dsts{19, 123, 213};
- UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
- << "6: Cache was partly updated with 1 service ticket(s). total: 2\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Adding dst: got task #1 with 1 dsts\n"
- << "7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
- << "6: Cache was partly updated with 1 service ticket(s). total: 3\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Adding dst: task #1: dst=123 got ticket\n"
- << "7: Adding dst: task #1: set value\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(StartWithCacheAndAdd) {
- TInstant now = TInstant::Now();
- CleanCache();
- WriteFile("./service_tickets",
- R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
- "\t100500",
- now);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater client(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
-
- client.Fail = false;
- client.Tickets = {
- R"({"123" : { "ticket" : "service_ticket_3"}, "213" : { "ticket" : "service_ticket_2"}})",
- };
- NThreading::TFuture<TAddResponse> fut = client.Add({123, 213});
-
- client.Worker();
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
-
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
-
- UNIT_ASSERT(fut.HasValue());
- TAddResponse resp{
- {123, {EDstStatus::Success, ""}},
- {213, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp, fut.GetValue());
-
- UNIT_ASSERT(client.Tickets.empty());
-
- TDsts dsts{19, 123, 213};
- UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Adding dst: got task #1 with 2 dsts\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "6: Cache was partly updated with 2 service ticket(s). total: 3\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Adding dst: task #1: dst=123 got ticket\n"
- << "7: Adding dst: task #1: dst=213 got ticket\n"
- << "7: Adding dst: task #1: set value\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(StartWithCacheAndAddSeveral) {
- TInstant now = TInstant::Now();
- CleanCache();
- WriteFile("./service_tickets",
- R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
- "\t100500",
- now);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater client(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
-
- client.Fail = false;
- client.Tickets = {
- R"({"123" : { "ticket" : "service_ticket_3"}, "213" : { "ticket" : "service_ticket_2"}})",
- };
- NThreading::TFuture<TAddResponse> fut1 = client.Add({123});
- NThreading::TFuture<TAddResponse> fut2 = client.Add({213});
-
- client.Worker();
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
-
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
-
- UNIT_ASSERT(fut1.HasValue());
- TAddResponse resp1{
- {123, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp1, fut1.GetValue());
-
- UNIT_ASSERT(fut2.HasValue());
- TAddResponse resp2{
- {213, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp2, fut2.GetValue());
-
- UNIT_ASSERT(client.Tickets.empty());
-
- TDsts dsts{19, 123, 213};
- UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Adding dst: got task #1 with 1 dsts\n"
- << "7: Adding dst: got task #2 with 1 dsts\n"
- << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
- << "6: Cache was partly updated with 2 service ticket(s). total: 3\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Adding dst: task #1: dst=123 got ticket\n"
- << "7: Adding dst: task #1: set value\n"
- << "7: Adding dst: task #2: dst=213 got ticket\n"
- << "7: Adding dst: task #2: set value\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(StartWithCacheAndAddSeveralWithErrors) {
- TInstant now = TInstant::Now();
- CleanCache();
- WriteFile("./service_tickets",
- R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
- "\t100500",
- now);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater client(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
-
- UNIT_ASSERT(client.GetOptionalServiceTicketFor(19));
- UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX",
- *client.GetOptionalServiceTicketFor(19));
- UNIT_ASSERT(!client.GetOptionalServiceTicketFor(456));
-
- client.Fail = false;
- client.Tickets = {
- R"({
- "123" : { "ticket" : "service_ticket_3"},
- "213" : { "ticket" : "service_ticket_2"},
- "456" : { "error" : "error_3"}
- })",
- };
- NThreading::TFuture<TAddResponse> fut1 = client.Add({123, 213});
- NThreading::TFuture<TAddResponse> fut2 = client.Add({213, 456});
-
- client.Worker();
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
-
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(456));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
- UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(456));
-
- UNIT_ASSERT(client.GetOptionalServiceTicketFor(19));
- UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX",
- *client.GetOptionalServiceTicketFor(19));
- UNIT_ASSERT_EXCEPTION_CONTAINS(client.GetOptionalServiceTicketFor(456),
- TMissingServiceTicket,
- "Failed to get ticket for '456': error_3");
-
- UNIT_ASSERT(fut1.HasValue());
- TAddResponse resp1{
- {123, {EDstStatus::Success, ""}},
- {213, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp1, fut1.GetValue());
-
- UNIT_ASSERT(fut2.HasValue());
- TAddResponse resp2{
- {213, {EDstStatus::Success, ""}},
- {456, {EDstStatus::Fail, "error_3"}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp2, fut2.GetValue());
-
- UNIT_ASSERT(client.Tickets.empty());
-
- TDsts dsts{19, 123, 213};
- UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Adding dst: got task #1 with 2 dsts\n"
- << "7: Adding dst: got task #2 with 2 dsts\n"
- << "7: Response with service tickets for 3 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 3 destination(s)\n"
- << "3: Failed to get service ticket for dst=456: error_3\n"
- << "6: Cache was partly updated with 2 service ticket(s). total: 3\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Adding dst: task #1: dst=123 got ticket\n"
- << "7: Adding dst: task #1: dst=213 got ticket\n"
- << "7: Adding dst: task #1: set value\n"
- << "7: Adding dst: task #2: dst=213 got ticket\n"
- << "4: Adding dst: task #2: dst=456 failed to get ticket: error_3\n"
- << "7: Adding dst: task #2: set value\n",
- l->Stream.Str());
- }
-
- Y_UNIT_TEST(WithException) {
- TInstant now = TInstant::Now();
- CleanCache();
- WriteFile("./service_tickets",
- R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
- "\t100500",
- now);
-
- NTvmApi::TClientSettings s;
- s.SetSelfTvmId(100500);
- s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
- s.SetDiskCacheDir(CACHE_DIR);
-
- auto l = MakeIntrusive<TLogger>();
- {
- TOfflineUpdater client(s, l);
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
-
- client.Fail = false;
- client.Tickets = {
- R"({
- "123" : { "ticket" : "service_ticket_3"},
- "213" : { "ticket" : "service_ticket_2"},
- "456" : { "error" : "error_3"},
- "789" : { "ticket" : "service_ticket_4"}
- })",
- };
- NThreading::TFuture<TAddResponse> fut1 = client.Add({123, 213});
- NThreading::TFuture<TAddResponse> fut2 = client.Add({213, 456});
- NThreading::TFuture<TAddResponse> fut3 = client.Add({789});
-
- fut2.Subscribe([](const auto&) {
- throw yexception() << "planed exc";
- });
- fut3.Subscribe([](const auto&) {
- throw 5;
- });
-
- UNIT_ASSERT_NO_EXCEPTION(client.Worker());
- UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
-
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
- UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(456));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
- UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
- UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(456));
-
- UNIT_ASSERT(fut1.HasValue());
- TAddResponse resp1{
- {123, {EDstStatus::Success, ""}},
- {213, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp1, fut1.GetValue());
-
- UNIT_ASSERT(fut2.HasValue());
- TAddResponse resp2{
- {213, {EDstStatus::Success, ""}},
- {456, {EDstStatus::Fail, "error_3"}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp2, fut2.GetValue());
-
- UNIT_ASSERT(fut3.HasValue());
- TAddResponse resp3{
- {789, {EDstStatus::Success, ""}},
- };
- UNIT_ASSERT_VALUES_EQUAL(resp3, fut3.GetValue());
-
- UNIT_ASSERT(client.Tickets.empty());
-
- TDsts dsts{19, 123, 213, 789};
- UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
- }
-
- UNIT_ASSERT_VALUES_EQUAL(
- TStringBuilder()
- << "6: File './tmp/service_tickets' was successfully read\n"
- << "6: Got 1 service ticket(s) from disk\n"
- << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
- << "7: File './tmp/retry_settings' does not exist\n"
- << "7: Adding dst: got task #1 with 2 dsts\n"
- << "7: Adding dst: got task #2 with 2 dsts\n"
- << "7: Adding dst: got task #3 with 1 dsts\n"
- << "7: Response with service tickets for 4 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
- << "7: Got responses with service tickets with 1 pages for 4 destination(s)\n"
- << "3: Failed to get service ticket for dst=456: error_3\n"
- << "6: Cache was partly updated with 3 service ticket(s). total: 4\n"
- << "6: File './tmp/service_tickets' was successfully written\n"
- << "7: Adding dst: task #1: dst=123 got ticket\n"
- << "7: Adding dst: task #1: dst=213 got ticket\n"
- << "7: Adding dst: task #1: set value\n"
- << "7: Adding dst: task #2: dst=213 got ticket\n"
- << "4: Adding dst: task #2: dst=456 failed to get ticket: error_3\n"
- << "7: Adding dst: task #2: set value\n"
- << "3: Adding dst: task #2: exception: planed exc\n"
- << "7: Adding dst: task #3: dst=789 got ticket\n"
- << "7: Adding dst: task #3: set value\n"
- << "3: Adding dst: task #3: exception: unknown error\n",
- l->Stream.Str());
- }
-}
-
-template <>
-void Out<NTvmAuth::NDynamicClient::TDstResponse>(IOutputStream& out, const NTvmAuth::NDynamicClient::TDstResponse& m) {
- out << m.Status << " (" << m.Error << ")";
-}
-
-template <>
-void Out<NTvmAuth::NTvmApi::TClientSettings::TDst>(IOutputStream& out, const NTvmAuth::NTvmApi::TClientSettings::TDst& m) {
- out << m.Id;
-}
+ s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}, {"kolmo", 213}});
+ s.SetDiskCacheDir(CACHE_DIR);
+
+ auto l = MakeIntrusive<TLogger>();
+
+ UNIT_ASSERT_EXCEPTION_CONTAINS(TOfflineUpdater(s, l),
+ TRetriableException,
+ "Failed to start TvmClient. You can retry: ServiceTickets: tickets: alarm");
+ UNIT_ASSERT_VALUES_EQUAL(
+ TStringBuilder()
+ << "6: File './tmp/service_tickets' was successfully read\n"
+ << "6: Got 1 service ticket(s) from disk\n"
+ << "6: Cache was updated with 1 service ticket(s): XXXXXXXXXXX\n"
+ << "7: File './tmp/retry_settings' does not exist\n"
+ << "4: Failed to get ServiceTickets: tickets: alarm\n"
+ << "4: Failed to get ServiceTickets: tickets: alarm\n"
+ << "4: Failed to get ServiceTickets: tickets: alarm\n"
+ << "4: Failed to update service tickets: tickets: alarm\n",
+ std::regex_replace(std::string(l->Stream.Str()), TIME_REGEX, "XXXXXXXXXXX"));
+ l->Stream.Str().clear();
+
+ {
+ TOfflineUpdater client(s,
+ l,
+ false,
+ {
+ R"({"213" : { "ticket" : "service_ticket_2"}})",
+ R"({"123" : { "ticket" : "service_ticket_3"}})",
+ });
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
+
+ NThreading::TFuture<TAddResponse> fut = client.Add({123});
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+
+ client.Worker();
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+
+ UNIT_ASSERT(fut.HasValue());
+ TAddResponse resp{
+ {123, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp, fut.GetValue());
+
+ UNIT_ASSERT(client.Tickets.empty());
+
+ TDsts dsts{19, 123, 213};
+ UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(
+ TStringBuilder()
+ << "6: File './tmp/service_tickets' was successfully read\n"
+ << "6: Got 1 service ticket(s) from disk\n"
+ << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
+ << "7: File './tmp/retry_settings' does not exist\n"
+ << "7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
+ << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
+ << "6: Cache was partly updated with 1 service ticket(s). total: 2\n"
+ << "6: File './tmp/service_tickets' was successfully written\n"
+ << "7: Adding dst: got task #1 with 1 dsts\n"
+ << "7: Response with service tickets for 1 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
+ << "7: Got responses with service tickets with 1 pages for 1 destination(s)\n"
+ << "6: Cache was partly updated with 1 service ticket(s). total: 3\n"
+ << "6: File './tmp/service_tickets' was successfully written\n"
+ << "7: Adding dst: task #1: dst=123 got ticket\n"
+ << "7: Adding dst: task #1: set value\n",
+ l->Stream.Str());
+ }
+
+ Y_UNIT_TEST(StartWithCacheAndAdd) {
+ TInstant now = TInstant::Now();
+ CleanCache();
+ WriteFile("./service_tickets",
+ R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
+ "\t100500",
+ now);
+
+ NTvmApi::TClientSettings s;
+ s.SetSelfTvmId(100500);
+ s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
+ s.SetDiskCacheDir(CACHE_DIR);
+
+ auto l = MakeIntrusive<TLogger>();
+ {
+ TOfflineUpdater client(s, l);
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+
+ client.Fail = false;
+ client.Tickets = {
+ R"({"123" : { "ticket" : "service_ticket_3"}, "213" : { "ticket" : "service_ticket_2"}})",
+ };
+ NThreading::TFuture<TAddResponse> fut = client.Add({123, 213});
+
+ client.Worker();
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+
+ UNIT_ASSERT(fut.HasValue());
+ TAddResponse resp{
+ {123, {EDstStatus::Success, ""}},
+ {213, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp, fut.GetValue());
+
+ UNIT_ASSERT(client.Tickets.empty());
+
+ TDsts dsts{19, 123, 213};
+ UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(
+ TStringBuilder()
+ << "6: File './tmp/service_tickets' was successfully read\n"
+ << "6: Got 1 service ticket(s) from disk\n"
+ << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
+ << "7: File './tmp/retry_settings' does not exist\n"
+ << "7: Adding dst: got task #1 with 2 dsts\n"
+ << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
+ << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
+ << "6: Cache was partly updated with 2 service ticket(s). total: 3\n"
+ << "6: File './tmp/service_tickets' was successfully written\n"
+ << "7: Adding dst: task #1: dst=123 got ticket\n"
+ << "7: Adding dst: task #1: dst=213 got ticket\n"
+ << "7: Adding dst: task #1: set value\n",
+ l->Stream.Str());
+ }
+
+ Y_UNIT_TEST(StartWithCacheAndAddSeveral) {
+ TInstant now = TInstant::Now();
+ CleanCache();
+ WriteFile("./service_tickets",
+ R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
+ "\t100500",
+ now);
+
+ NTvmApi::TClientSettings s;
+ s.SetSelfTvmId(100500);
+ s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
+ s.SetDiskCacheDir(CACHE_DIR);
+
+ auto l = MakeIntrusive<TLogger>();
+ {
+ TOfflineUpdater client(s, l);
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+
+ client.Fail = false;
+ client.Tickets = {
+ R"({"123" : { "ticket" : "service_ticket_3"}, "213" : { "ticket" : "service_ticket_2"}})",
+ };
+ NThreading::TFuture<TAddResponse> fut1 = client.Add({123});
+ NThreading::TFuture<TAddResponse> fut2 = client.Add({213});
+
+ client.Worker();
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+
+ UNIT_ASSERT(fut1.HasValue());
+ TAddResponse resp1{
+ {123, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp1, fut1.GetValue());
+
+ UNIT_ASSERT(fut2.HasValue());
+ TAddResponse resp2{
+ {213, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp2, fut2.GetValue());
+
+ UNIT_ASSERT(client.Tickets.empty());
+
+ TDsts dsts{19, 123, 213};
+ UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(
+ TStringBuilder()
+ << "6: File './tmp/service_tickets' was successfully read\n"
+ << "6: Got 1 service ticket(s) from disk\n"
+ << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
+ << "7: File './tmp/retry_settings' does not exist\n"
+ << "7: Adding dst: got task #1 with 1 dsts\n"
+ << "7: Adding dst: got task #2 with 1 dsts\n"
+ << "7: Response with service tickets for 2 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
+ << "7: Got responses with service tickets with 1 pages for 2 destination(s)\n"
+ << "6: Cache was partly updated with 2 service ticket(s). total: 3\n"
+ << "6: File './tmp/service_tickets' was successfully written\n"
+ << "7: Adding dst: task #1: dst=123 got ticket\n"
+ << "7: Adding dst: task #1: set value\n"
+ << "7: Adding dst: task #2: dst=213 got ticket\n"
+ << "7: Adding dst: task #2: set value\n",
+ l->Stream.Str());
+ }
+
+ Y_UNIT_TEST(StartWithCacheAndAddSeveralWithErrors) {
+ TInstant now = TInstant::Now();
+ CleanCache();
+ WriteFile("./service_tickets",
+ R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
+ "\t100500",
+ now);
+
+ NTvmApi::TClientSettings s;
+ s.SetSelfTvmId(100500);
+ s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
+ s.SetDiskCacheDir(CACHE_DIR);
+
+ auto l = MakeIntrusive<TLogger>();
+ {
+ TOfflineUpdater client(s, l);
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+
+ UNIT_ASSERT(client.GetOptionalServiceTicketFor(19));
+ UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX",
+ *client.GetOptionalServiceTicketFor(19));
+ UNIT_ASSERT(!client.GetOptionalServiceTicketFor(456));
+
+ client.Fail = false;
+ client.Tickets = {
+ R"({
+ "123" : { "ticket" : "service_ticket_3"},
+ "213" : { "ticket" : "service_ticket_2"},
+ "456" : { "error" : "error_3"}
+ })",
+ };
+ NThreading::TFuture<TAddResponse> fut1 = client.Add({123, 213});
+ NThreading::TFuture<TAddResponse> fut2 = client.Add({213, 456});
+
+ client.Worker();
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(456));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(456));
+
+ UNIT_ASSERT(client.GetOptionalServiceTicketFor(19));
+ UNIT_ASSERT_VALUES_EQUAL("3:serv:CBAQ__________9_IgYIKhCUkQY:CX",
+ *client.GetOptionalServiceTicketFor(19));
+ UNIT_ASSERT_EXCEPTION_CONTAINS(client.GetOptionalServiceTicketFor(456),
+ TMissingServiceTicket,
+ "Failed to get ticket for '456': error_3");
+
+ UNIT_ASSERT(fut1.HasValue());
+ TAddResponse resp1{
+ {123, {EDstStatus::Success, ""}},
+ {213, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp1, fut1.GetValue());
+
+ UNIT_ASSERT(fut2.HasValue());
+ TAddResponse resp2{
+ {213, {EDstStatus::Success, ""}},
+ {456, {EDstStatus::Fail, "error_3"}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp2, fut2.GetValue());
+
+ UNIT_ASSERT(client.Tickets.empty());
+
+ TDsts dsts{19, 123, 213};
+ UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(
+ TStringBuilder()
+ << "6: File './tmp/service_tickets' was successfully read\n"
+ << "6: Got 1 service ticket(s) from disk\n"
+ << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
+ << "7: File './tmp/retry_settings' does not exist\n"
+ << "7: Adding dst: got task #1 with 2 dsts\n"
+ << "7: Adding dst: got task #2 with 2 dsts\n"
+ << "7: Response with service tickets for 3 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
+ << "7: Got responses with service tickets with 1 pages for 3 destination(s)\n"
+ << "3: Failed to get service ticket for dst=456: error_3\n"
+ << "6: Cache was partly updated with 2 service ticket(s). total: 3\n"
+ << "6: File './tmp/service_tickets' was successfully written\n"
+ << "7: Adding dst: task #1: dst=123 got ticket\n"
+ << "7: Adding dst: task #1: dst=213 got ticket\n"
+ << "7: Adding dst: task #1: set value\n"
+ << "7: Adding dst: task #2: dst=213 got ticket\n"
+ << "4: Adding dst: task #2: dst=456 failed to get ticket: error_3\n"
+ << "7: Adding dst: task #2: set value\n",
+ l->Stream.Str());
+ }
+
+ Y_UNIT_TEST(WithException) {
+ TInstant now = TInstant::Now();
+ CleanCache();
+ WriteFile("./service_tickets",
+ R"({"19" : { "ticket" : "3:serv:CBAQ__________9_IgYIKhCUkQY:CX"}})"
+ "\t100500",
+ now);
+
+ NTvmApi::TClientSettings s;
+ s.SetSelfTvmId(100500);
+ s.EnableServiceTicketsFetchOptions("qwerty", {{"blackbox", 19}});
+ s.SetDiskCacheDir(CACHE_DIR);
+
+ auto l = MakeIntrusive<TLogger>();
+ {
+ TOfflineUpdater client(s, l);
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+
+ client.Fail = false;
+ client.Tickets = {
+ R"({
+ "123" : { "ticket" : "service_ticket_3"},
+ "213" : { "ticket" : "service_ticket_2"},
+ "456" : { "error" : "error_3"},
+ "789" : { "ticket" : "service_ticket_4"}
+ })",
+ };
+ NThreading::TFuture<TAddResponse> fut1 = client.Add({123, 213});
+ NThreading::TFuture<TAddResponse> fut2 = client.Add({213, 456});
+ NThreading::TFuture<TAddResponse> fut3 = client.Add({789});
+
+ fut2.Subscribe([](const auto&) {
+ throw yexception() << "planed exc";
+ });
+ fut3.Subscribe([](const auto&) {
+ throw 5;
+ });
+
+ UNIT_ASSERT_NO_EXCEPTION(client.Worker());
+ UNIT_ASSERT_VALUES_EQUAL(TClientStatus::Ok, client.GetStatus());
+
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(19));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(213));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->TicketsById.contains(123));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->TicketsById.contains(456));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(19));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(213));
+ UNIT_ASSERT(!client.GetCachedServiceTickets()->ErrorsById.contains(123));
+ UNIT_ASSERT(client.GetCachedServiceTickets()->ErrorsById.contains(456));
+
+ UNIT_ASSERT(fut1.HasValue());
+ TAddResponse resp1{
+ {123, {EDstStatus::Success, ""}},
+ {213, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp1, fut1.GetValue());
+
+ UNIT_ASSERT(fut2.HasValue());
+ TAddResponse resp2{
+ {213, {EDstStatus::Success, ""}},
+ {456, {EDstStatus::Fail, "error_3"}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp2, fut2.GetValue());
+
+ UNIT_ASSERT(fut3.HasValue());
+ TAddResponse resp3{
+ {789, {EDstStatus::Success, ""}},
+ };
+ UNIT_ASSERT_VALUES_EQUAL(resp3, fut3.GetValue());
+
+ UNIT_ASSERT(client.Tickets.empty());
+
+ TDsts dsts{19, 123, 213, 789};
+ UNIT_ASSERT_VALUES_EQUAL(dsts, client.GetDsts());
+ }
+
+ UNIT_ASSERT_VALUES_EQUAL(
+ TStringBuilder()
+ << "6: File './tmp/service_tickets' was successfully read\n"
+ << "6: Got 1 service ticket(s) from disk\n"
+ << "6: Cache was updated with 1 service ticket(s): " << TInstant::Seconds(now.Seconds()) << "\n"
+ << "7: File './tmp/retry_settings' does not exist\n"
+ << "7: Adding dst: got task #1 with 2 dsts\n"
+ << "7: Adding dst: got task #2 with 2 dsts\n"
+ << "7: Adding dst: got task #3 with 1 dsts\n"
+ << "7: Response with service tickets for 4 destination(s) was successfully fetched from https://tvm-api.yandex.net\n"
+ << "7: Got responses with service tickets with 1 pages for 4 destination(s)\n"
+ << "3: Failed to get service ticket for dst=456: error_3\n"
+ << "6: Cache was partly updated with 3 service ticket(s). total: 4\n"
+ << "6: File './tmp/service_tickets' was successfully written\n"
+ << "7: Adding dst: task #1: dst=123 got ticket\n"
+ << "7: Adding dst: task #1: dst=213 got ticket\n"
+ << "7: Adding dst: task #1: set value\n"
+ << "7: Adding dst: task #2: dst=213 got ticket\n"
+ << "4: Adding dst: task #2: dst=456 failed to get ticket: error_3\n"
+ << "7: Adding dst: task #2: set value\n"
+ << "3: Adding dst: task #2: exception: planed exc\n"
+ << "7: Adding dst: task #3: dst=789 got ticket\n"
+ << "7: Adding dst: task #3: set value\n"
+ << "3: Adding dst: task #3: exception: unknown error\n",
+ l->Stream.Str());
+ }
+}
+
+template <>
+void Out<NTvmAuth::NDynamicClient::TDstResponse>(IOutputStream& out, const NTvmAuth::NDynamicClient::TDstResponse& m) {
+ out << m.Status << " (" << m.Error << ")";
+}
+
+template <>
+void Out<NTvmAuth::NTvmApi::TClientSettings::TDst>(IOutputStream& out, const NTvmAuth::NTvmApi::TClientSettings::TDst& m) {
+ out << m.Id;
+}
diff --git a/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/ya.make b/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/ya.make
index 5d01ffaad8..12290a32bd 100644
--- a/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/ya.make
+++ b/library/cpp/tvmauth/client/misc/api/dynamic_dst/ut/ya.make
@@ -1,11 +1,11 @@
-UNITTEST_FOR(library/cpp/tvmauth/client/misc/api/dynamic_dst)
-
-OWNER(g:passport_infra)
-
-SRCS(
- tvm_client_ut.cpp
-)
-
+UNITTEST_FOR(library/cpp/tvmauth/client/misc/api/dynamic_dst)
+
+OWNER(g:passport_infra)
+
+SRCS(
+ tvm_client_ut.cpp
+)
+
ENV(YA_TEST_SHORTEN_WINE_PATH=1)
-END()
+END()
diff --git a/library/cpp/tvmauth/client/misc/api/dynamic_dst/ya.make b/library/cpp/tvmauth/client/misc/api/dynamic_dst/ya.make
index f3858e602f..2caadae017 100644
--- a/library/cpp/tvmauth/client/misc/api/dynamic_dst/ya.make
+++ b/library/cpp/tvmauth/client/misc/api/dynamic_dst/ya.make
@@ -1,20 +1,20 @@
-LIBRARY()
-
-OWNER(g:passport_infra)
-
-PEERDIR(
+LIBRARY()
+
+OWNER(g:passport_infra)
+
+PEERDIR(
library/cpp/threading/future
- library/cpp/tvmauth/client
-)
-
-SRCS(
- tvm_client.cpp
-)
-
-GENERATE_ENUM_SERIALIZATION(tvm_client.h)
-
-END()
-
-RECURSE_FOR_TESTS(
- ut
-)
+ library/cpp/tvmauth/client
+)
+
+SRCS(
+ tvm_client.cpp
+)
+
+GENERATE_ENUM_SERIALIZATION(tvm_client.h)
+
+END()
+
+RECURSE_FOR_TESTS(
+ ut
+)