diff --git a/common/cpp/include/asapo/common/data_structs.h b/common/cpp/include/asapo/common/data_structs.h index 546203f29672d1e14b0614ed27b7152f9edb918f..847650fc750f71eb0ea78defbd0dcff2c683a422 100644 --- a/common/cpp/include/asapo/common/data_structs.h +++ b/common/cpp/include/asapo/common/data_structs.h @@ -22,41 +22,41 @@ std::chrono::system_clock::time_point TimePointfromNanosec(uint64_t nanoseconds_ std::string IsoDateFromEpochNanosecs(uint64_t time_from_epoch_nanosec); uint64_t NanosecsEpochFromISODate(std::string date_time); -bool TimeFromJson(const JsonStringParser &parser, const std::string &name, std::chrono::system_clock::time_point* val); +bool TimeFromJson(const JsonStringParser& parser, const std::string& name, std::chrono::system_clock::time_point* val); class MessageMeta { - public: - std::string name; - std::chrono::system_clock::time_point timestamp; - uint64_t size{0}; - uint64_t id{0}; - std::string source; - std::string metadata; - uint64_t buf_id{0}; - uint64_t dataset_substream{0}; - std::string Json() const; - bool SetFromJson(const std::string &json_string); - std::string FullName(const std::string &base_path) const; + public: + std::string name; + std::chrono::system_clock::time_point timestamp; + uint64_t size{0}; + uint64_t id{0}; + std::string source; + std::string metadata; + uint64_t buf_id{0}; + uint64_t dataset_substream{0}; + std::string Json() const; + bool SetFromJson(const std::string& json_string); + std::string FullName(const std::string& base_path) const; }; struct StreamInfo { - uint64_t last_id{0}; - std::string name; - bool finished{false}; - std::string next_stream; - std::chrono::system_clock::time_point timestamp_created; - std::chrono::system_clock::time_point timestamp_lastentry; - std::string Json() const; - bool SetFromJson(const std::string &json_string); + uint64_t last_id{0}; + std::string name; + bool finished{false}; + std::string next_stream; + std::chrono::system_clock::time_point timestamp_created; + std::chrono::system_clock::time_point timestamp_lastentry; + std::string Json() const; + bool SetFromJson(const std::string& json_string); }; using StreamInfos = std::vector<StreamInfo>; -inline bool operator==(const MessageMeta &lhs, const MessageMeta &rhs) { +inline bool operator==(const MessageMeta& lhs, const MessageMeta& rhs) { return (lhs.name == rhs.name && - lhs.id == rhs.id && - lhs.timestamp == rhs.timestamp && - lhs.size == rhs.size); + lhs.id == rhs.id && + lhs.timestamp == rhs.timestamp && + lhs.size == rhs.size); } using MessageData = std::unique_ptr<uint8_t[]>; @@ -67,161 +67,161 @@ using MessageMetas = std::vector<MessageMeta>; using IdList = std::vector<uint64_t>; struct DataSet { - uint64_t id; - uint64_t expected_size; - MessageMetas content; - bool SetFromJson(const std::string &json_string); + uint64_t id; + uint64_t expected_size; + MessageMetas content; + bool SetFromJson(const std::string& json_string); }; using SubDirList = std::vector<std::string>; enum class SourceType { - kProcessed, - kRaw + kProcessed, + kRaw }; Error GetSourceTypeFromString(std::string stype, SourceType* type); std::string GetStringFromSourceType(SourceType type); struct SourceCredentials { - SourceCredentials(SourceType type, - std::string beamtime, - std::string beamline, - std::string data_source, - std::string token) : - beamtime_id{std::move(beamtime)}, - beamline{std::move(beamline)}, - data_source{std::move(data_source)}, - user_token{std::move(token)}, - type{type} {}; - SourceCredentials() {}; - static const std::string kDefaultDataSource; - static const std::string kDefaultBeamline; - static const std::string kDefaultBeamtimeId; - std::string beamtime_id; - std::string beamline; - std::string data_source; - std::string user_token; - SourceType type = SourceType::kProcessed; - std::string GetString() { - return (type == SourceType::kRaw ? std::string("raw") : std::string("processed")) + "%" + beamtime_id + "%" - + beamline + "%" + data_source + "%" + user_token; - }; + SourceCredentials(SourceType type, + std::string beamtime, + std::string beamline, + std::string data_source, + std::string token) : + beamtime_id{std::move(beamtime)}, + beamline{std::move(beamline)}, + data_source{std::move(data_source)}, + user_token{std::move(token)}, + type{type} {}; + SourceCredentials() {}; + static const std::string kDefaultDataSource; + static const std::string kDefaultBeamline; + static const std::string kDefaultBeamtimeId; + std::string beamtime_id; + std::string beamline; + std::string data_source; + std::string user_token; + SourceType type = SourceType::kProcessed; + std::string GetString() { + return (type == SourceType::kRaw ? std::string("raw") : std::string("processed")) + "%" + beamtime_id + "%" + + beamline + "%" + data_source + "%" + user_token; + }; }; struct DeleteStreamOptions { - private: - enum DeleteStreamFlags : uint64_t { - kDeleteMeta = 1 << 0, - kErrorOnNotFound = 1 << 1, - }; - public: - DeleteStreamOptions() = default; - DeleteStreamOptions(bool delete_meta,bool error_on_not_exist):delete_meta{delete_meta},error_on_not_exist{error_on_not_exist}{}; - bool delete_meta{true}; - bool error_on_not_exist{true}; - uint64_t Encode() { - uint64_t flag = 0; - flag = delete_meta ? flag | DeleteStreamFlags::kDeleteMeta:flag; - flag = error_on_not_exist ? flag | DeleteStreamFlags::kErrorOnNotFound:flag; - return flag; - }; - void Decode(uint64_t flag) { - delete_meta = (flag & DeleteStreamFlags::kDeleteMeta) > 0; - error_on_not_exist = (flag & DeleteStreamFlags::kErrorOnNotFound) > 0; - }; - std::string Json() { - return std::string("{\"ErrorOnNotExist\":")+(error_on_not_exist?"true":"false")+",\"DeleteMeta\":" - +(delete_meta?"true":"false")+"}"; - } + private: + enum DeleteStreamFlags : uint64_t { + kDeleteMeta = 1 << 0, + kErrorOnNotFound = 1 << 1, + }; + public: + DeleteStreamOptions() = default; + DeleteStreamOptions(bool delete_meta, bool error_on_not_exist): delete_meta{delete_meta}, error_on_not_exist{error_on_not_exist} {}; + bool delete_meta{true}; + bool error_on_not_exist{true}; + uint64_t Encode() { + uint64_t flag = 0; + flag = delete_meta ? flag | DeleteStreamFlags::kDeleteMeta : flag; + flag = error_on_not_exist ? flag | DeleteStreamFlags::kErrorOnNotFound : flag; + return flag; + }; + void Decode(uint64_t flag) { + delete_meta = (flag & DeleteStreamFlags::kDeleteMeta) > 0; + error_on_not_exist = (flag & DeleteStreamFlags::kErrorOnNotFound) > 0; + }; + std::string Json() { + return std::string("{\"ErrorOnNotExist\":") + (error_on_not_exist ? "true" : "false") + ",\"DeleteMeta\":" + + (delete_meta ? "true" : "false") + "}"; + } }; enum IngestModeFlags : uint64_t { - kTransferData = 1 << 0, - kTransferMetaDataOnly = 1 << 1, - kStoreInFilesystem = 1 << 2, - kStoreInDatabase = 1 << 3, + kTransferData = 1 << 0, + kTransferMetaDataOnly = 1 << 1, + kStoreInFilesystem = 1 << 2, + kStoreInDatabase = 1 << 3, }; const uint64_t kDefaultIngestMode = kTransferData | kStoreInFilesystem | kStoreInDatabase; class ClientProtocol { - private: - std::string version_; - std::string discovery_version_; - std::string name_; - public: - ClientProtocol(std::string version, std::string name, std::string discovery_version) : version_{version}, - name_{name} { - discovery_version_ = discovery_version; - }; - ClientProtocol() = delete; - virtual std::string GetString() = 0; - const std::string &GetVersion() const { - return version_; - } - const std::string &GetDiscoveryVersion() const { - return discovery_version_; - } - const std::string &GetName() const { - return name_; - } + private: + std::string version_; + std::string discovery_version_; + std::string name_; + public: + ClientProtocol(std::string version, std::string name, std::string discovery_version) : version_{version}, + name_{name} { + discovery_version_ = discovery_version; + }; + ClientProtocol() = delete; + virtual std::string GetString() = 0; + const std::string& GetVersion() const { + return version_; + } + const std::string& GetDiscoveryVersion() const { + return discovery_version_; + } + const std::string& GetName() const { + return name_; + } }; class ConsumerProtocol final : public ClientProtocol { - private: - std::string authorizer_version_; - std::string file_transfer_service_version_; - std::string broker_version_; - std::string rds_version_; - public: - ConsumerProtocol(std::string version, - std::string discovery_version, - std::string authorizer_version, - std::string file_transfer_service_version, - std::string broker_version, - std::string rds_version) - : ClientProtocol(version, "consumer protocol", discovery_version) { - authorizer_version_ = authorizer_version; - file_transfer_service_version_ = file_transfer_service_version; - broker_version_ = broker_version; - rds_version_ = rds_version; - } - const std::string &GetAuthorizerVersion() const { - return authorizer_version_; - } - const std::string &GetFileTransferServiceVersion() const { - return file_transfer_service_version_; - } - const std::string &GetRdsVersion() const { - return rds_version_; - } - const std::string &GetBrokerVersion() const { - return broker_version_; - }; - ConsumerProtocol() = delete; - std::string GetString() override { - return std::string(); - } + private: + std::string authorizer_version_; + std::string file_transfer_service_version_; + std::string broker_version_; + std::string rds_version_; + public: + ConsumerProtocol(std::string version, + std::string discovery_version, + std::string authorizer_version, + std::string file_transfer_service_version, + std::string broker_version, + std::string rds_version) + : ClientProtocol(version, "consumer protocol", discovery_version) { + authorizer_version_ = authorizer_version; + file_transfer_service_version_ = file_transfer_service_version; + broker_version_ = broker_version; + rds_version_ = rds_version; + } + const std::string& GetAuthorizerVersion() const { + return authorizer_version_; + } + const std::string& GetFileTransferServiceVersion() const { + return file_transfer_service_version_; + } + const std::string& GetRdsVersion() const { + return rds_version_; + } + const std::string& GetBrokerVersion() const { + return broker_version_; + }; + ConsumerProtocol() = delete; + std::string GetString() override { + return std::string(); + } }; class ProducerProtocol final : public ClientProtocol { - private: - std::string receiver_version_; - public: - ProducerProtocol(std::string version, - std::string discovery_version, - std::string receiver_version) - : ClientProtocol(version, "producer protocol", discovery_version) { - receiver_version_ = receiver_version; - }; - const std::string &GetReceiverVersion() const { - return receiver_version_; - } - ProducerProtocol() = delete; - std::string GetString() override { - return std::string(); - } + private: + std::string receiver_version_; + public: + ProducerProtocol(std::string version, + std::string discovery_version, + std::string receiver_version) + : ClientProtocol(version, "producer protocol", discovery_version) { + receiver_version_ = receiver_version; + }; + const std::string& GetReceiverVersion() const { + return receiver_version_; + } + ProducerProtocol() = delete; + std::string GetString() override { + return std::string(); + } }; } diff --git a/common/cpp/include/asapo/common/error.h b/common/cpp/include/asapo/common/error.h index d99b3aead862ff412c0ea59480405f359519df24..3366ee7e80dcf175d15c86a4f6319255d991580d 100644 --- a/common/cpp/include/asapo/common/error.h +++ b/common/cpp/include/asapo/common/error.h @@ -114,7 +114,7 @@ class SimpleError: public ErrorInterface { } void Prepend(const std::string& value) noexcept override { - error_ = value+": "+error_; + error_ = value + ": " + error_; } std::string Explain() const noexcept override { diff --git a/common/cpp/include/asapo/common/networking.h b/common/cpp/include/asapo/common/networking.h index a52c437c2657251a14c0cae36e6a9c6c14fec469..c9e07f1b72d33c043d8a9061b278a026035b751e 100644 --- a/common/cpp/include/asapo/common/networking.h +++ b/common/cpp/include/asapo/common/networking.h @@ -71,7 +71,7 @@ struct GenericRequestHeader { op_code{i_op_code}, data_id{i_data_id}, data_size{i_data_size}, meta_size{i_meta_size} { strncpy(message, i_message.c_str(), kMaxMessageSize); strncpy(stream, i_stream.c_str(), kMaxMessageSize); - strncpy(api_version,"v0.0", kMaxVersionSize); + strncpy(api_version, "v0.0", kMaxVersionSize); } Opcode op_code; diff --git a/common/cpp/include/asapo/database/database.h b/common/cpp/include/asapo/database/database.h index 1fe87a7c6f5bc48c2317e816c2be34fdb3a9efcc..d14861ddefc987781fb0adf2db1a10ed026a5d01 100644 --- a/common/cpp/include/asapo/database/database.h +++ b/common/cpp/include/asapo/database/database.h @@ -18,14 +18,14 @@ class Database { virtual Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const = 0; virtual Error Upsert(const std::string& collection, uint64_t id, const uint8_t* data, uint64_t size) const = 0; virtual Error InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file, - uint64_t dataset_size, - bool ignore_duplicates) const = 0; + uint64_t dataset_size, + bool ignore_duplicates) const = 0; virtual Error GetById(const std::string& collection, uint64_t id, MessageMeta* file) const = 0; virtual Error GetDataSetById(const std::string& collection, uint64_t set_id, uint64_t id, MessageMeta* file) const = 0; virtual Error GetStreamInfo(const std::string& collection, StreamInfo* info) const = 0; virtual Error GetLastStream(StreamInfo* info) const = 0; - virtual Error DeleteStream(const std::string &stream) const = 0; + virtual Error DeleteStream(const std::string& stream) const = 0; virtual ~Database() = default; }; diff --git a/common/cpp/include/asapo/io/io.h b/common/cpp/include/asapo/io/io.h index 3965506ca4d64ef7ba6b763b648fc9d69e4d0fee..35921586616a21422a0a917fe81ff75ece6b7dbb 100644 --- a/common/cpp/include/asapo/io/io.h +++ b/common/cpp/include/asapo/io/io.h @@ -109,7 +109,8 @@ class IO { virtual size_t Read (FileDescriptor fd, void* buf, size_t length, Error* err) const = 0; virtual size_t Write (FileDescriptor fd, const void* buf, size_t length, Error* err) const = 0; virtual Error RemoveFile(const std::string& fname) const = 0; - virtual Error WriteDataToFile (const std::string& root_folder, const std::string& fname, const MessageData& data, + virtual Error WriteDataToFile (const std::string& root_folder, const std::string& fname, + const MessageData& data, size_t length, bool create_directories, bool allow_ovewrite) const = 0; virtual Error WriteDataToFile (const std::string& root_folder, const std::string& fname, const uint8_t* data, size_t length, bool create_directories, bool allow_ovewrite) const = 0; diff --git a/common/cpp/include/asapo/request/request_pool.h b/common/cpp/include/asapo/request/request_pool.h index 0172a3442642669653ed121c879626be3471346d..55f248d56dcd9a785ca38584fad6d246e1fa9248 100644 --- a/common/cpp/include/asapo/request/request_pool.h +++ b/common/cpp/include/asapo/request/request_pool.h @@ -17,8 +17,8 @@ namespace asapo { struct RequestPoolLimits { - uint64_t max_requests; - uint64_t max_memory_mb; + uint64_t max_requests; + uint64_t max_memory_mb; }; class RequestPool { @@ -49,12 +49,12 @@ class RequestPool { GenericRequestPtr GetRequestFromQueue(); void PutRequestBackToQueue(GenericRequestPtr request); Error CanAddRequest(const GenericRequestPtr& request, bool top_priority); - Error CanAddRequests(const GenericRequests &requests); + Error CanAddRequests(const GenericRequests& requests); uint64_t NRequestsInPoolWithoutLock(); uint64_t shared_counter_{0}; uint64_t requests_in_progress_{0}; uint64_t memory_used_{0}; - RequestPoolLimits limits_{0,0}; + RequestPoolLimits limits_{0, 0}; }; diff --git a/common/cpp/include/asapo/request/request_pool_error.h b/common/cpp/include/asapo/request/request_pool_error.h index 48c8a56538b41cf909dcf0716e786e06629ab5b8..6df6fbec3dd21a80ab0946d891af8c9c7a3539a7 100644 --- a/common/cpp/include/asapo/request/request_pool_error.h +++ b/common/cpp/include/asapo/request/request_pool_error.h @@ -6,8 +6,8 @@ namespace asapo { class OriginalRequest : public CustomErrorData { - public: - GenericRequestPtr request; + public: + GenericRequestPtr request; }; } diff --git a/common/cpp/include/asapo/unittests/MockDatabase.h b/common/cpp/include/asapo/unittests/MockDatabase.h index e582496dfc93bc0352a3a64724851a749efe0a6e..fff0633a7814c84de6eee5677b8c4412bc067545 100644 --- a/common/cpp/include/asapo/unittests/MockDatabase.h +++ b/common/cpp/include/asapo/unittests/MockDatabase.h @@ -10,70 +10,70 @@ namespace asapo { class MockDatabase : public Database { - public: - Error Connect(const std::string &address, const std::string &database) override { - return Error{Connect_t(address, database)}; + public: + Error Connect(const std::string& address, const std::string& database) override { + return Error{Connect_t(address, database)}; - } - Error Insert(const std::string &collection, const MessageMeta &file, bool ignore_duplicates) const override { - return Error{Insert_t(collection, file, ignore_duplicates)}; - } + } + Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const override { + return Error{Insert_t(collection, file, ignore_duplicates)}; + } - Error InsertAsDatasetMessage(const std::string &collection, const MessageMeta &file, - uint64_t dataset_size, bool ignore_duplicates) const override { - return Error{InsertAsDatasetMessage_t(collection, file, dataset_size, ignore_duplicates)}; - } + Error InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file, + uint64_t dataset_size, bool ignore_duplicates) const override { + return Error{InsertAsDatasetMessage_t(collection, file, dataset_size, ignore_duplicates)}; + } - MOCK_METHOD2(Connect_t, ErrorInterface * (const std::string&, const std::string&)); - MOCK_CONST_METHOD3(Insert_t, ErrorInterface * (const std::string&, const MessageMeta&, bool)); + MOCK_METHOD2(Connect_t, ErrorInterface * (const std::string&, const std::string&)); + MOCK_CONST_METHOD3(Insert_t, ErrorInterface * (const std::string&, const MessageMeta&, bool)); - MOCK_CONST_METHOD4(InsertAsDatasetMessage_t, - ErrorInterface * (const std::string&, const MessageMeta&, uint64_t, bool)); + MOCK_CONST_METHOD4(InsertAsDatasetMessage_t, + ErrorInterface * (const std::string&, const MessageMeta&, uint64_t, bool)); - Error Upsert(const std::string &collection, uint64_t id, const uint8_t* data, uint64_t size) const override { - return Error{Upsert_t(collection, id, data, size)}; + Error Upsert(const std::string& collection, uint64_t id, const uint8_t* data, uint64_t size) const override { + return Error{Upsert_t(collection, id, data, size)}; - } - MOCK_CONST_METHOD4(Upsert_t, ErrorInterface * (const std::string&, uint64_t id, const uint8_t* data, uint64_t size)); + } + MOCK_CONST_METHOD4(Upsert_t, ErrorInterface * (const std::string&, uint64_t id, const uint8_t* data, uint64_t size)); - Error GetById(const std::string &collection, uint64_t id, MessageMeta* file) const override { - return Error{GetById_t(collection, id, file)}; - } + Error GetById(const std::string& collection, uint64_t id, MessageMeta* file) const override { + return Error{GetById_t(collection, id, file)}; + } - MOCK_CONST_METHOD3(GetById_t, ErrorInterface * (const std::string&, uint64_t id, MessageMeta*)); + MOCK_CONST_METHOD3(GetById_t, ErrorInterface * (const std::string&, uint64_t id, MessageMeta*)); - Error GetDataSetById(const std::string &collection, uint64_t set_id, uint64_t id, MessageMeta* file) const override { - return Error{GetSetById_t(collection, set_id, id, file)}; - } + Error GetDataSetById(const std::string& collection, uint64_t set_id, uint64_t id, MessageMeta* file) const override { + return Error{GetSetById_t(collection, set_id, id, file)}; + } - MOCK_CONST_METHOD4(GetSetById_t, ErrorInterface * (const std::string&, uint64_t set_id, uint64_t id, MessageMeta*)); + MOCK_CONST_METHOD4(GetSetById_t, ErrorInterface * (const std::string&, uint64_t set_id, uint64_t id, MessageMeta*)); - Error GetStreamInfo(const std::string &collection, StreamInfo* info) const override { - return Error{GetStreamInfo_t(collection, info)}; - } + Error GetStreamInfo(const std::string& collection, StreamInfo* info) const override { + return Error{GetStreamInfo_t(collection, info)}; + } - MOCK_CONST_METHOD2(GetStreamInfo_t, ErrorInterface * (const std::string&, StreamInfo*)); + MOCK_CONST_METHOD2(GetStreamInfo_t, ErrorInterface * (const std::string&, StreamInfo*)); - Error GetLastStream(StreamInfo* info) const override { - return Error{GetLastStream_t(info)}; - } + Error GetLastStream(StreamInfo* info) const override { + return Error{GetLastStream_t(info)}; + } - MOCK_CONST_METHOD1(DeleteStream_t, ErrorInterface * (const std::string&)); + MOCK_CONST_METHOD1(DeleteStream_t, ErrorInterface * (const std::string&)); - Error DeleteStream(const std::string &stream) const override { - return Error{DeleteStream_t(stream)}; - } + Error DeleteStream(const std::string& stream) const override { + return Error{DeleteStream_t(stream)}; + } - MOCK_CONST_METHOD1(GetLastStream_t, ErrorInterface* (StreamInfo*)); + MOCK_CONST_METHOD1(GetLastStream_t, ErrorInterface * (StreamInfo*)); - // stuff to test db destructor is called and avoid "uninteresting call" messages - MOCK_METHOD0(Die, void()); - virtual ~MockDatabase() override { - if (check_destructor) - Die(); - } - bool check_destructor{false}; + // stuff to test db destructor is called and avoid "uninteresting call" messages + MOCK_METHOD0(Die, void()); + virtual ~MockDatabase() override { + if (check_destructor) + Die(); + } + bool check_destructor{false}; }; } diff --git a/common/cpp/include/asapo/unittests/MockIO.h b/common/cpp/include/asapo/unittests/MockIO.h index 9c80d4ab6bd7205ed45c06f6f12b19e35fc5c438..ea2259e6695552e09c251a2e292bfc0186ce3975 100644 --- a/common/cpp/include/asapo/unittests/MockIO.h +++ b/common/cpp/include/asapo/unittests/MockIO.h @@ -210,7 +210,7 @@ class MockIO : public IO { MessageData GetDataFromFile(const std::string& fname, uint64_t* fsize, Error* err) const override { std::function<ErrorInterface*()> error; auto data = GetDataFromFile_t(fname, fsize, &error); - if (error!=nullptr) { + if (error != nullptr) { err->reset(error()); } else { err->reset(nullptr); @@ -218,7 +218,8 @@ class MockIO : public IO { return MessageData(data); } - MOCK_CONST_METHOD3(GetDataFromFile_t, uint8_t* (const std::string& fname, uint64_t* fsize, std::function<ErrorInterface*()>* err_gen)); + MOCK_CONST_METHOD3(GetDataFromFile_t, uint8_t* (const std::string& fname, uint64_t* fsize, + std::function<ErrorInterface*()>* err_gen)); Error GetLastError() const override { diff --git a/common/cpp/src/asapo_fabric/asapo_fabric.cpp b/common/cpp/src/asapo_fabric/asapo_fabric.cpp index 602a5d448cb14d28bb99040b50eff708fa81bd64..487a072476eb7b9b5aaa1a359f3d05f4faf82a4c 100644 --- a/common/cpp/src/asapo_fabric/asapo_fabric.cpp +++ b/common/cpp/src/asapo_fabric/asapo_fabric.cpp @@ -25,7 +25,8 @@ std::unique_ptr<FabricFactory> asapo::fabric::GenerateDefaultFabricFactory() { if (libfabric_path_override) { handle = dlopen(libfabric_path_override, RTLD_LAZY); if (!handle) { - std::cerr << "WARN: 'ASAPO_LIBFABRIC_LIBRARY' was set, but failed to open. Reason: '" << dlerror() << "'. Fallback to normal path." << std::endl; + std::cerr << "WARN: 'ASAPO_LIBFABRIC_LIBRARY' was set, but failed to open. Reason: '" << dlerror() << + "'. Fallback to normal path." << std::endl; } } if (!handle) { diff --git a/common/cpp/src/data_structs/data_structs.cpp b/common/cpp/src/data_structs/data_structs.cpp index 0786761ab1c817dd825f7cba05200fd6d6bf0f40..71b58f1ebcefcef61651071d3ac876c2378f5d25 100644 --- a/common/cpp/src/data_structs/data_structs.cpp +++ b/common/cpp/src/data_structs/data_structs.cpp @@ -23,8 +23,10 @@ const std::string SourceCredentials::kDefaultBeamtimeId = "auto"; std::string GetStringFromSourceType(SourceType type) { switch (type) { - case SourceType::kRaw:return "raw"; - case SourceType::kProcessed:return "processed"; + case SourceType::kRaw: + return "raw"; + case SourceType::kProcessed: + return "processed"; } return "unknown"; } @@ -58,25 +60,25 @@ std::string MessageMeta::Json() const { int64_t buf_id_int = static_cast<int64_t>(buf_id); std::string s = "{\"_id\":" + std::to_string(id) + "," - "\"size\":" + std::to_string(size) + "," - "\"name\":\"" + x + "\"," - "\"timestamp\":" - + std::to_string(nanoseconds_from_epoch) + "," - "\"source\":\"" + source + "\"," - "\"buf_id\":" + std::to_string(buf_id_int) + "," - "\"dataset_substream\":" + std::to_string(dataset_substream) + "," - "\"meta\":" + (metadata.size() == 0 ? std::string("{}") : metadata) - + "}"; + "\"size\":" + std::to_string(size) + "," + "\"name\":\"" + x + "\"," + "\"timestamp\":" + + std::to_string(nanoseconds_from_epoch) + "," + "\"source\":\"" + source + "\"," + "\"buf_id\":" + std::to_string(buf_id_int) + "," + "\"dataset_substream\":" + std::to_string(dataset_substream) + "," + "\"meta\":" + (metadata.size() == 0 ? std::string("{}") : metadata) + + "}"; return s; } std::chrono::system_clock::time_point TimePointfromNanosec(uint64_t nanoseconds_from_epoch) { std::chrono::nanoseconds ns = std::chrono::nanoseconds{nanoseconds_from_epoch}; return std::chrono::system_clock::time_point - {std::chrono::duration_cast<std::chrono::system_clock::duration>(ns)}; + {std::chrono::duration_cast<std::chrono::system_clock::duration>(ns)}; } -bool TimeFromJson(const JsonStringParser &parser, const std::string &name, std::chrono::system_clock::time_point* val) { +bool TimeFromJson(const JsonStringParser& parser, const std::string& name, std::chrono::system_clock::time_point* val) { uint64_t nanoseconds_from_epoch; if (parser.GetUInt64(name, &nanoseconds_from_epoch)) { return false; @@ -85,7 +87,7 @@ bool TimeFromJson(const JsonStringParser &parser, const std::string &name, std:: return true; } -bool DataSet::SetFromJson(const std::string &json_string) { +bool DataSet::SetFromJson(const std::string& json_string) { auto old = *this; auto parser = JsonStringParser(std::move(json_string)); @@ -93,8 +95,8 @@ bool DataSet::SetFromJson(const std::string &json_string) { std::vector<std::string> vec_fi_endcoded; Error parse_err; (parse_err = parser.GetArrayRawStrings("messages", &vec_fi_endcoded)) || - (parse_err = parser.GetUInt64("size", &expected_size)) || - (parse_err = parser.GetUInt64("_id", &id)); + (parse_err = parser.GetUInt64("size", &expected_size)) || + (parse_err = parser.GetUInt64("_id", &id)); if (parse_err) { *this = old; return false; @@ -110,19 +112,19 @@ bool DataSet::SetFromJson(const std::string &json_string) { return true; } -bool MessageMeta::SetFromJson(const std::string &json_string) { +bool MessageMeta::SetFromJson(const std::string& json_string) { auto old = *this; JsonStringParser parser(json_string); if (parser.GetUInt64("_id", &id) || - parser.GetUInt64("size", &size) || - parser.GetString("name", &name) || - parser.GetString("source", &source) || - parser.GetUInt64("buf_id", &buf_id) || - parser.GetUInt64("dataset_substream", &dataset_substream) || - parser.Embedded("meta").GetRawString(&metadata) || - !TimeFromJson(parser, "timestamp", ×tamp)) { + parser.GetUInt64("size", &size) || + parser.GetString("name", &name) || + parser.GetString("source", &source) || + parser.GetUInt64("buf_id", &buf_id) || + parser.GetUInt64("dataset_substream", &dataset_substream) || + parser.Embedded("meta").GetRawString(&metadata) || + !TimeFromJson(parser, "timestamp", ×tamp)) { *this = old; return false; } @@ -132,7 +134,7 @@ bool MessageMeta::SetFromJson(const std::string &json_string) { return true; } -std::string MessageMeta::FullName(const std::string &base_path) const { +std::string MessageMeta::FullName(const std::string& base_path) const { std::string full_name; full_name = base_path.empty() ? "" : base_path + kPathSeparator; return full_name + name; @@ -150,21 +152,21 @@ std::string StreamInfo::Json() const { auto nanoseconds_from_epoch = NanosecsEpochFromTimePoint(timestamp_created); auto nanoseconds_from_epoch_le = NanosecsEpochFromTimePoint(timestamp_lastentry); return ("{\"lastId\":" + std::to_string(last_id) + "," + - "\"name\":\"" + name + "\",\"timestampCreated\":" + std::to_string(nanoseconds_from_epoch) - + std::string(",") + "\"timestampLast\":" + std::to_string(nanoseconds_from_epoch_le) - + ",\"finished\":" + (finished?"true":"false")+ ",\"nextStream\":\"" + next_stream) - + "\"}"; + "\"name\":\"" + name + "\",\"timestampCreated\":" + std::to_string(nanoseconds_from_epoch) + + std::string(",") + "\"timestampLast\":" + std::to_string(nanoseconds_from_epoch_le) + + ",\"finished\":" + (finished ? "true" : "false") + ",\"nextStream\":\"" + next_stream) + + "\"}"; } -bool StreamInfo::SetFromJson(const std::string &json_string) { +bool StreamInfo::SetFromJson(const std::string& json_string) { auto old = *this; JsonStringParser parser(json_string); if (parser.GetUInt64("lastId", &last_id) || - parser.GetBool("finished", &finished) || - parser.GetString("nextStream", &next_stream) || - !TimeFromJson(parser, "timestampLast", ×tamp_lastentry) || - parser.GetString("name", &name) || - !TimeFromJson(parser, "timestampCreated", ×tamp_created)) { + parser.GetBool("finished", &finished) || + parser.GetString("nextStream", &next_stream) || + !TimeFromJson(parser, "timestampLast", ×tamp_lastentry) || + parser.GetString("name", &name) || + !TimeFromJson(parser, "timestampCreated", ×tamp_created)) { *this = old; return false; } @@ -225,7 +227,7 @@ uint64_t NanosecsEpochFromISODate(std::string date_time) { system_clock::time_point tp = system_clock::from_time_t(timegm(&tm)); uint64_t ns = std::chrono::time_point_cast<std::chrono::nanoseconds>(tp). - time_since_epoch().count(); + time_since_epoch().count(); ns = ns + uint64_t(frac * 1000000000); diff --git a/common/cpp/src/database/mongodb_client.cpp b/common/cpp/src/database/mongodb_client.cpp index 6def7c2e3fccf55ade5f473a671522c2875d30d5..e4072d91c6e704ca1e56cb68a917fd12a0f46bfb 100644 --- a/common/cpp/src/database/mongodb_client.cpp +++ b/common/cpp/src/database/mongodb_client.cpp @@ -25,7 +25,7 @@ Error MongoDBClient::Ping() { command = BCON_NEW ("ping", BCON_INT32(1)); retval = mongoc_client_command_simple( - client_, "admin", command, NULL, &reply, &error); + client_, "admin", command, NULL, &reply, &error); bson_destroy(&reply); bson_destroy(command); @@ -37,7 +37,7 @@ MongoDBClient::MongoDBClient() { MongoDbInstance::Instantiate(); } -Error MongoDBClient::InitializeClient(const std::string &address) { +Error MongoDBClient::InitializeClient(const std::string& address) { auto uri_str = DBAddress(address); client_ = mongoc_client_new(uri_str.c_str()); @@ -53,7 +53,7 @@ Error MongoDBClient::InitializeClient(const std::string &address) { } -void MongoDBClient::UpdateCurrentCollectionIfNeeded(const std::string &collection_name) const { +void MongoDBClient::UpdateCurrentCollectionIfNeeded(const std::string& collection_name) const { if (collection_name == current_collection_name_) { return; } @@ -62,7 +62,7 @@ void MongoDBClient::UpdateCurrentCollectionIfNeeded(const std::string &collectio } current_collection_ = mongoc_client_get_collection(client_, database_name_.c_str(), - collection_name.c_str()); + collection_name.c_str()); current_collection_name_ = collection_name; mongoc_collection_set_write_concern(current_collection_, write_concern_); } @@ -75,7 +75,7 @@ Error MongoDBClient::TryConnectDatabase() { return err; } -Error MongoDBClient::Connect(const std::string &address, const std::string &database_name) { +Error MongoDBClient::Connect(const std::string& address, const std::string& database_name) { if (connected_) { return DBErrorTemplates::kAlreadyConnected.Generate(); } @@ -94,7 +94,7 @@ Error MongoDBClient::Connect(const std::string &address, const std::string &data return err; } -std::string MongoDBClient::DBAddress(const std::string &address) const { +std::string MongoDBClient::DBAddress(const std::string& address) const { return "mongodb://" + address + "/?appname=asapo"; } @@ -110,7 +110,7 @@ void MongoDBClient::CleanUp() { } } -bson_p PrepareBsonDocument(const MessageMeta &file, Error* err) { +bson_p PrepareBsonDocument(const MessageMeta& file, Error* err) { bson_error_t mongo_err; auto s = file.Json(); auto json = reinterpret_cast<const uint8_t*>(s.c_str()); @@ -142,7 +142,7 @@ bson_p PrepareBsonDocument(const uint8_t* json, ssize_t len, Error* err) { return bson_p{bson}; } -Error MongoDBClient::InsertBsonDocument(const bson_p &document, bool ignore_duplicates) const { +Error MongoDBClient::InsertBsonDocument(const bson_p& document, bool ignore_duplicates) const { bson_error_t mongo_err; if (!mongoc_collection_insert_one(current_collection_, document.get(), NULL, NULL, &mongo_err)) { if (mongo_err.code == MONGOC_ERROR_DUPLICATE_KEY) { @@ -154,7 +154,7 @@ Error MongoDBClient::InsertBsonDocument(const bson_p &document, bool ignore_dupl return nullptr; } -Error MongoDBClient::UpdateBsonDocument(uint64_t id, const bson_p &document, bool upsert) const { +Error MongoDBClient::UpdateBsonDocument(uint64_t id, const bson_p& document, bool upsert) const { bson_error_t mongo_err; bson_t* opts = BCON_NEW ("upsert", BCON_BOOL(upsert)); @@ -172,7 +172,7 @@ Error MongoDBClient::UpdateBsonDocument(uint64_t id, const bson_p &document, boo return err; } -Error MongoDBClient::Insert(const std::string &collection, const MessageMeta &file, bool ignore_duplicates) const { +Error MongoDBClient::Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const { if (!connected_) { return DBErrorTemplates::kNotConnected.Generate(); } @@ -195,7 +195,7 @@ MongoDBClient::~MongoDBClient() { CleanUp(); } -Error MongoDBClient::Upsert(const std::string &collection, uint64_t id, const uint8_t* data, uint64_t size) const { +Error MongoDBClient::Upsert(const std::string& collection, uint64_t id, const uint8_t* data, uint64_t size) const { if (!connected_) { return DBErrorTemplates::kNotConnected.Generate(); } @@ -237,7 +237,7 @@ Error MongoDBClient::AddBsonDocumentToArray(bson_t* query, bson_t* update, bool return err; } -Error MongoDBClient::InsertAsDatasetMessage(const std::string &collection, const MessageMeta &file, +Error MongoDBClient::InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file, uint64_t dataset_size, bool ignore_duplicates) const { if (!connected_) { @@ -269,7 +269,7 @@ Error MongoDBClient::InsertAsDatasetMessage(const std::string &collection, const return err; } -Error MongoDBClient::GetRecordFromDb(const std::string &collection, uint64_t id, GetRecordMode mode, +Error MongoDBClient::GetRecordFromDb(const std::string& collection, uint64_t id, GetRecordMode mode, std::string* res) const { if (!connected_) { return DBErrorTemplates::kNotConnected.Generate(); @@ -286,15 +286,18 @@ Error MongoDBClient::GetRecordFromDb(const std::string &collection, uint64_t id, char* str; switch (mode) { - case GetRecordMode::kById:filter = BCON_NEW ("_id", BCON_INT64(id)); - opts = BCON_NEW ("limit", BCON_INT64(1)); - break; - case GetRecordMode::kLast:filter = BCON_NEW (NULL); - opts = BCON_NEW ("limit", BCON_INT64(1), "sort", "{", "_id", BCON_INT64(-1), "}"); - break; - case GetRecordMode::kEarliest:filter = BCON_NEW (NULL); - opts = BCON_NEW ("limit", BCON_INT64(1), "sort", "{", "timestamp", BCON_INT64(1), "}"); - break; + case GetRecordMode::kById: + filter = BCON_NEW ("_id", BCON_INT64(id)); + opts = BCON_NEW ("limit", BCON_INT64(1)); + break; + case GetRecordMode::kLast: + filter = BCON_NEW (NULL); + opts = BCON_NEW ("limit", BCON_INT64(1), "sort", "{", "_id", BCON_INT64(-1), "}"); + break; + case GetRecordMode::kEarliest: + filter = BCON_NEW (NULL); + opts = BCON_NEW ("limit", BCON_INT64(1), "sort", "{", "timestamp", BCON_INT64(1), "}"); + break; } cursor = mongoc_collection_find_with_opts(current_collection_, filter, opts, NULL); @@ -322,7 +325,7 @@ Error MongoDBClient::GetRecordFromDb(const std::string &collection, uint64_t id, return err; } -Error MongoDBClient::GetById(const std::string &collection, uint64_t id, MessageMeta* file) const { +Error MongoDBClient::GetById(const std::string& collection, uint64_t id, MessageMeta* file) const { std::string record_str; auto err = GetRecordFromDb(collection, id, GetRecordMode::kById, &record_str); if (err) { @@ -335,7 +338,7 @@ Error MongoDBClient::GetById(const std::string &collection, uint64_t id, Message return nullptr; } -Error MongoDBClient::GetDataSetById(const std::string &collection, +Error MongoDBClient::GetDataSetById(const std::string& collection, uint64_t id_in_set, uint64_t id, MessageMeta* file) const { @@ -350,7 +353,7 @@ Error MongoDBClient::GetDataSetById(const std::string &collection, DBErrorTemplates::kJsonParseError.Generate(record_str); } - for (const auto &message_meta : dataset.content) { + for (const auto& message_meta : dataset.content) { if (message_meta.dataset_substream == id_in_set) { *file = message_meta; return nullptr; @@ -361,20 +364,20 @@ Error MongoDBClient::GetDataSetById(const std::string &collection, } -Error UpdateStreamInfoFromEarliestRecord(const std::string &earliest_record_str, +Error UpdateStreamInfoFromEarliestRecord(const std::string& earliest_record_str, StreamInfo* info) { std::chrono::system_clock::time_point timestamp_created; auto parser = JsonStringParser(earliest_record_str); auto ok = TimeFromJson(parser, "timestamp", ×tamp_created); if (!ok) { return DBErrorTemplates::kJsonParseError.Generate( - "UpdateStreamInfoFromEarliestRecord: cannot parse timestamp in response: " + earliest_record_str); + "UpdateStreamInfoFromEarliestRecord: cannot parse timestamp in response: " + earliest_record_str); } info->timestamp_created = timestamp_created; return nullptr; } -Error UpdateFinishedStreamInfo(const std::string &metadata, +Error UpdateFinishedStreamInfo(const std::string& metadata, StreamInfo* info) { info->finished = true; auto parser = JsonStringParser(metadata); @@ -382,7 +385,7 @@ Error UpdateFinishedStreamInfo(const std::string &metadata, auto err = parser.GetString("next_stream", &next_stream); if (err) { return DBErrorTemplates::kJsonParseError.Generate( - "UpdateFinishedStreamInfo: cannot parse finished stream meta response: " + metadata); + "UpdateFinishedStreamInfo: cannot parse finished stream meta response: " + metadata); } if (next_stream != kNoNextStreamKeyword) { info->next_stream = next_stream; @@ -390,7 +393,7 @@ Error UpdateFinishedStreamInfo(const std::string &metadata, return nullptr; } -Error UpdateFinishedInfo(const std::string &last_record_str, const JsonStringParser &parser, StreamInfo* info) { +Error UpdateFinishedInfo(const std::string& last_record_str, const JsonStringParser& parser, StreamInfo* info) { std::string name; parser.GetString("name", &name); if (name != kFinishStreamKeyword) { @@ -399,12 +402,12 @@ Error UpdateFinishedInfo(const std::string &last_record_str, const JsonStringPar std::string metadata; if (parser.Embedded("meta").GetRawString(&metadata) != nullptr) { return DBErrorTemplates::kJsonParseError.Generate( - "UpdateStreamInfoFromLastRecord: cannot parse metadata in response: " + last_record_str); + "UpdateStreamInfoFromLastRecord: cannot parse metadata in response: " + last_record_str); } return UpdateFinishedStreamInfo(metadata, info); } -Error UpdateStreamInfoFromLastRecord(const std::string &last_record_str, +Error UpdateStreamInfoFromLastRecord(const std::string& last_record_str, StreamInfo* info) { auto parser = JsonStringParser(last_record_str); std::chrono::system_clock::time_point timestamp_last; @@ -412,22 +415,22 @@ Error UpdateStreamInfoFromLastRecord(const std::string &last_record_str, if (!TimeFromJson(parser, "timestamp", ×tamp_last)) { return DBErrorTemplates::kJsonParseError.Generate( - "UpdateStreamInfoFromLastRecord: cannot parse timestamp in response: " + last_record_str); + "UpdateStreamInfoFromLastRecord: cannot parse timestamp in response: " + last_record_str); } if (parser.GetUInt64("_id", &id) != nullptr) { return DBErrorTemplates::kJsonParseError.Generate( - "UpdateStreamInfoFromLastRecord: cannot parse _id in response: " + last_record_str); + "UpdateStreamInfoFromLastRecord: cannot parse _id in response: " + last_record_str); } info->timestamp_lastentry = timestamp_last; info->last_id = id; - return UpdateFinishedInfo(last_record_str,parser,info); + return UpdateFinishedInfo(last_record_str, parser, info); } -Error StreamInfoFromDbResponse(const std::string &last_record_str, - const std::string &earliest_record_str, +Error StreamInfoFromDbResponse(const std::string& last_record_str, + const std::string& earliest_record_str, StreamInfo* info) { std::chrono::system_clock::time_point timestamp_created; @@ -440,12 +443,12 @@ Error StreamInfoFromDbResponse(const std::string &last_record_str, } -Error MongoDBClient::GetStreamInfo(const std::string &collection, StreamInfo* info) const { +Error MongoDBClient::GetStreamInfo(const std::string& collection, StreamInfo* info) const { std::string last_record_str, earliest_record_str; auto err = GetRecordFromDb(collection, 0, GetRecordMode::kLast, &last_record_str); if (err) { if (err - == DBErrorTemplates::kNoRecord) { // with noRecord error it will return last_id = 0 which can be used to understand that the stream is not started yet + == DBErrorTemplates::kNoRecord) { // with noRecord error it will return last_id = 0 which can be used to understand that the stream is not started yet *info = StreamInfo{}; return nullptr; } @@ -459,12 +462,12 @@ Error MongoDBClient::GetStreamInfo(const std::string &collection, StreamInfo* in return StreamInfoFromDbResponse(last_record_str, earliest_record_str, info); } -bool MongoCollectionIsDataStream(const std::string &stream_name) { +bool MongoCollectionIsDataStream(const std::string& stream_name) { std::string prefix = std::string(kDBDataCollectionNamePrefix) + "_"; return stream_name.rfind(prefix, 0) == 0; } -Error MongoDBClient::UpdateCurrentLastStreamInfo(const std::string &collection_name, StreamInfo* info) const { +Error MongoDBClient::UpdateCurrentLastStreamInfo(const std::string& collection_name, StreamInfo* info) const { StreamInfo next_info; auto err = GetStreamInfo(collection_name, &next_info); std::string prefix = std::string(kDBDataCollectionNamePrefix) + "_"; @@ -506,7 +509,7 @@ Error MongoDBClient::GetLastStream(StreamInfo* info) const { info->timestamp_lastentry = zero_time; Error err; if ((strv = mongoc_database_get_collection_names_with_opts( - database, opts, &error))) { + database, opts, &error))) { for (auto i = 0; strv[i]; i++) { err = UpdateLastStreamInfo(strv[i], info); if (err) { @@ -523,7 +526,7 @@ Error MongoDBClient::GetLastStream(StreamInfo* info) const { return err; } -Error MongoDBClient::DeleteCollections(const std::string &prefix) const { +Error MongoDBClient::DeleteCollections(const std::string& prefix) const { mongoc_database_t* database; char** strv; bson_error_t error; @@ -533,7 +536,7 @@ Error MongoDBClient::DeleteCollections(const std::string &prefix) const { database = mongoc_client_get_database(client_, database_name_.c_str()); Error err; if ((strv = mongoc_database_get_collection_names_with_opts( - database, opts, &error))) { + database, opts, &error))) { for (auto i = 0; strv[i]; i++) { DeleteCollection(strv[i]); } @@ -548,7 +551,7 @@ Error MongoDBClient::DeleteCollections(const std::string &prefix) const { return nullptr; } -Error MongoDBClient::DeleteCollection(const std::string &name) const { +Error MongoDBClient::DeleteCollection(const std::string& name) const { bson_error_t error; auto collection = mongoc_client_get_collection(client_, database_name_.c_str(), name.c_str()); mongoc_collection_set_write_concern(collection, write_concern_); @@ -564,8 +567,8 @@ Error MongoDBClient::DeleteCollection(const std::string &name) const { return nullptr; } -Error MongoDBClient::DeleteDocumentsInCollection(const std::string &collection_name, - const std::string &querystr) const { +Error MongoDBClient::DeleteDocumentsInCollection(const std::string& collection_name, + const std::string& querystr) const { auto collection = mongoc_client_get_collection(client_, database_name_.c_str(), collection_name.c_str()); mongoc_collection_set_write_concern(collection, write_concern_); bson_error_t error; @@ -578,7 +581,7 @@ Error MongoDBClient::DeleteDocumentsInCollection(const std::string &collection_n return nullptr; } -Error MongoDBClient::DeleteStream(const std::string &stream) const { +Error MongoDBClient::DeleteStream(const std::string& stream) const { std::string data_col = std::string(kDBDataCollectionNamePrefix) + "_" + stream; std::string inprocess_col = "inprocess_" + stream; std::string acks_col = "acks_" + stream; diff --git a/common/cpp/src/database/mongodb_client.h b/common/cpp/src/database/mongodb_client.h index 226c134b4d0e17d3ddab76b9fe4b30c31734d7db..443d73bd68dbc2184cf72272da63b1eca4413524 100644 --- a/common/cpp/src/database/mongodb_client.h +++ b/common/cpp/src/database/mongodb_client.h @@ -34,9 +34,9 @@ class BsonDestroyFunctor { using bson_p = std::unique_ptr<_bson_t, BsonDestroyFunctor>; enum class GetRecordMode { - kById, - kLast, - kEarliest + kById, + kLast, + kEarliest }; class MongoDBClient final : public Database { @@ -45,13 +45,13 @@ class MongoDBClient final : public Database { Error Connect(const std::string& address, const std::string& database) override; Error Insert(const std::string& collection, const MessageMeta& file, bool ignore_duplicates) const override; Error InsertAsDatasetMessage(const std::string& collection, const MessageMeta& file, uint64_t dataset_size, - bool ignore_duplicates) const override; + bool ignore_duplicates) const override; Error Upsert(const std::string& collection, uint64_t id, const uint8_t* data, uint64_t size) const override; Error GetById(const std::string& collection, uint64_t id, MessageMeta* file) const override; Error GetDataSetById(const std::string& collection, uint64_t id_in_set, uint64_t id, MessageMeta* file) const override; Error GetStreamInfo(const std::string& collection, StreamInfo* info) const override; Error GetLastStream(StreamInfo* info) const override; - Error DeleteStream(const std::string &stream) const override; + Error DeleteStream(const std::string& stream) const override; ~MongoDBClient() override; private: mongoc_client_t* client_{nullptr}; @@ -70,11 +70,11 @@ class MongoDBClient final : public Database { Error UpdateBsonDocument(uint64_t id, const bson_p& document, bool upsert) const; Error AddBsonDocumentToArray(bson_t* query, bson_t* update, bool ignore_duplicates) const; Error GetRecordFromDb(const std::string& collection, uint64_t id, GetRecordMode mode, std::string* res) const; - Error UpdateLastStreamInfo(const char *str, StreamInfo* info) const; + Error UpdateLastStreamInfo(const char* str, StreamInfo* info) const; Error UpdateCurrentLastStreamInfo(const std::string& collection_name, StreamInfo* info) const; Error DeleteCollection(const std::string& name) const; - Error DeleteCollections(const std::string &prefix) const; - Error DeleteDocumentsInCollection(const std::string &collection_name,const std::string &querystr) const; + Error DeleteCollections(const std::string& prefix) const; + Error DeleteDocumentsInCollection(const std::string& collection_name, const std::string& querystr) const; }; } diff --git a/common/cpp/src/request/request_pool.cpp b/common/cpp/src/request/request_pool.cpp index 32d0cd99943b67e3cdea3e9b5bbefa60b0e3e981..b0c6d3a80c9644e83c539da2bafa4e77ffee2b66 100644 --- a/common/cpp/src/request/request_pool.cpp +++ b/common/cpp/src/request/request_pool.cpp @@ -4,22 +4,22 @@ namespace asapo { RequestPool::RequestPool(uint8_t n_threads, RequestHandlerFactory* request_handler_factory, const AbstractLogger* log) : log__{log}, - request_handler_factory__{ - request_handler_factory}, - threads_{ - n_threads} { + request_handler_factory__{ + request_handler_factory}, +threads_{ + n_threads} { for (size_t i = 0; i < n_threads; i++) { log__->Debug("starting thread " + std::to_string(i)); threads_[i] = std::thread( - [this, i] { ThreadHandler(i); }); + [this, i] { ThreadHandler(i); }); } } -Error RequestPool::CanAddRequests(const GenericRequests &requests) { +Error RequestPool::CanAddRequests(const GenericRequests& requests) { if (NRequestsInPoolWithoutLock() + requests.size() > limits_.max_requests && limits_.max_requests > 0) { return IOErrorTemplates::kNoSpaceLeft.Generate( - "reached maximum number of " + std::to_string(limits_.max_requests) + " requests"); + "reached maximum number of " + std::to_string(limits_.max_requests) + " requests"); } if (limits_.max_memory_mb == 0) { @@ -27,7 +27,7 @@ Error RequestPool::CanAddRequests(const GenericRequests &requests) { } uint64_t total_size = 0; - for (auto &request : requests) { + for (auto& request : requests) { if (request->ContainsData()) { total_size += request->header.data_size; } @@ -35,19 +35,19 @@ Error RequestPool::CanAddRequests(const GenericRequests &requests) { if (memory_used_ + total_size > limits_.max_memory_mb * 1000000) { return IOErrorTemplates::kNoSpaceLeft.Generate( - "reached maximum memory capacity of " + std::to_string(limits_.max_memory_mb) + " MB"); + "reached maximum memory capacity of " + std::to_string(limits_.max_memory_mb) + " MB"); } return nullptr; } -Error RequestPool::CanAddRequest(const GenericRequestPtr &request, bool top_priority) { +Error RequestPool::CanAddRequest(const GenericRequestPtr& request, bool top_priority) { if (top_priority) { return nullptr; } if (limits_.max_requests > 0 && NRequestsInPoolWithoutLock() >= limits_.max_requests) { return IOErrorTemplates::kNoSpaceLeft.Generate( - "reached maximum number of " + std::to_string(limits_.max_requests) + " requests"); + "reached maximum number of " + std::to_string(limits_.max_requests) + " requests"); } if (!request->ContainsData()) { @@ -56,7 +56,7 @@ Error RequestPool::CanAddRequest(const GenericRequestPtr &request, bool top_prio if (limits_.max_memory_mb > 0 && memory_used_ + request->header.data_size > limits_.max_memory_mb * 1000000) { return IOErrorTemplates::kNoSpaceLeft.Generate( - "reached maximum memory capacity of " + std::to_string(limits_.max_memory_mb) + " MB"); + "reached maximum memory capacity of " + std::to_string(limits_.max_memory_mb) + " MB"); } return nullptr; @@ -87,7 +87,7 @@ Error RequestPool::AddRequest(GenericRequestPtr request, bool top_priority) { return nullptr; } -bool RequestPool::CanProcessRequest(const std::unique_ptr<RequestHandler> &request_handler) { +bool RequestPool::CanProcessRequest(const std::unique_ptr<RequestHandler>& request_handler) { return request_queue_.size() && request_handler->ReadyProcessRequest(); } @@ -103,7 +103,7 @@ void RequestPool::PutRequestBackToQueue(GenericRequestPtr request) { request_queue_.emplace_front(std::move(request)); } -void RequestPool::ProcessRequest(const std::unique_ptr<RequestHandler> &request_handler, +void RequestPool::ProcessRequest(const std::unique_ptr<RequestHandler>& request_handler, ThreadInformation* thread_info) { auto request = GetRequestFromQueue(); if (request->TimedOut()) { @@ -139,7 +139,7 @@ void RequestPool::ThreadHandler(uint64_t id) { auto request_handler = request_handler_factory__->NewRequestHandler(id, &shared_counter_); do { auto do_work = condition_.wait_for(thread_info.lock, std::chrono::milliseconds(100), [this, &request_handler] { - return (CanProcessRequest(request_handler) || quit_); + return (CanProcessRequest(request_handler) || quit_); }); //after wait, we own the lock if (!quit_ && do_work) { @@ -167,7 +167,7 @@ Error RequestPool::AddRequests(GenericRequests requests) { } uint64_t total_size = 0; - for (auto &elem : requests) { + for (auto& elem : requests) { if (elem->ContainsData()) { total_size += elem->header.data_size; } diff --git a/common/cpp/src/system_io/system_io.h b/common/cpp/src/system_io/system_io.h index b42cd2b1799f8e8f54c9b5f7eab6ad89c435d178..ba981a2265267a6dfa9dfdc5cefdf52225763bf0 100644 --- a/common/cpp/src/system_io/system_io.h +++ b/common/cpp/src/system_io/system_io.h @@ -79,7 +79,7 @@ class SystemIO final : public IO { static ssize_t _read(FileDescriptor fd, void* buffer, size_t length); static ssize_t _write(FileDescriptor fd, const void* buffer, size_t count); void CollectMessageMetarmationRecursively(const std::string& path, std::vector<MessageMeta>* files, - Error* err) const; + Error* err) const; void GetSubDirectoriesRecursively(const std::string& path, SubDirList* subdirs, Error* err) const; Error CreateDirectoryWithParents(const std::string& root_path, const std::string& path) const; uint8_t* AllocateArray(uint64_t fsize, Error* err) const; diff --git a/common/cpp/src/system_io/system_io_linux_mac.cpp b/common/cpp/src/system_io/system_io_linux_mac.cpp index fd0b7f35ef97f60a680571d13765175946f85e4a..60039cd27c19268921d813d671ca0888348c1563 100644 --- a/common/cpp/src/system_io/system_io_linux_mac.cpp +++ b/common/cpp/src/system_io/system_io_linux_mac.cpp @@ -177,7 +177,7 @@ void SystemIO::GetSubDirectoriesRecursively(const std::string& path, SubDirList* } void SystemIO::CollectMessageMetarmationRecursively(const std::string& path, - MessageMetas* files, Error* err) const { + MessageMetas* files, Error* err) const { errno = 0; auto dir = opendir((path).c_str()); if (dir == nullptr) { @@ -189,7 +189,7 @@ void SystemIO::CollectMessageMetarmationRecursively(const std::string& path, while (struct dirent* current_entity = readdir(dir)) { if (IsDirectory(current_entity)) { CollectMessageMetarmationRecursively(path + "/" + current_entity->d_name, - files, err); + files, err); } else { ProcessFileEntity(current_entity, path, files, err); } diff --git a/common/cpp/src/system_io/system_io_windows.cpp b/common/cpp/src/system_io/system_io_windows.cpp index 9755e2e91123f293f682db88c2ee618ccc1b3517..22b9c9d4315b5e7b764643230a331c200032fc05 100644 --- a/common/cpp/src/system_io/system_io_windows.cpp +++ b/common/cpp/src/system_io/system_io_windows.cpp @@ -203,7 +203,7 @@ void SystemIO::GetSubDirectoriesRecursively(const std::string& path, SubDirList* } void SystemIO::CollectMessageMetarmationRecursively(const std::string& path, - MessageMetas* files, Error* err) const { + MessageMetas* files, Error* err) const { WIN32_FIND_DATA find_data; HANDLE handle = FindFirstFile((path + "\\*.*").c_str(), &find_data); if (handle == INVALID_HANDLE_VALUE) { diff --git a/common/cpp/src/version/version.cpp b/common/cpp/src/version/version.cpp index 57600be0ceb58b7e3515959b643194018d573310..e5278c8763da3bcd70af55ea91a7d1a8a1606673 100644 --- a/common/cpp/src/version/version.cpp +++ b/common/cpp/src/version/version.cpp @@ -3,16 +3,16 @@ namespace asapo { -Error ExtractVersionFromResponse(const std::string &response, - const std::string &client, +Error ExtractVersionFromResponse(const std::string& response, + const std::string& client, std::string* server_info, bool* supported) { JsonStringParser parser(response); std::string server_version, current_client_protocol, client_supported; Error err; if ((err = parser.GetString("softwareVersion", &server_version)) - || (err = parser.GetString("clientSupported", &client_supported)) - || (err = parser.Embedded("clientProtocol").GetString("versionInfo", ¤t_client_protocol))) { + || (err = parser.GetString("clientSupported", &client_supported)) + || (err = parser.Embedded("clientProtocol").GetString("versionInfo", ¤t_client_protocol))) { return err; } if (server_info) { diff --git a/common/cpp/unittests/data_structs/test_data_structs.cpp b/common/cpp/unittests/data_structs/test_data_structs.cpp index 0e91e22167dd9e0d825869c73117d4b3cbe7f5b9..d1a35ea664ca66a5cfb91510e4d4feaa31813378 100644 --- a/common/cpp/unittests/data_structs/test_data_structs.cpp +++ b/common/cpp/unittests/data_structs/test_data_structs.cpp @@ -186,17 +186,18 @@ TEST(StreamInfo, ConvertFromJsonErr) { TEST(StreamInfo, ConvertToJson) { auto sinfo = PrepareStreamInfo(); - std::string expected_json = R"({"lastId":123,"name":"test","timestampCreated":1000000,"timestampLast":2000000,"finished":true,"nextStream":"next"})"; + std::string expected_json = + R"({"lastId":123,"name":"test","timestampCreated":1000000,"timestampLast":2000000,"finished":true,"nextStream":"next"})"; auto json = sinfo.Json(); - ASSERT_THAT(json,Eq(expected_json)); + ASSERT_THAT(json, Eq(expected_json)); } TEST(SourceCredentials, ConvertToString) { - auto sc = SourceCredentials{SourceType::kRaw,"beamtime","beamline","source","token"}; - std::string expected1= "raw%beamtime%beamline%source%token"; - std::string expected2= "processed%beamtime%beamline%source%token"; + auto sc = SourceCredentials{SourceType::kRaw, "beamtime", "beamline", "source", "token"}; + std::string expected1 = "raw%beamtime%beamline%source%token"; + std::string expected2 = "processed%beamtime%beamline%source%token"; auto res1 = sc.GetString(); sc.type = asapo::SourceType::kProcessed; @@ -207,11 +208,11 @@ TEST(SourceCredentials, ConvertToString) { } TEST(SourceCredentials, SourceTypeFromString) { - SourceType type1,type2,type3; + SourceType type1, type2, type3; - auto err1=GetSourceTypeFromString("raw",&type1); - auto err2=GetSourceTypeFromString("processed",&type2); - auto err3=GetSourceTypeFromString("bla",&type3); + auto err1 = GetSourceTypeFromString("raw", &type1); + auto err2 = GetSourceTypeFromString("processed", &type2); + auto err3 = GetSourceTypeFromString("bla", &type3); ASSERT_THAT(err1, Eq(nullptr)); ASSERT_THAT(type1, Eq(SourceType::kRaw)); @@ -261,7 +262,7 @@ TEST(DeletaStreamOpt, ConvertToJson) { std::string expected_json = "{\"ErrorOnNotExist\":true,\"DeleteMeta\":true}"; auto json = opts.Json(); - ASSERT_THAT(json,Eq(expected_json)); + ASSERT_THAT(json, Eq(expected_json)); } TEST(DeletaStreamOpt, ConvertToJson2) { @@ -272,34 +273,34 @@ TEST(DeletaStreamOpt, ConvertToJson2) { std::string expected_json = "{\"ErrorOnNotExist\":false,\"DeleteMeta\":false}"; auto json = opts.Json(); - ASSERT_THAT(json,Eq(expected_json)); + ASSERT_THAT(json, Eq(expected_json)); } TEST(DeletaStreamOpt, EncodeDecode) { auto opts = DeleteStreamOptions{}; - ASSERT_THAT(opts.Encode(),Eq(3)); + ASSERT_THAT(opts.Encode(), Eq(3)); opts.delete_meta = false; - ASSERT_THAT(opts.Encode(),Eq(2)); + ASSERT_THAT(opts.Encode(), Eq(2)); opts.error_on_not_exist = false; - ASSERT_THAT(opts.Encode(),Eq(0)); + ASSERT_THAT(opts.Encode(), Eq(0)); opts.delete_meta = true; - ASSERT_THAT(opts.Encode(),Eq(1)); + ASSERT_THAT(opts.Encode(), Eq(1)); opts.Decode(0); - ASSERT_THAT(opts.error_on_not_exist,Eq(false)); - ASSERT_THAT(opts.delete_meta,Eq(false)); + ASSERT_THAT(opts.error_on_not_exist, Eq(false)); + ASSERT_THAT(opts.delete_meta, Eq(false)); opts.Decode(1); - ASSERT_THAT(opts.error_on_not_exist,Eq(false)); - ASSERT_THAT(opts.delete_meta,Eq(true)); + ASSERT_THAT(opts.error_on_not_exist, Eq(false)); + ASSERT_THAT(opts.delete_meta, Eq(true)); opts.Decode(2); - ASSERT_THAT(opts.error_on_not_exist,Eq(true)); - ASSERT_THAT(opts.delete_meta,Eq(false)); + ASSERT_THAT(opts.error_on_not_exist, Eq(true)); + ASSERT_THAT(opts.delete_meta, Eq(false)); opts.Decode(3); - ASSERT_THAT(opts.error_on_not_exist,Eq(true)); - ASSERT_THAT(opts.delete_meta,Eq(true)); + ASSERT_THAT(opts.error_on_not_exist, Eq(true)); + ASSERT_THAT(opts.delete_meta, Eq(true)); } diff --git a/common/cpp/unittests/request/test_request_pool.cpp b/common/cpp/unittests/request/test_request_pool.cpp index be2a938e227051524dbc13ad07dc7681de77db29..f359c1c4218d33d8943862cd30f3d53412686db4 100644 --- a/common/cpp/unittests/request/test_request_pool.cpp +++ b/common/cpp/unittests/request/test_request_pool.cpp @@ -38,42 +38,44 @@ using asapo::GenericRequest; using asapo::GenericRequestHeader; class MockRequestHandlerFactory : public asapo::RequestHandlerFactory { - public: - MockRequestHandlerFactory(RequestHandler* request_handler) : - RequestHandlerFactory() { - request_handler_ = request_handler; - } - std::unique_ptr<RequestHandler> NewRequestHandler(uint64_t thread_id, uint64_t* shared_counter) override { - return std::unique_ptr<RequestHandler>{request_handler_}; - } - private: - RequestHandler* request_handler_; + public: + MockRequestHandlerFactory(RequestHandler* request_handler) : + RequestHandlerFactory() { + request_handler_ = request_handler; + } + std::unique_ptr<RequestHandler> NewRequestHandler(uint64_t thread_id, uint64_t* shared_counter) override { + return std::unique_ptr<RequestHandler> {request_handler_}; + } + private: + RequestHandler* request_handler_; }; class TestRequest : public GenericRequest { - public: - TestRequest(GenericRequestHeader header, uint64_t timeout, bool contains_data = true) : GenericRequest(header, - timeout) { - contains_data_ = contains_data; - }; - bool ContainsData() { return contains_data_; }; - private: - bool contains_data_; + public: + TestRequest(GenericRequestHeader header, uint64_t timeout, bool contains_data = true) : GenericRequest(header, + timeout) { + contains_data_ = contains_data; + }; + bool ContainsData() { + return contains_data_; + }; + private: + bool contains_data_; }; class RequestPoolTests : public testing::Test { - public: - NiceMock<MockRequestHandler>* mock_request_handler = new testing::NiceMock<MockRequestHandler>; - NiceMock<asapo::MockLogger> mock_logger; - MockRequestHandlerFactory request_handler_factory{mock_request_handler}; - const uint8_t nthreads = 1; - asapo::RequestPool pool{nthreads, &request_handler_factory, &mock_logger}; - std::unique_ptr<GenericRequest> - request{new TestRequest{GenericRequestHeader{asapo::kOpcodeUnknownOp, 0, 1000000}, 0}}; - void SetUp() override { - } - void TearDown() override { - } + public: + NiceMock<MockRequestHandler>* mock_request_handler = new testing::NiceMock<MockRequestHandler>; + NiceMock<asapo::MockLogger> mock_logger; + MockRequestHandlerFactory request_handler_factory{mock_request_handler}; + const uint8_t nthreads = 1; + asapo::RequestPool pool{nthreads, &request_handler_factory, &mock_logger}; + std::unique_ptr<GenericRequest> + request{new TestRequest{GenericRequestHeader{asapo::kOpcodeUnknownOp, 0, 1000000}, 0}}; + void SetUp() override { + } + void TearDown() override { + } }; TEST(RequestPool, Constructor) { @@ -123,7 +125,7 @@ void ExpectSend(MockRequestHandler* mock_handler, int ntimes = 1) { EXPECT_CALL(*mock_handler, ProcessRequestUnlocked_t(_, _)).Times(ntimes).WillRepeatedly( DoAll(testing::SetArgPointee<1>(false), Return(true) - )); + )); EXPECT_CALL(*mock_handler, TearDownProcessingRequestLocked(true)).Times(ntimes); } @@ -133,7 +135,7 @@ void ExpectFailProcessRequest(MockRequestHandler* mock_handler) { EXPECT_CALL(*mock_handler, ProcessRequestUnlocked_t(_, _)).Times(AtLeast(1)).WillRepeatedly( DoAll(testing::SetArgPointee<1>(true), Return(false) - )); + )); EXPECT_CALL(*mock_handler, TearDownProcessingRequestLocked(false)).Times(AtLeast(1)); } @@ -254,7 +256,7 @@ TEST_F(RequestPoolTests, RefuseAddRequestsIfHitSizeLimitation) { std::vector<std::unique_ptr<GenericRequest>> requests; requests.push_back(std::move(request)); - requests.push_back(std::unique_ptr<GenericRequest>{request2}); + requests.push_back(std::unique_ptr<GenericRequest> {request2}); pool.SetLimits(asapo::RequestPoolLimits({1, 0})); auto err = pool.AddRequests(std::move(requests)); @@ -273,7 +275,7 @@ TEST_F(RequestPoolTests, RefuseAddRequestsIfHitMemoryLimitation) { std::vector<std::unique_ptr<GenericRequest>> requests; requests.push_back(std::move(request)); - requests.push_back(std::unique_ptr<GenericRequest>{request2}); + requests.push_back(std::unique_ptr<GenericRequest> {request2}); pool.SetLimits(asapo::RequestPoolLimits({0, 1})); auto err = pool.AddRequests(std::move(requests)); @@ -291,7 +293,7 @@ TEST_F(RequestPoolTests, AddRequestsOk) { std::vector<std::unique_ptr<GenericRequest>> requests; requests.push_back(std::move(request)); - requests.push_back(std::unique_ptr<GenericRequest>{request2}); + requests.push_back(std::unique_ptr<GenericRequest> {request2}); auto err = pool.AddRequests(std::move(requests)); diff --git a/consumer/api/cpp/include/asapo/consumer/consumer.h b/consumer/api/cpp/include/asapo/consumer/consumer.h index ce97157ab09c6e7f12581e81aa8086da51c9c7af..e6afb18b8d9de09bd6ce72abf5ec671385fde755 100644 --- a/consumer/api/cpp/include/asapo/consumer/consumer.h +++ b/consumer/api/cpp/include/asapo/consumer/consumer.h @@ -13,9 +13,9 @@ namespace asapo { enum class StreamFilter { - kAllStreams, - kFinishedStreams, - kUnfinishedStreams + kAllStreams, + kFinishedStreams, + kUnfinishedStreams }; class Consumer { @@ -27,14 +27,14 @@ class Consumer { \return nullptr of command was successful, otherwise error. */ virtual Error ResetLastReadMarker(std::string group_id, std::string stream) = 0; - //! Return version - /*! - \param client_info - for client version - \param server_info - for server - \param supported - set to true if client is supported by server - \return nullptr of command was successful, otherwise error. - */ - virtual Error GetVersionInfo(std::string* client_info,std::string* server_info, bool* supported) = 0; + //! Return version + /*! + \param client_info - for client version + \param server_info - for server + \param supported - set to true if client is supported by server + \return nullptr of command was successful, otherwise error. + */ + virtual Error GetVersionInfo(std::string* client_info, std::string* server_info, bool* supported) = 0; virtual Error SetLastReadMarker(std::string group_id, uint64_t value, std::string stream) = 0; @@ -87,15 +87,15 @@ class Consumer { */ virtual NetworkConnectionType CurrentConnectionType() const = 0; - //! Get list of streams with filter, set from to "" to get all streams + //! Get list of streams with filter, set from to "" to get all streams virtual StreamInfos GetStreamList(std::string from, StreamFilter filter, Error* err) = 0; - //! Delete stream - /*! - \param stream - stream to send messages to - \param options - delete stream options - \return Error - will be nullptr on success - */ + //! Delete stream + /*! + \param stream - stream to send messages to + \param options - delete stream options + \return Error - will be nullptr on success + */ virtual Error DeleteStream(std::string stream, DeleteStreamOptions options) = 0; @@ -107,20 +107,20 @@ class Consumer { */ virtual uint64_t GetCurrentSize(std::string stream, Error* err) = 0; - //! Get current number of datasets in stream - /*! - \param stream - stream to use - \param include_incomplete - flag to count incomplete datasets as well - \param err - return nullptr of operation succeed, error otherwise. - \return number of datasets. - */ + //! Get current number of datasets in stream + /*! + \param stream - stream to use + \param include_incomplete - flag to count incomplete datasets as well + \param err - return nullptr of operation succeed, error otherwise. + \return number of datasets. + */ virtual uint64_t GetCurrentDatasetCount(std::string stream, bool include_incomplete, Error* err) = 0; - //! Generate new GroupID. - /*! - \param err - return nullptr of operation succeed, error otherwise. - \return group ID. - */ + //! Generate new GroupID. + /*! + \param err - return nullptr of operation succeed, error otherwise. + \return group ID. + */ virtual std::string GenerateNewGroupId(Error* err) = 0; @@ -224,7 +224,7 @@ class Consumer { */ virtual void SetResendNacs(bool resend, uint64_t delay_ms, uint64_t resend_attempts) = 0; - //! Will try to interrupt current long runnung operations (mainly needed to exit waiting loop in C from Python) + //! Will try to interrupt current long runnung operations (mainly needed to exit waiting loop in C from Python) virtual void InterruptCurrentOperation() = 0; virtual ~Consumer() = default; // needed for unique_ptr to delete itself diff --git a/consumer/api/cpp/include/asapo/consumer/consumer_error.h b/consumer/api/cpp/include/asapo/consumer/consumer_error.h index 38e5329d8f4aad6fdd98e25a85aae6d609c8cb04..f3aae5495157eb42c008c498aa474e009acc51b6 100644 --- a/consumer/api/cpp/include/asapo/consumer/consumer_error.h +++ b/consumer/api/cpp/include/asapo/consumer/consumer_error.h @@ -22,9 +22,9 @@ using ConsumerErrorTemplate = ServiceErrorTemplate<ConsumerErrorType, ErrorType: class PartialErrorData : public CustomErrorData { - public: - uint64_t id; - uint64_t expected_size; + public: + uint64_t id; + uint64_t expected_size; }; class ConsumerErrorData : public CustomErrorData { diff --git a/consumer/api/cpp/src/consumer.cpp b/consumer/api/cpp/src/consumer.cpp index f5424580cbfddc13f23726a5643e20fed3f42a60..cb7e6bc1616b3326e4bac1a7f95b804d0cf91b59 100644 --- a/consumer/api/cpp/src/consumer.cpp +++ b/consumer/api/cpp/src/consumer.cpp @@ -27,7 +27,7 @@ std::unique_ptr<Consumer> Create(const std::string& source_name, } std::unique_ptr<Consumer> ConsumerFactory::CreateConsumer(std::string server_name, std::string source_path, - bool has_filesystem, SourceCredentials source, Error* error) noexcept { + bool has_filesystem, SourceCredentials source, Error* error) noexcept { return Create<ConsumerImpl>(std::move(server_name), error, std::move(source_path), has_filesystem, std::move(source)); } diff --git a/consumer/api/cpp/src/consumer_impl.cpp b/consumer/api/cpp/src/consumer_impl.cpp index f6e8d95ec11d865111f6de48e7b23534d13b777f..0efcc6cb3e6d25c224cf182d3221a3f38b2ac6ad 100644 --- a/consumer/api/cpp/src/consumer_impl.cpp +++ b/consumer/api/cpp/src/consumer_impl.cpp @@ -21,22 +21,22 @@ namespace asapo { const std::string ConsumerImpl::kBrokerServiceName = "asapo-broker"; const std::string ConsumerImpl::kFileTransferServiceName = "asapo-file-transfer"; -Error GetNoDataResponseFromJson(const std::string &json_string, ConsumerErrorData* data) { +Error GetNoDataResponseFromJson(const std::string& json_string, ConsumerErrorData* data) { JsonStringParser parser(json_string); Error err; if ((err = parser.GetUInt64("id", &data->id)) || (err = parser.GetUInt64("id_max", &data->id_max)) - || (err = parser.GetString("next_stream", &data->next_stream))) { + || (err = parser.GetString("next_stream", &data->next_stream))) { return err; } return nullptr; } -Error GetPartialDataResponseFromJson(const std::string &json_string, PartialErrorData* data) { +Error GetPartialDataResponseFromJson(const std::string& json_string, PartialErrorData* data) { Error err; auto parser = JsonStringParser(json_string); uint64_t id, size; if ((err = parser.GetUInt64("size", &size)) || - (err = parser.GetUInt64("_id", &id))) { + (err = parser.GetUInt64("_id", &id))) { return err; } data->id = id; @@ -44,7 +44,7 @@ Error GetPartialDataResponseFromJson(const std::string &json_string, PartialErro return nullptr; } -Error ConsumerErrorFromPartialDataResponse(const std::string &response) { +Error ConsumerErrorFromPartialDataResponse(const std::string& response) { PartialErrorData data; auto parse_error = GetPartialDataResponseFromJson(response, &data); if (parse_error) { @@ -52,11 +52,11 @@ Error ConsumerErrorFromPartialDataResponse(const std::string &response) { } auto err = ConsumerErrorTemplates::kPartialData.Generate(); PartialErrorData* error_data = new PartialErrorData{data}; - err->SetCustomData(std::unique_ptr<CustomErrorData>{error_data}); + err->SetCustomData(std::unique_ptr<CustomErrorData> {error_data}); return err; } -Error ConsumerErrorFromNoDataResponse(const std::string &response) { +Error ConsumerErrorFromNoDataResponse(const std::string& response) { if (response.find("get_record_by_id") != std::string::npos) { ConsumerErrorData data; auto parse_error = GetNoDataResponseFromJson(response, &data); @@ -71,27 +71,37 @@ Error ConsumerErrorFromNoDataResponse(const std::string &response) { err = ConsumerErrorTemplates::kNoData.Generate(); } ConsumerErrorData* error_data = new ConsumerErrorData{data}; - err->SetCustomData(std::unique_ptr<CustomErrorData>{error_data}); + err->SetCustomData(std::unique_ptr<CustomErrorData> {error_data}); return err; } return ConsumerErrorTemplates::kNoData.Generate(); } -Error ConsumerErrorFromHttpCode(const RequestOutput* response, const HttpCode &code) { +Error ConsumerErrorFromHttpCode(const RequestOutput* response, const HttpCode& code) { switch (code) { - case HttpCode::OK:return nullptr; - case HttpCode::NoContent:return nullptr; - case HttpCode::PartialContent:return ConsumerErrorFromPartialDataResponse(response->to_string()); - case HttpCode::BadRequest:return ConsumerErrorTemplates::kWrongInput.Generate(response->to_string()); - case HttpCode::Unauthorized:return ConsumerErrorTemplates::kWrongInput.Generate(response->to_string()); - case HttpCode::InternalServerError:return ConsumerErrorTemplates::kInterruptedTransaction.Generate(response->to_string()); - case HttpCode::NotFound:return ConsumerErrorTemplates::kUnavailableService.Generate(response->to_string()); - case HttpCode::Conflict:return ConsumerErrorFromNoDataResponse(response->to_string()); - case HttpCode::UnsupportedMediaType:return ConsumerErrorTemplates::kUnsupportedClient.Generate(response->to_string()); - default:return ConsumerErrorTemplates::kInterruptedTransaction.Generate(response->to_string()); - } -} -Error ConsumerErrorFromServerError(const Error &server_err) { + case HttpCode::OK: + return nullptr; + case HttpCode::NoContent: + return nullptr; + case HttpCode::PartialContent: + return ConsumerErrorFromPartialDataResponse(response->to_string()); + case HttpCode::BadRequest: + return ConsumerErrorTemplates::kWrongInput.Generate(response->to_string()); + case HttpCode::Unauthorized: + return ConsumerErrorTemplates::kWrongInput.Generate(response->to_string()); + case HttpCode::InternalServerError: + return ConsumerErrorTemplates::kInterruptedTransaction.Generate(response->to_string()); + case HttpCode::NotFound: + return ConsumerErrorTemplates::kUnavailableService.Generate(response->to_string()); + case HttpCode::Conflict: + return ConsumerErrorFromNoDataResponse(response->to_string()); + case HttpCode::UnsupportedMediaType: + return ConsumerErrorTemplates::kUnsupportedClient.Generate(response->to_string()); + default: + return ConsumerErrorTemplates::kInterruptedTransaction.Generate(response->to_string()); + } +} +Error ConsumerErrorFromServerError(const Error& server_err) { if (server_err == HttpErrorTemplates::kTransferError) { return ConsumerErrorTemplates::kInterruptedTransaction.Generate(server_err->Explain()); } else { @@ -99,10 +109,10 @@ Error ConsumerErrorFromServerError(const Error &server_err) { } } -Error ProcessRequestResponce(const RequestInfo &request, - const Error &server_err, +Error ProcessRequestResponce(const RequestInfo& request, + const Error& server_err, const RequestOutput* response, - const HttpCode &code) { + const HttpCode& code) { Error err; if (server_err != nullptr) { err = ConsumerErrorFromServerError(server_err); @@ -110,8 +120,8 @@ Error ProcessRequestResponce(const RequestInfo &request, err = ConsumerErrorFromHttpCode(response, code); } - if (err!=nullptr) { - std::string prefix = "Error processing request " + request.host+request.api; + if (err != nullptr) { + std::string prefix = "Error processing request " + request.host + request.api; err->Prepend(prefix); } return err; @@ -150,35 +160,36 @@ std::string ConsumerImpl::RequestWithToken(std::string uri) { return std::move(uri) + "?token=" + source_credentials_.user_token; } -Error ConsumerImpl::ProcessPostRequest(const RequestInfo &request, RequestOutput* response, HttpCode* code) { +Error ConsumerImpl::ProcessPostRequest(const RequestInfo& request, RequestOutput* response, HttpCode* code) { Error err; switch (request.output_mode) { - case OutputDataMode::string: - response->string_output = - httpclient__->Post(RequestWithToken(request.host + request.api) + request.extra_params, - request.cookie, - request.body, - code, - &err); - break; - case OutputDataMode::array: - err = - httpclient__->Post(RequestWithToken(request.host + request.api) + request.extra_params, request.cookie, - request.body, &response->data_output, response->data_output_size, code); - break; - default:break; + case OutputDataMode::string: + response->string_output = + httpclient__->Post(RequestWithToken(request.host + request.api) + request.extra_params, + request.cookie, + request.body, + code, + &err); + break; + case OutputDataMode::array: + err = + httpclient__->Post(RequestWithToken(request.host + request.api) + request.extra_params, request.cookie, + request.body, &response->data_output, response->data_output_size, code); + break; + default: + break; } return err; } -Error ConsumerImpl::ProcessGetRequest(const RequestInfo &request, RequestOutput* response, HttpCode* code) { +Error ConsumerImpl::ProcessGetRequest(const RequestInfo& request, RequestOutput* response, HttpCode* code) { Error err; response->string_output = httpclient__->Get(RequestWithToken(request.host + request.api) + request.extra_params, code, &err); return err; } -Error ConsumerImpl::ProcessRequest(RequestOutput* response, const RequestInfo &request, std::string* service_uri) { +Error ConsumerImpl::ProcessRequest(RequestOutput* response, const RequestInfo& request, std::string* service_uri) { Error err; HttpCode code; if (request.post) { @@ -192,7 +203,7 @@ Error ConsumerImpl::ProcessRequest(RequestOutput* response, const RequestInfo &r return ProcessRequestResponce(request, err, response, code); } -RequestInfo ConsumerImpl::GetDiscoveryRequest(const std::string &service_name) const { +RequestInfo ConsumerImpl::GetDiscoveryRequest(const std::string& service_name) const { RequestInfo ri; ri.host = endpoint_; ri.api = "/asapo-discovery/" + kConsumerProtocol.GetDiscoveryVersion() + "/" + service_name; @@ -207,13 +218,13 @@ Error ConsumerImpl::ProcessDiscoverServiceResult(Error err, std::string* uri_to_ return err; } return ConsumerErrorTemplates::kUnavailableService.Generate(" on " + endpoint_ - + (err != nullptr ? ": " + err->Explain() - : "")); + + (err != nullptr ? ": " + err->Explain() + : "")); } return nullptr; } -Error ConsumerImpl::DiscoverService(const std::string &service_name, std::string* uri_to_set) { +Error ConsumerImpl::DiscoverService(const std::string& service_name, std::string* uri_to_set) { if (!uri_to_set->empty()) { return nullptr; } @@ -225,7 +236,7 @@ Error ConsumerImpl::DiscoverService(const std::string &service_name, std::string } bool ConsumerImpl::SwitchToGetByIdIfPartialData(Error* err, - const std::string &response, + const std::string& response, std::string* group_id, std::string* redirect_uri) { if (*err == ConsumerErrorTemplates::kPartialData) { @@ -242,7 +253,7 @@ bool ConsumerImpl::SwitchToGetByIdIfPartialData(Error* err, } bool ConsumerImpl::SwitchToGetByIdIfNoData(Error* err, - const std::string &response, + const std::string& response, std::string* group_id, std::string* redirect_uri) { if (*err == ConsumerErrorTemplates::kNoData) { @@ -281,9 +292,9 @@ Error ConsumerImpl::GetRecordFromServer(std::string* response, std::string group std::string request_suffix = OpToUriCmd(op); std::string request_group = OpToUriCmd(op); std::string - request_api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source - + "/" + std::move(stream); + request_api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" + + source_credentials_.data_source + + "/" + std::move(stream); uint64_t elapsed_ms = 0; Error no_data_error; while (true) { @@ -297,7 +308,7 @@ Error ConsumerImpl::GetRecordFromServer(std::string* response, std::string group auto ri = PrepareRequestInfo(request_api + "/" + group_id + "/" + request_suffix, dataset, min_size); if (request_suffix == "next" && resend_) { ri.extra_params = ri.extra_params + "&resend_nacks=true" + "&delay_ms=" + - std::to_string(delay_ms_) + "&resend_attempts=" + std::to_string(resend_attempts_); + std::to_string(delay_ms_) + "&resend_attempts=" + std::to_string(resend_attempts_); } RequestOutput output; err = ProcessRequest(&output, ri, ¤t_broker_uri_); @@ -313,7 +324,7 @@ Error ConsumerImpl::GetRecordFromServer(std::string* response, std::string group if (request_suffix == "next") { auto save_error = SwitchToGetByIdIfNoData(&err, *response, &group_id, &request_suffix) - || SwitchToGetByIdIfPartialData(&err, *response, &group_id, &request_suffix); + || SwitchToGetByIdIfPartialData(&err, *response, &group_id, &request_suffix); if (err == ConsumerErrorTemplates::kInterruptedTransaction) { return err; } @@ -350,9 +361,12 @@ Error ConsumerImpl::GetLast(MessageMeta* info, MessageData* data, std::string st std::string ConsumerImpl::OpToUriCmd(GetMessageServerOperation op) { switch (op) { - case GetMessageServerOperation::GetNext:return "next"; - case GetMessageServerOperation::GetLast:return "last"; - default:return "last"; + case GetMessageServerOperation::GetNext: + return "next"; + case GetMessageServerOperation::GetLast: + return "last"; + default: + return "last"; } } @@ -487,7 +501,7 @@ std::string ConsumerImpl::GenerateNewGroupId(Error* err) { return BrokerRequestWithTimeout(ri, err); } -Error ConsumerImpl::ServiceRequestWithTimeout(const std::string &service_name, +Error ConsumerImpl::ServiceRequestWithTimeout(const std::string& service_name, std::string* service_uri, RequestInfo request, RequestOutput* response) { @@ -564,8 +578,8 @@ Error ConsumerImpl::ResetLastReadMarker(std::string group_id, std::string stream Error ConsumerImpl::SetLastReadMarker(std::string group_id, uint64_t value, std::string stream) { RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + "/" - + std::move(stream) + "/" + std::move(group_id) + "/resetcounter"; + + source_credentials_.data_source + "/" + + std::move(stream) + "/" + std::move(group_id) + "/resetcounter"; ri.extra_params = "&value=" + std::to_string(value); ri.post = true; @@ -595,10 +609,10 @@ Error ConsumerImpl::GetRecordFromServerById(uint64_t id, std::string* response, RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + - "/" + std::move( - group_id) + "/" + std::to_string(id); + + source_credentials_.data_source + + +"/" + std::move(stream) + + "/" + std::move( + group_id) + "/" + std::to_string(id); if (dataset) { ri.extra_params += "&dataset=true"; ri.extra_params += "&minsize=" + std::to_string(min_size); @@ -613,7 +627,7 @@ std::string ConsumerImpl::GetBeamtimeMeta(Error* err) { RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + "/default/0/meta/0"; + + source_credentials_.data_source + "/default/0/meta/0"; return BrokerRequestWithTimeout(ri, err); } @@ -636,8 +650,8 @@ MessageMetas ConsumerImpl::QueryMessages(std::string query, std::string stream, RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - "/" + std::move(stream) + "/0/querymessages"; + + source_credentials_.data_source + + "/" + std::move(stream) + "/0/querymessages"; ri.post = true; ri.body = std::move(query); @@ -712,9 +726,12 @@ StreamInfos ParseStreamsFromResponse(std::string response, Error* err) { std::string filterToString(StreamFilter filter) { switch (filter) { - case StreamFilter::kAllStreams:return "all"; - case StreamFilter::kFinishedStreams:return "finished"; - case StreamFilter::kUnfinishedStreams:return "unfinished"; + case StreamFilter::kAllStreams: + return "all"; + case StreamFilter::kFinishedStreams: + return "finished"; + case StreamFilter::kUnfinishedStreams: + return "unfinished"; } return ""; } @@ -729,10 +746,10 @@ StreamInfos ConsumerImpl::GetStreamList(std::string from, StreamFilter filter, E return ParseStreamsFromResponse(std::move(response), err); } -RequestInfo ConsumerImpl::GetStreamListRequest(const std::string &from, const StreamFilter &filter) const { +RequestInfo ConsumerImpl::GetStreamListRequest(const std::string& from, const StreamFilter& filter) const { RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + "/0/streams"; + + source_credentials_.data_source + "/0/streams"; ri.post = false; if (!from.empty()) { ri.extra_params = "&from=" + from; @@ -764,13 +781,13 @@ RequestInfo ConsumerImpl::CreateFolderTokenRequest() const { ri.post = true; ri.body = "{\"Folder\":\"" + source_path_ + "\",\"BeamtimeId\":\"" + source_credentials_.beamtime_id + "\",\"Token\":\"" - + - source_credentials_.user_token + "\"}"; + + + source_credentials_.user_token + "\"}"; return ri; } Error ConsumerImpl::GetDataFromFileTransferService(MessageMeta* info, MessageData* data, - bool retry_with_new_token) { + bool retry_with_new_token) { auto err = UpdateFolderTokenIfNeeded(retry_with_new_token); if (err) { return err; @@ -779,7 +796,7 @@ Error ConsumerImpl::GetDataFromFileTransferService(MessageMeta* info, MessageDat if (info->size == 0) { err = FtsSizeRequestWithTimeout(info); if (err == ConsumerErrorTemplates::kWrongInput - && !retry_with_new_token) { // token expired? Refresh token and try again. + && !retry_with_new_token) { // token expired? Refresh token and try again. return GetDataFromFileTransferService(info, data, true); } if (err) { @@ -789,7 +806,7 @@ Error ConsumerImpl::GetDataFromFileTransferService(MessageMeta* info, MessageDat err = FtsRequestWithTimeout(info, data); if (err == ConsumerErrorTemplates::kWrongInput - && !retry_with_new_token) { // token expired? Refresh token and try again. + && !retry_with_new_token) { // token expired? Refresh token and try again. return GetDataFromFileTransferService(info, data, true); } return err; @@ -801,9 +818,9 @@ Error ConsumerImpl::Acknowledge(std::string group_id, uint64_t id, std::string s } RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + - "/" + std::move(group_id) + "/" + std::to_string(id); + + source_credentials_.data_source + + +"/" + std::move(stream) + + "/" + std::move(group_id) + "/" + std::to_string(id); ri.post = true; ri.body = "{\"Op\":\"ackmessage\"}"; @@ -823,9 +840,9 @@ IdList ConsumerImpl::GetUnacknowledgedMessages(std::string group_id, } RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + - "/" + std::move(group_id) + "/nacks"; + + source_credentials_.data_source + + +"/" + std::move(stream) + + "/" + std::move(group_id) + "/nacks"; ri.extra_params = "&from=" + std::to_string(from_id) + "&to=" + std::to_string(to_id); auto json_string = BrokerRequestWithTimeout(ri, error); @@ -849,9 +866,9 @@ uint64_t ConsumerImpl::GetLastAcknowledgedMessage(std::string group_id, std::str } RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + - "/" + std::move(group_id) + "/lastack"; + + source_credentials_.data_source + + +"/" + std::move(stream) + + "/" + std::move(group_id) + "/lastack"; auto json_string = BrokerRequestWithTimeout(ri, error); if (*error) { @@ -885,9 +902,9 @@ Error ConsumerImpl::NegativeAcknowledge(std::string group_id, } RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + - "/" + std::move(group_id) + "/" + std::to_string(id); + + source_credentials_.data_source + + +"/" + std::move(stream) + + "/" + std::move(group_id) + "/" + std::to_string(id); ri.post = true; ri.body = R"({"Op":"negackmessage","Params":{"DelayMs":)" + std::to_string(delay_ms) + "}}"; @@ -904,13 +921,13 @@ uint64_t ConsumerImpl::GetCurrentDatasetCount(std::string stream, bool include_i return GetCurrentCount(stream, ri, err); } -RequestInfo ConsumerImpl::GetSizeRequestForDatasetStream(std::string &stream, bool include_incomplete) const { +RequestInfo ConsumerImpl::GetSizeRequestForDatasetStream(std::string& stream, bool include_incomplete) const { RequestInfo ri = GetSizeRequestForSingleMessagesStream(stream); ri.extra_params = std::string("&incomplete=") + (include_incomplete ? "true" : "false"); return ri; } -uint64_t ConsumerImpl::GetCurrentCount(std::string stream, const RequestInfo &ri, Error* err) { +uint64_t ConsumerImpl::GetCurrentCount(std::string stream, const RequestInfo& ri, Error* err) { auto responce = BrokerRequestWithTimeout(ri, err); if (*err) { return 0; @@ -918,7 +935,7 @@ uint64_t ConsumerImpl::GetCurrentCount(std::string stream, const RequestInfo &ri return ParseGetCurrentCountResponce(err, responce); } -uint64_t ConsumerImpl::ParseGetCurrentCountResponce(Error* err, const std::string &responce) const { +uint64_t ConsumerImpl::ParseGetCurrentCountResponce(Error* err, const std::string& responce) const { JsonStringParser parser(responce); uint64_t size; if ((*err = parser.GetUInt64("size", &size)) != nullptr) { @@ -927,11 +944,11 @@ uint64_t ConsumerImpl::ParseGetCurrentCountResponce(Error* err, const std::strin return size; } -RequestInfo ConsumerImpl::GetSizeRequestForSingleMessagesStream(std::string &stream) const { +RequestInfo ConsumerImpl::GetSizeRequestForSingleMessagesStream(std::string& stream) const { RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + "/size"; + + source_credentials_.data_source + + +"/" + std::move(stream) + "/size"; return ri; } @@ -972,9 +989,9 @@ Error ConsumerImpl::GetVersionInfo(std::string* client_info, std::string* server RequestInfo ConsumerImpl::GetDeleteStreamRequest(std::string stream, DeleteStreamOptions options) const { RequestInfo ri; ri.api = "/" + kConsumerProtocol.GetBrokerVersion() + "/beamtime/" + source_credentials_.beamtime_id + "/" - + source_credentials_.data_source + - +"/" + std::move(stream) + - "/delete"; + + source_credentials_.data_source + + +"/" + std::move(stream) + + "/delete"; ri.post = true; ri.body = options.Json(); return ri; diff --git a/consumer/api/cpp/src/consumer_impl.h b/consumer/api/cpp/src/consumer_impl.h index 7f7411c99e8984ea1b1c58ae7b9d747e79f3177d..dd2a2635fbc26b776ab66cb6070a96c1da9abe3c 100644 --- a/consumer/api/cpp/src/consumer_impl.h +++ b/consumer/api/cpp/src/consumer_impl.h @@ -46,7 +46,8 @@ struct RequestOutput { } }; -Error ProcessRequestResponce(const RequestInfo& request, const Error& server_err, const RequestOutput* response, const HttpCode& code); +Error ProcessRequestResponce(const RequestInfo& request, const Error& server_err, const RequestOutput* response, + const HttpCode& code); Error ConsumerErrorFromNoDataResponse(const std::string& response); Error ConsumerErrorFromPartialDataResponse(const std::string& response); DataSet DecodeDatasetFromResponse(std::string response, Error* err); @@ -84,7 +85,7 @@ class ConsumerImpl final : public asapo::Consumer { Error GetById(uint64_t id, MessageMeta* info, MessageData* data, std::string stream) override; - Error GetVersionInfo(std::string* client_info,std::string* server_info, bool* supported) override; + Error GetVersionInfo(std::string* client_info, std::string* server_info, bool* supported) override; Error DeleteStream(std::string stream, DeleteStreamOptions options) override; void SetTimeout(uint64_t timeout_ms) override; void ForceNoRdma() override; @@ -124,11 +125,12 @@ class ConsumerImpl final : public asapo::Consumer { bool dataset = false, uint64_t min_size = 0); Error GetDataIfNeeded(MessageMeta* info, MessageData* data); Error DiscoverService(const std::string& service_name, std::string* uri_to_set); - bool SwitchToGetByIdIfNoData(Error* err, const std::string& response, std::string* group_id,std::string* redirect_uri); - bool SwitchToGetByIdIfPartialData(Error* err, const std::string& response, std::string* group_id,std::string* redirect_uri); + bool SwitchToGetByIdIfNoData(Error* err, const std::string& response, std::string* group_id, std::string* redirect_uri); + bool SwitchToGetByIdIfPartialData(Error* err, const std::string& response, std::string* group_id, + std::string* redirect_uri); Error ProcessRequest(RequestOutput* response, const RequestInfo& request, std::string* service_uri); Error GetMessageFromServer(GetMessageServerOperation op, uint64_t id, std::string group_id, std::string stream, - MessageMeta* info, MessageData* data); + MessageMeta* info, MessageData* data); DataSet GetDatasetFromServer(GetMessageServerOperation op, uint64_t id, std::string group_id, std::string stream, uint64_t min_size, Error* err); bool DataCanBeInBuffer(const MessageMeta* info); @@ -146,7 +148,7 @@ class ConsumerImpl final : public asapo::Consumer { Error UpdateFolderTokenIfNeeded(bool ignore_existing); uint64_t GetCurrentCount(std::string stream, const RequestInfo& ri, Error* err); - RequestInfo GetStreamListRequest(const std::string &from, const StreamFilter &filter) const; + RequestInfo GetStreamListRequest(const std::string& from, const StreamFilter& filter) const; Error GetServerVersionInfo(std::string* server_info, bool* supported) ; std::string endpoint_; @@ -167,12 +169,12 @@ class ConsumerImpl final : public asapo::Consumer { uint64_t resend_attempts_; std::atomic<bool> interrupt_flag_{ false}; - RequestInfo GetSizeRequestForSingleMessagesStream(std::string &stream) const; - RequestInfo GetSizeRequestForDatasetStream(std::string &stream, bool include_incomplete) const; - uint64_t ParseGetCurrentCountResponce(Error* err, const std::string &responce) const; - RequestInfo GetDiscoveryRequest(const std::string &service_name) const; - RequestInfo GetVersionRequest() const; - RequestInfo GetDeleteStreamRequest(std::string stream, DeleteStreamOptions options) const; + RequestInfo GetSizeRequestForSingleMessagesStream(std::string& stream) const; + RequestInfo GetSizeRequestForDatasetStream(std::string& stream, bool include_incomplete) const; + uint64_t ParseGetCurrentCountResponce(Error* err, const std::string& responce) const; + RequestInfo GetDiscoveryRequest(const std::string& service_name) const; + RequestInfo GetVersionRequest() const; + RequestInfo GetDeleteStreamRequest(std::string stream, DeleteStreamOptions options) const; }; } diff --git a/consumer/api/cpp/src/tcp_consumer_client.cpp b/consumer/api/cpp/src/tcp_consumer_client.cpp index d58f05d6bb3213beeb39ec7e0a539ed181a68345..7eb9432aa335186766cd067f2b765c5b8e101c01 100644 --- a/consumer/api/cpp/src/tcp_consumer_client.cpp +++ b/consumer/api/cpp/src/tcp_consumer_client.cpp @@ -23,7 +23,8 @@ Error TcpConsumerClient::SendGetDataRequest(SocketDescriptor sd, const MessageMe return err; } -Error TcpConsumerClient::ReconnectAndResendGetDataRequest(SocketDescriptor* sd, const MessageMeta* info) const noexcept { +Error TcpConsumerClient::ReconnectAndResendGetDataRequest(SocketDescriptor* sd, + const MessageMeta* info) const noexcept { Error err; *sd = connection_pool__->Reconnect(*sd, &err); if (err) { @@ -46,9 +47,9 @@ Error TcpConsumerClient::ReceiveResponce(SocketDescriptor sd) const noexcept { if (response.error_code) { switch (response.error_code) { case kNetErrorNotSupported: - io__->CloseSocket(sd, nullptr); - connection_pool__->ReleaseConnection(sd); - break; + io__->CloseSocket(sd, nullptr); + connection_pool__->ReleaseConnection(sd); + break; case kNetErrorWrongRequest: io__->CloseSocket(sd, nullptr); break; @@ -61,7 +62,8 @@ Error TcpConsumerClient::ReceiveResponce(SocketDescriptor sd) const noexcept { return nullptr; } -Error TcpConsumerClient::QueryCacheHasData(SocketDescriptor* sd, const MessageMeta* info, bool try_reconnect) const noexcept { +Error TcpConsumerClient::QueryCacheHasData(SocketDescriptor* sd, const MessageMeta* info, + bool try_reconnect) const noexcept { Error err; err = SendGetDataRequest(*sd, info); if (err && try_reconnect) { diff --git a/consumer/api/cpp/unittests/test_consumer_api.cpp b/consumer/api/cpp/unittests/test_consumer_api.cpp index a1747fb551e7f2893d799ac4aefb3b470dc34fd6..f9d0a0cf2516df59c6c55c8dec5daded5dfbbd21 100644 --- a/consumer/api/cpp/unittests/test_consumer_api.cpp +++ b/consumer/api/cpp/unittests/test_consumer_api.cpp @@ -28,11 +28,11 @@ class ConsumerFactoryTests : public Test { TEST_F(ConsumerFactoryTests, CreateServerDataSource) { auto consumer = ConsumerFactory::CreateConsumer("server", - "path", - false, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - "beamtime_id", "", "", "token"}, - &error); + "path", + false, + asapo::SourceCredentials{asapo::SourceType::kProcessed, + "beamtime_id", "", "", "token"}, + &error); ASSERT_THAT(error, Eq(nullptr)); ASSERT_THAT(dynamic_cast<ConsumerImpl*>(consumer.get()), Ne(nullptr)); diff --git a/consumer/api/cpp/unittests/test_consumer_impl.cpp b/consumer/api/cpp/unittests/test_consumer_impl.cpp index 93511dee7837f231368c258b2c0039b680cb5227..aca44d359c39a3cb3dbc8ad5632cbca03cef8921 100644 --- a/consumer/api/cpp/unittests/test_consumer_impl.cpp +++ b/consumer/api/cpp/unittests/test_consumer_impl.cpp @@ -47,10 +47,10 @@ namespace { TEST(FolderDataBroker, Constructor) { auto consumer = - std::unique_ptr<ConsumerImpl>{new ConsumerImpl("test", "path", false, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - "beamtime_id", "", "", "token"}) - }; + std::unique_ptr<ConsumerImpl> {new ConsumerImpl("test", "path", false, + asapo::SourceCredentials{asapo::SourceType::kProcessed, + "beamtime_id", "", "", "token"}) + }; ASSERT_THAT(dynamic_cast<asapo::SystemIO*>(consumer->io__.get()), Ne(nullptr)); ASSERT_THAT(dynamic_cast<asapo::CurlHttpClient*>(consumer->httpclient__.get()), Ne(nullptr)); ASSERT_THAT(consumer->net_client__.get(), Eq(nullptr)); @@ -58,137 +58,139 @@ TEST(FolderDataBroker, Constructor) { const uint8_t expected_value = 1; -asapo::ErrorInterface* new_error(){ - return new asapo::SimpleError{"s"}; +asapo::ErrorInterface* new_error() { + return new asapo::SimpleError{"s"}; }; class ConsumerImplTests : public Test { - public: - std::unique_ptr<ConsumerImpl> consumer, fts_consumer; - NiceMock<MockIO> mock_io; - NiceMock<MockHttpClient> mock_http_client; - NiceMock<MockNetClient> mock_netclient; - MessageMeta info; - std::string expected_server_uri = "test:8400"; - std::string expected_broker_uri = "asapo-broker:5005"; - std::string expected_consumer_protocol = asapo::kConsumerProtocol.GetVersion(); - std::string expected_broker_protocol = asapo::kConsumerProtocol.GetBrokerVersion(); - std::string expected_broker_api = expected_broker_uri + "/" + expected_broker_protocol; - std::string expected_fts_uri = "asapo-file-transfer:5008"; - std::string expected_token = "token"; - std::string expected_path = "/tmp/beamline/beamtime"; - std::string expected_filename = "filename"; - std::string expected_full_path = std::string("/tmp/beamline/beamtime") + asapo::kPathSeparator + expected_filename; - std::string expected_group_id = "groupid"; - std::string expected_data_source = "source"; - std::string expected_stream = "stream"; - std::string expected_metadata = "{\"meta\":1}"; - std::string expected_query_string = "bla"; - std::string expected_folder_token = "folder_token"; - std::string expected_beamtime_id = "beamtime_id"; - uint64_t expected_message_size = 100; - uint64_t expected_dataset_id = 1; - static const uint64_t expected_buf_id = 123; - std::string expected_next_stream = "nextstream"; - std::string expected_fts_query_string = "{\"Folder\":\"" + expected_path + "\",\"FileName\":\"" + expected_filename + - "\"}"; - std::string expected_cookie = "Authorization=Bearer " + expected_folder_token; - - void AssertSingleFileTransfer(); - void SetUp() override { - consumer = std::unique_ptr<ConsumerImpl>{ - new ConsumerImpl(expected_server_uri, - expected_path, - true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, expected_beamtime_id, "", - expected_data_source, expected_token}) - }; - fts_consumer = std::unique_ptr<ConsumerImpl>{ - new ConsumerImpl(expected_server_uri, - expected_path, - false, - asapo::SourceCredentials{asapo::SourceType::kProcessed, expected_beamtime_id, "", - expected_data_source, expected_token}) - }; - consumer->io__ = std::unique_ptr<IO>{&mock_io}; - consumer->httpclient__ = std::unique_ptr<asapo::HttpClient>{&mock_http_client}; - consumer->net_client__ = std::unique_ptr<asapo::NetClient>{&mock_netclient}; - fts_consumer->io__ = std::unique_ptr<IO>{&mock_io}; - fts_consumer->httpclient__ = std::unique_ptr<asapo::HttpClient>{&mock_http_client}; - fts_consumer->net_client__ = std::unique_ptr<asapo::NetClient>{&mock_netclient}; - - } - void TearDown() override { - consumer->io__.release(); - consumer->httpclient__.release(); - consumer->net_client__.release(); - fts_consumer->io__.release(); - fts_consumer->httpclient__.release(); - fts_consumer->net_client__.release(); - - } - void MockGet(const std::string &response, asapo::HttpCode return_code = HttpCode::OK) { - EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_broker_api), _, _)).WillOnce(DoAll( - SetArgPointee<1>(return_code), - SetArgPointee<2>(nullptr), - Return(response) - )); - } - - void MockGetError() { - EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_broker_api), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::NotFound), - SetArgPointee<2>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()), - Return("") - )); - } - void MockGetServiceUri(std::string service, std::string result) { - EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/" + service+"?token=" - + expected_token+"&protocol="+expected_consumer_protocol), _, - _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(result))); - } - - void MockBeforeFTS(MessageData* data); - - void MockGetFTSUri() { - MockGetServiceUri("asapo-file-transfer", expected_fts_uri); - } - - void ExpectFolderToken(); - void ExpectFileTransfer(const asapo::ConsumerErrorTemplate* p_err_template); - void ExpectRepeatedFileTransfer(); - void ExpectIdList(bool error); - void ExpectLastAckId(bool empty_response); - - void MockGetBrokerUri() { - MockGetServiceUri("asapo-broker", expected_broker_uri); - } - void MockReadDataFromFile(int times = 1) { - if (times == 0) { - EXPECT_CALL(mock_io, GetDataFromFile_t(_, _, _)).Times(0); - return; - } - - auto simple_error = []{ - return new asapo::SimpleError{"s"}; - }; - - EXPECT_CALL(mock_io, GetDataFromFile_t(expected_full_path, testing::Pointee(100), _)).Times(AtLeast(times)). - WillRepeatedly(DoAll(SetArgPointee<2>(simple_error), testing::Return(nullptr))); - } - - MessageMeta CreateFI(uint64_t buf_id = expected_buf_id) { - MessageMeta fi; - fi.size = expected_message_size; - fi.id = 1; - fi.buf_id = buf_id; - fi.name = expected_filename; - fi.timestamp = std::chrono::system_clock::now(); - return fi; - } + public: + std::unique_ptr<ConsumerImpl> consumer, fts_consumer; + NiceMock<MockIO> mock_io; + NiceMock<MockHttpClient> mock_http_client; + NiceMock<MockNetClient> mock_netclient; + MessageMeta info; + std::string expected_server_uri = "test:8400"; + std::string expected_broker_uri = "asapo-broker:5005"; + std::string expected_consumer_protocol = asapo::kConsumerProtocol.GetVersion(); + std::string expected_broker_protocol = asapo::kConsumerProtocol.GetBrokerVersion(); + std::string expected_broker_api = expected_broker_uri + "/" + expected_broker_protocol; + std::string expected_fts_uri = "asapo-file-transfer:5008"; + std::string expected_token = "token"; + std::string expected_path = "/tmp/beamline/beamtime"; + std::string expected_filename = "filename"; + std::string expected_full_path = std::string("/tmp/beamline/beamtime") + asapo::kPathSeparator + expected_filename; + std::string expected_group_id = "groupid"; + std::string expected_data_source = "source"; + std::string expected_stream = "stream"; + std::string expected_metadata = "{\"meta\":1}"; + std::string expected_query_string = "bla"; + std::string expected_folder_token = "folder_token"; + std::string expected_beamtime_id = "beamtime_id"; + uint64_t expected_message_size = 100; + uint64_t expected_dataset_id = 1; + static const uint64_t expected_buf_id = 123; + std::string expected_next_stream = "nextstream"; + std::string expected_fts_query_string = "{\"Folder\":\"" + expected_path + "\",\"FileName\":\"" + expected_filename + + "\"}"; + std::string expected_cookie = "Authorization=Bearer " + expected_folder_token; + + void AssertSingleFileTransfer(); + void SetUp() override { + consumer = std::unique_ptr<ConsumerImpl> { + new ConsumerImpl(expected_server_uri, + expected_path, + true, + asapo::SourceCredentials{ + asapo::SourceType::kProcessed, expected_beamtime_id, "", + expected_data_source, expected_token}) + }; + fts_consumer = std::unique_ptr<ConsumerImpl> { + new ConsumerImpl(expected_server_uri, + expected_path, + false, + asapo::SourceCredentials{ + asapo::SourceType::kProcessed, expected_beamtime_id, "", + expected_data_source, expected_token}) + }; + consumer->io__ = std::unique_ptr<IO> {&mock_io}; + consumer->httpclient__ = std::unique_ptr<asapo::HttpClient> {&mock_http_client}; + consumer->net_client__ = std::unique_ptr<asapo::NetClient> {&mock_netclient}; + fts_consumer->io__ = std::unique_ptr<IO> {&mock_io}; + fts_consumer->httpclient__ = std::unique_ptr<asapo::HttpClient> {&mock_http_client}; + fts_consumer->net_client__ = std::unique_ptr<asapo::NetClient> {&mock_netclient}; + + } + void TearDown() override { + consumer->io__.release(); + consumer->httpclient__.release(); + consumer->net_client__.release(); + fts_consumer->io__.release(); + fts_consumer->httpclient__.release(); + fts_consumer->net_client__.release(); + + } + void MockGet(const std::string& response, asapo::HttpCode return_code = HttpCode::OK) { + EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_broker_api), _, _)).WillOnce(DoAll( + SetArgPointee<1>(return_code), + SetArgPointee<2>(nullptr), + Return(response) + )); + } + + void MockGetError() { + EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_broker_api), _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<2>(asapo::IOErrorTemplates::kUnknownIOError.Generate().release()), + Return("") + )); + } + void MockGetServiceUri(std::string service, std::string result) { + EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/" + service + "?token=" + + expected_token + "&protocol=" + expected_consumer_protocol), _, + _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(result))); + } + + void MockBeforeFTS(MessageData* data); + + void MockGetFTSUri() { + MockGetServiceUri("asapo-file-transfer", expected_fts_uri); + } + + void ExpectFolderToken(); + void ExpectFileTransfer(const asapo::ConsumerErrorTemplate* p_err_template); + void ExpectRepeatedFileTransfer(); + void ExpectIdList(bool error); + void ExpectLastAckId(bool empty_response); + + void MockGetBrokerUri() { + MockGetServiceUri("asapo-broker", expected_broker_uri); + } + void MockReadDataFromFile(int times = 1) { + if (times == 0) { + EXPECT_CALL(mock_io, GetDataFromFile_t(_, _, _)).Times(0); + return; + } + + auto simple_error = [] { + return new asapo::SimpleError{"s"}; + }; + + EXPECT_CALL(mock_io, GetDataFromFile_t(expected_full_path, testing::Pointee(100), _)).Times(AtLeast(times)). + WillRepeatedly(DoAll(SetArgPointee<2>(simple_error), testing::Return(nullptr))); + } + + MessageMeta CreateFI(uint64_t buf_id = expected_buf_id) { + MessageMeta fi; + fi.size = expected_message_size; + fi.id = 1; + fi.buf_id = buf_id; + fi.name = expected_filename; + fi.timestamp = std::chrono::system_clock::now(); + return fi; + } }; TEST_F(ConsumerImplTests, GetMessageReturnsErrorOnWrongInput) { @@ -200,28 +202,29 @@ TEST_F(ConsumerImplTests, DefaultStreamIsDetector) { consumer->io__.release(); consumer->httpclient__.release(); consumer->net_client__.release(); - consumer = std::unique_ptr<ConsumerImpl>{ + consumer = std::unique_ptr<ConsumerImpl> { new ConsumerImpl(expected_server_uri, expected_path, false, - asapo::SourceCredentials{asapo::SourceType::kProcessed, "beamtime_id", "", "", - expected_token}) + asapo::SourceCredentials{ + asapo::SourceType::kProcessed, "beamtime_id", "", "", + expected_token}) }; - consumer->io__ = std::unique_ptr<IO>{&mock_io}; - consumer->httpclient__ = std::unique_ptr<asapo::HttpClient>{&mock_http_client}; - consumer->net_client__ = std::unique_ptr<asapo::NetClient>{&mock_netclient}; + consumer->io__ = std::unique_ptr<IO> {&mock_io}; + consumer->httpclient__ = std::unique_ptr<asapo::HttpClient> {&mock_http_client}; + consumer->net_client__ = std::unique_ptr<asapo::NetClient> {&mock_netclient}; MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/detector/stream/" + expected_group_id - + - "/next?token=" - + expected_token, _, + + + "/next?token=" + + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); } @@ -230,12 +233,12 @@ TEST_F(ConsumerImplTests, GetNextUsesCorrectUriWithStream) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/" + expected_group_id + "/next?token=" - + expected_token, _, + expected_stream + "/" + expected_group_id + "/next?token=" + + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); } @@ -243,12 +246,12 @@ TEST_F(ConsumerImplTests, GetLastUsesCorrectUri) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, - Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/"+ expected_stream+"/0/last?token=" - + expected_token, _, + Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + expected_stream + "/0/last?token=" + + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); consumer->GetLast(&info, nullptr, expected_stream); } @@ -256,9 +259,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsEndOfStreamFromHttpClient) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"\"}"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"\"}"))); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -274,10 +277,10 @@ TEST_F(ConsumerImplTests, GetMessageReturnsStreamFinishedFromHttpClient) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"" + expected_next_stream - + "\"}"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"" + expected_next_stream + + "\"}"))); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -293,9 +296,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsNoDataFromHttpClient) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":2,\"next_stream\":\"""\"}"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":2,\"next_stream\":\"""\"}"))); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); auto err_data = static_cast<const asapo::ConsumerErrorData*>(err->GetCustomData()); @@ -311,9 +314,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsNotAuthorized) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Unauthorized), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::Unauthorized), + SetArgPointee<2>(nullptr), + Return(""))); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -325,9 +328,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsWrongResponseFromHttpClient) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("id"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("id"))); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -338,9 +341,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsWrongResponseFromHttpClient) { TEST_F(ConsumerImplTests, GetMessageReturnsIfBrokerAddressNotFound) { EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/asapo-broker"), _, _)).Times(AtLeast(2)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::NotFound), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<2>(nullptr), + Return(""))); consumer->SetTimeout(100); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -351,9 +354,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsIfBrokerAddressNotFound) { TEST_F(ConsumerImplTests, GetMessageReturnsUnsupportedClient) { EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/asapo-broker"), _, _)).Times(AtLeast(2)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::UnsupportedMediaType), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::UnsupportedMediaType), + SetArgPointee<2>(nullptr), + Return(""))); consumer->SetTimeout(100); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -365,9 +368,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsUnsupportedClient) { TEST_F(ConsumerImplTests, GetMessageReturnsIfBrokerUriEmpty) { EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/asapo-broker"), _, _)).Times(AtLeast(2)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); consumer->SetTimeout(100); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -406,9 +409,9 @@ TEST_F(ConsumerImplTests, GetMessageReturnsEofStreamFromHttpClientUntilTimeout) MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).Times(AtLeast(2)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"""\"}"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"""\"}"))); consumer->SetTimeout(300); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -421,17 +424,17 @@ TEST_F(ConsumerImplTests, GetMessageReturnsNoDataAfterTimeoutEvenIfOtherErrorOcc consumer->SetTimeout(300); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":" + std::to_string(expected_dataset_id) + - ",\"id_max\":2,\"next_stream\":\"""\"}"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":" + std::to_string(expected_dataset_id) + + ",\"id_max\":2,\"next_stream\":\"""\"}"))); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0/" - + std::to_string(expected_dataset_id) + "?token=" - + expected_token, _, _)).Times(AtLeast(1)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::NotFound), - SetArgPointee<2>(nullptr), - Return(""))); + + std::to_string(expected_dataset_id) + "?token=" + + expected_token, _, _)).Times(AtLeast(1)).WillRepeatedly(DoAll( + SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<2>(nullptr), + Return(""))); consumer->SetTimeout(300); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -443,9 +446,9 @@ TEST_F(ConsumerImplTests, GetNextMessageReturnsImmediatelyOnTransferError) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::InternalServerError), - SetArgPointee<2>(asapo::HttpErrorTemplates::kTransferError.Generate("sss").release()), - Return(""))); + SetArgPointee<1>(HttpCode::InternalServerError), + SetArgPointee<2>(asapo::HttpErrorTemplates::kTransferError.Generate("sss").release()), + Return(""))); consumer->SetTimeout(300); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -461,14 +464,14 @@ ACTION(AssignArg2) { TEST_F(ConsumerImplTests, GetNextRetriesIfConnectionHttpClientErrorUntilTimeout) { EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/asapo-broker"), _, _)).Times(AtLeast(2)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(expected_broker_uri))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(expected_broker_uri))); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).Times(AtLeast(2)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - AssignArg2(), - Return(""))); + SetArgPointee<1>(HttpCode::Conflict), + AssignArg2(), + Return(""))); consumer->SetTimeout(300); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -480,9 +483,9 @@ TEST_F(ConsumerImplTests, GetNextMessageReturnsImmediatelyOnFinshedStream) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(HasSubstr("next"), _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":2,\"id_max\":2,\"next_stream\":\"next\"}"))); + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":2,\"id_max\":2,\"next_stream\":\"next\"}"))); consumer->SetTimeout(300); auto err = consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -595,9 +598,9 @@ TEST_F(ConsumerImplTests, GenerateNewGroupIdReturnsErrorCreateGroup) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Post_t(HasSubstr("creategroup"), _, "", _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::BadRequest), - SetArgPointee<4>(nullptr), - Return(""))); + SetArgPointee<3>(HttpCode::BadRequest), + SetArgPointee<4>(nullptr), + Return(""))); consumer->SetTimeout(100); asapo::Error err; @@ -611,9 +614,9 @@ TEST_F(ConsumerImplTests, GenerateNewGroupIdReturnsGroupID) { EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/creategroup?token=" + expected_token, _, "", _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(expected_group_id))); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(expected_group_id))); consumer->SetTimeout(100); asapo::Error err; @@ -628,11 +631,11 @@ TEST_F(ConsumerImplTests, ResetCounterByDefaultUsesCorrectUri) { EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/" + - expected_group_id + - "/resetcounter?token=" + expected_token + "&value=0", _, _, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(""))); + expected_group_id + + "/resetcounter?token=" + expected_token + "&value=0", _, _, _, _)).WillOnce(DoAll( + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(""))); auto err = consumer->ResetLastReadMarker(expected_group_id, expected_stream); ASSERT_THAT(err, Eq(nullptr)); } @@ -642,12 +645,12 @@ TEST_F(ConsumerImplTests, ResetCounterUsesCorrectUri) { consumer->SetTimeout(100); EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/" + - expected_group_id + - "/resetcounter?token=" + expected_token + "&value=10", _, _, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(""))); + expected_stream + "/" + + expected_group_id + + "/resetcounter?token=" + expected_token + "&value=10", _, _, _, _)).WillOnce(DoAll( + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(""))); auto err = consumer->SetLastReadMarker(expected_group_id, 10, expected_stream); ASSERT_THAT(err, Eq(nullptr)); } @@ -657,11 +660,11 @@ TEST_F(ConsumerImplTests, GetCurrentSizeUsesCorrectUri) { consumer->SetTimeout(100); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/size?token=" - + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return("{\"size\":10}"))); + expected_stream + "/size?token=" + + expected_token, _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return("{\"size\":10}"))); asapo::Error err; auto size = consumer->GetCurrentSize(expected_stream, &err); ASSERT_THAT(err, Eq(nullptr)); @@ -673,11 +676,11 @@ TEST_F(ConsumerImplTests, GetCurrentSizeErrorOnWrongResponce) { consumer->SetTimeout(100); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + - "/"+expected_stream+"/size?token=" - + expected_token, _, _)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::Unauthorized), - SetArgPointee<2>(nullptr), - Return(""))); + "/" + expected_stream + "/size?token=" + + expected_token, _, _)).WillRepeatedly(DoAll( + SetArgPointee<1>(HttpCode::Unauthorized), + SetArgPointee<2>(nullptr), + Return(""))); asapo::Error err; auto size = consumer->GetCurrentSize(expected_stream, &err); ASSERT_THAT(err, Ne(nullptr)); @@ -689,13 +692,13 @@ TEST_F(ConsumerImplTests, GetNDataErrorOnWrongParse) { consumer->SetTimeout(100); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + - "/stream/size?token=" - + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return("{\"siz\":10}"))); + "/stream/size?token=" + + expected_token, _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return("{\"siz\":10}"))); asapo::Error err; - auto size = consumer->GetCurrentSize(expected_stream,&err); + auto size = consumer->GetCurrentSize(expected_stream, &err); ASSERT_THAT(err, Ne(nullptr)); ASSERT_THAT(size, Eq(0)); } @@ -707,13 +710,13 @@ TEST_F(ConsumerImplTests, GetByIdUsesCorrectUri) { auto json = to_send.Json(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0/" - + std::to_string( - expected_dataset_id) + "?token=" - + expected_token, _, + + std::to_string( + expected_dataset_id) + "?token=" + + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(json))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(json))); auto err = consumer->GetById(expected_dataset_id, &info, nullptr, expected_stream); @@ -726,11 +729,11 @@ TEST_F(ConsumerImplTests, GetByIdTimeouts) { consumer->SetTimeout(10); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0/" - + std::to_string(expected_dataset_id) + "?token=" - + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return(""))); + + std::to_string(expected_dataset_id) + "?token=" + + expected_token, _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return(""))); auto err = consumer->GetById(expected_dataset_id, &info, nullptr, expected_stream); @@ -742,11 +745,11 @@ TEST_F(ConsumerImplTests, GetByIdReturnsEndOfStream) { consumer->SetTimeout(10); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0/" - + std::to_string(expected_dataset_id) + "?token=" - + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"""\"}"))); + + std::to_string(expected_dataset_id) + "?token=" + + expected_token, _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":1,\"id_max\":1,\"next_stream\":\"""\"}"))); auto err = consumer->GetById(expected_dataset_id, &info, nullptr, expected_stream); @@ -758,11 +761,11 @@ TEST_F(ConsumerImplTests, GetByIdReturnsEndOfStreamWhenIdTooLarge) { consumer->SetTimeout(10); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0/" - + std::to_string(expected_dataset_id) + "?token=" - + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::Conflict), - SetArgPointee<2>(nullptr), - Return("{\"op\":\"get_record_by_id\",\"id\":100,\"id_max\":1,\"next_stream\":\"""\"}"))); + + std::to_string(expected_dataset_id) + "?token=" + + expected_token, _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::Conflict), + SetArgPointee<2>(nullptr), + Return("{\"op\":\"get_record_by_id\",\"id\":100,\"id_max\":1,\"next_stream\":\"""\"}"))); auto err = consumer->GetById(expected_dataset_id, &info, nullptr, expected_stream); @@ -774,12 +777,12 @@ TEST_F(ConsumerImplTests, GetMetaDataOK) { consumer->SetTimeout(100); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + - "/default/0/meta/0?token=" - + expected_token, _, + "/default/0/meta/0?token=" + + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(expected_metadata))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(expected_metadata))); asapo::Error err; auto res = consumer->GetBeamtimeMeta(&err); @@ -793,9 +796,9 @@ TEST_F(ConsumerImplTests, QueryMessagesReturnError) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Post_t(HasSubstr("querymessages"), _, expected_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::BadRequest), - SetArgPointee<4>(nullptr), - Return("error in query"))); + SetArgPointee<3>(HttpCode::BadRequest), + SetArgPointee<4>(nullptr), + Return("error in query"))); consumer->SetTimeout(1000); asapo::Error err; @@ -810,9 +813,9 @@ TEST_F(ConsumerImplTests, QueryMessagesReturnEmptyResults) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Post_t(HasSubstr("querymessages"), _, expected_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return("[]"))); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return("[]"))); consumer->SetTimeout(100); asapo::Error err; @@ -834,9 +837,9 @@ TEST_F(ConsumerImplTests, QueryMessagesWrongResponseArray) { EXPECT_CALL(mock_http_client, Post_t(HasSubstr("querymessages"), _, expected_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(responce_string))); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(responce_string))); consumer->SetTimeout(100); asapo::Error err; @@ -854,9 +857,9 @@ TEST_F(ConsumerImplTests, QueryMessagesWrongResponseRecorsd) { auto responce_string = R"([{"bla":1},{"err":}])"; EXPECT_CALL(mock_http_client, Post_t(HasSubstr("querymessages"), _, expected_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(responce_string))); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(responce_string))); consumer->SetTimeout(100); asapo::Error err; @@ -880,10 +883,10 @@ TEST_F(ConsumerImplTests, QueryMessagesReturnRecords) { EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0" + - "/querymessages?token=" + expected_token, _, expected_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(responce_string))); + "/querymessages?token=" + expected_token, _, expected_query_string, _, _)).WillOnce(DoAll( + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(responce_string))); consumer->SetTimeout(100); asapo::Error err; @@ -900,12 +903,12 @@ TEST_F(ConsumerImplTests, GetNextDatasetUsesCorrectUri) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/" + - expected_group_id + "/next?token=" - + expected_token + "&dataset=true&minsize=0", _, + expected_group_id + "/next?token=" + + expected_token + "&dataset=true&minsize=0", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); asapo::Error err; consumer->GetNextDataset(expected_group_id, 0, expected_stream, &err); } @@ -931,10 +934,10 @@ TEST_F(ConsumerImplTests, GetDataSetReturnsMessageMetas) { auto json3 = to_send3.Json(); auto json = std::string("{") + - "\"_id\":1," + - "\"size\":3," + - "\"messages\":[" + json1 + "," + json2 + "," + json3 + "]" + - "}"; + "\"_id\":1," + + "\"size\":3," + + "\"messages\":[" + json1 + "," + json2 + "," + json3 + "]" + + "}"; MockGet(json); @@ -963,10 +966,10 @@ TEST_F(ConsumerImplTests, GetDataSetReturnsPartialMessageMetas) { auto json3 = to_send3.Json(); auto json = std::string("{") + - "\"_id\":1," + - "\"size\":3," + - "\"messages\":[" + json1 + "," + json2 + "]" + - "}"; + "\"_id\":1," + + "\"size\":3," + + "\"messages\":[" + json1 + "," + json2 + "]" + + "}"; MockGet(json, asapo::HttpCode::PartialContent); @@ -998,10 +1001,10 @@ TEST_F(ConsumerImplTests, GetDataSetByIdReturnsPartialMessageMetas) { auto json3 = to_send3.Json(); auto json = std::string("{") + - "\"_id\":1," + - "\"size\":3," + - "\"messages\":[" + json1 + "," + json2 + "]" + - "}"; + "\"_id\":1," + + "\"size\":3," + + "\"messages\":[" + json1 + "," + json2 + "]" + + "}"; MockGet(json, asapo::HttpCode::PartialContent); @@ -1035,12 +1038,12 @@ TEST_F(ConsumerImplTests, GetLastDatasetUsesCorrectUri) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/0/last?token=" - + expected_token + "&dataset=true&minsize=1", _, + expected_stream + "/0/last?token=" + + expected_token + "&dataset=true&minsize=1", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); asapo::Error err; consumer->GetLastDataset(1, expected_stream, &err); } @@ -1049,12 +1052,12 @@ TEST_F(ConsumerImplTests, GetDatasetByIdUsesCorrectUri) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/0/" - + std::to_string(expected_dataset_id) + "?token=" - + expected_token + "&dataset=true" + "&minsize=0", _, + + std::to_string(expected_dataset_id) + "?token=" + + expected_token + "&dataset=true" + "&minsize=0", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); asapo::Error err; consumer->GetDatasetById(expected_dataset_id, 0, expected_stream, &err); } @@ -1062,18 +1065,19 @@ TEST_F(ConsumerImplTests, GetDatasetByIdUsesCorrectUri) { TEST_F(ConsumerImplTests, DeleteStreamUsesCorrectUri) { MockGetBrokerUri(); std::string expected_delete_stream_query_string = "{\"ErrorOnNotExist\":true,\"DeleteMeta\":true}"; - EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/"+expected_stream+"/delete" - + "?token=" + expected_token, _, + EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + + expected_stream + "/delete" + + "?token=" + expected_token, _, expected_delete_stream_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return("") - )); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return("") + )); asapo::DeleteStreamOptions opt; opt.delete_meta = true; opt.error_on_not_exist = true; - auto err = consumer->DeleteStream(expected_stream,opt); + auto err = consumer->DeleteStream(expected_stream, opt); ASSERT_THAT(err, Eq(nullptr)); } @@ -1081,37 +1085,41 @@ TEST_F(ConsumerImplTests, DeleteStreamUsesCorrectUri) { TEST_F(ConsumerImplTests, GetStreamListUsesCorrectUri) { MockGetBrokerUri(); std::string return_streams = - std::string(R"({"streams":[{"lastId":123,"name":"test","timestampCreated":1000000,"timestampLast":1000,"finished":false,"nextStream":""},)")+ + std::string( + R"({"streams":[{"lastId":123,"name":"test","timestampCreated":1000000,"timestampLast":1000,"finished":false,"nextStream":""},)") + + R"({"lastId":124,"name":"test1","timestampCreated":2000000,"timestampLast":2000,"finished":true,"nextStream":"next"}]})"; EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/0/streams" - + "?token=" + expected_token + "&from=stream_from&filter=all", _, + + "?token=" + expected_token + "&from=stream_from&filter=all", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(return_streams))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(return_streams))); asapo::Error err; - auto streams = consumer->GetStreamList("stream_from",asapo::StreamFilter::kAllStreams, &err); + auto streams = consumer->GetStreamList("stream_from", asapo::StreamFilter::kAllStreams, &err); ASSERT_THAT(err, Eq(nullptr)); ASSERT_THAT(streams.size(), Eq(2)); ASSERT_THAT(streams.size(), 2); - ASSERT_THAT(streams[0].Json(), R"({"lastId":123,"name":"test","timestampCreated":1000000,"timestampLast":1000,"finished":false,"nextStream":""})"); - ASSERT_THAT(streams[1].Json(), R"({"lastId":124,"name":"test1","timestampCreated":2000000,"timestampLast":2000,"finished":true,"nextStream":"next"})"); + ASSERT_THAT(streams[0].Json(), + R"({"lastId":123,"name":"test","timestampCreated":1000000,"timestampLast":1000,"finished":false,"nextStream":""})"); + ASSERT_THAT(streams[1].Json(), + R"({"lastId":124,"name":"test1","timestampCreated":2000000,"timestampLast":2000,"finished":true,"nextStream":"next"})"); } TEST_F(ConsumerImplTests, GetStreamListUsesCorrectUriWithoutFrom) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/0/streams" - + "?token=" + expected_token+"&filter=finished", _, + + "?token=" + expected_token + "&filter=finished", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return("")));; + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return("")));; asapo::Error err; - auto streams = consumer->GetStreamList("",asapo::StreamFilter::kFinishedStreams, &err); + auto streams = consumer->GetStreamList("", asapo::StreamFilter::kFinishedStreams, &err); } void ConsumerImplTests::MockBeforeFTS(MessageData* data) { @@ -1125,15 +1133,15 @@ void ConsumerImplTests::MockBeforeFTS(MessageData* data) { void ConsumerImplTests::ExpectFolderToken() { std::string expected_folder_query_string = "{\"Folder\":\"" + expected_path + "\",\"BeamtimeId\":\"" + - expected_beamtime_id - + "\",\"Token\":\"" + expected_token + "\"}"; + expected_beamtime_id + + "\",\"Token\":\"" + expected_token + "\"}"; EXPECT_CALL(mock_http_client, Post_t(HasSubstr(expected_server_uri + "/asapo-authorizer/v0.1/folder"), _, expected_folder_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(expected_folder_token) - )); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(expected_folder_token) + )); } @@ -1152,10 +1160,10 @@ void ConsumerImplTests::ExpectFileTransfer(const asapo::ConsumerErrorTemplate* p _, expected_message_size, _)).WillOnce(DoAll( - SetArgPointee<5>(HttpCode::OK), - AssignArg3(p_err_template == nullptr), - Return(p_err_template == nullptr ? nullptr : p_err_template->Generate().release()) - )); + SetArgPointee<5>(HttpCode::OK), + AssignArg3(p_err_template == nullptr), + Return(p_err_template == nullptr ? nullptr : p_err_template->Generate().release()) + )); } void ConsumerImplTests::ExpectRepeatedFileTransfer() { @@ -1165,13 +1173,13 @@ void ConsumerImplTests::ExpectRepeatedFileTransfer() { _, expected_message_size, _)). - WillOnce(DoAll( - SetArgPointee<5>(HttpCode::Unauthorized), - Return(nullptr))). - WillOnce(DoAll( - SetArgPointee<5>(HttpCode::OK), - Return(nullptr) - )); + WillOnce(DoAll( + SetArgPointee<5>(HttpCode::Unauthorized), + Return(nullptr))). + WillOnce(DoAll( + SetArgPointee<5>(HttpCode::OK), + Return(nullptr) + )); } void ConsumerImplTests::AssertSingleFileTransfer() { @@ -1199,10 +1207,10 @@ TEST_F(ConsumerImplTests, FileTransferReadsFileSize) { EXPECT_CALL(mock_http_client, Post_t(HasSubstr("sizeonly=true"), expected_cookie, expected_fts_query_string, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return("{\"file_size\":5}") - )); + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return("{\"file_size\":5}") + )); EXPECT_CALL(mock_http_client, PostReturnArray_t(HasSubstr(expected_fts_uri + "/v0.1/transfer"), expected_cookie, @@ -1210,10 +1218,10 @@ TEST_F(ConsumerImplTests, FileTransferReadsFileSize) { _, 5, _)).WillOnce(DoAll( - SetArgPointee<5>(HttpCode::OK), - AssignArg3(nullptr), - Return(nullptr) - )); + SetArgPointee<5>(HttpCode::OK), + AssignArg3(nullptr), + Return(nullptr) + )); MessageData data; info.size = 0; @@ -1246,13 +1254,13 @@ TEST_F(ConsumerImplTests, AcknowledgeUsesCorrectUri) { MockGetBrokerUri(); auto expected_acknowledge_command = "{\"Op\":\"ackmessage\"}"; EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/" + - expected_group_id - + "/" + std::to_string(expected_dataset_id) + "?token=" - + expected_token, _, expected_acknowledge_command, _, _)).WillOnce(DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(""))); + expected_stream + "/" + + expected_group_id + + "/" + std::to_string(expected_dataset_id) + "?token=" + + expected_token, _, expected_acknowledge_command, _, _)).WillOnce(DoAll( + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(""))); auto err = consumer->Acknowledge(expected_group_id, expected_dataset_id, expected_stream); @@ -1262,11 +1270,11 @@ TEST_F(ConsumerImplTests, AcknowledgeUsesCorrectUri) { void ConsumerImplTests::ExpectIdList(bool error) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/" + - expected_group_id + "/nacks?token=" + expected_token + "&from=1&to=0", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(error ? "" : "{\"unacknowledged\":[1,2,3]}"))); + expected_stream + "/" + + expected_group_id + "/nacks?token=" + expected_token + "&from=1&to=0", _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(error ? "" : "{\"unacknowledged\":[1,2,3]}"))); } TEST_F(ConsumerImplTests, GetUnAcknowledgedListReturnsIds) { @@ -1280,11 +1288,11 @@ TEST_F(ConsumerImplTests, GetUnAcknowledgedListReturnsIds) { void ConsumerImplTests::ExpectLastAckId(bool empty_response) { EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/" + - expected_group_id + "/lastack?token=" + expected_token, _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(empty_response ? "{\"lastAckId\":0}" : "{\"lastAckId\":1}"))); + expected_stream + "/" + + expected_group_id + "/lastack?token=" + expected_token, _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(empty_response ? "{\"lastAckId\":0}" : "{\"lastAckId\":1}"))); } TEST_F(ConsumerImplTests, GetLastAcknowledgeUsesOk) { @@ -1318,12 +1326,12 @@ TEST_F(ConsumerImplTests, ResendNacks) { MockGetBrokerUri(); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/stream/" - + expected_group_id + "/next?token=" - + expected_token + "&resend_nacks=true&delay_ms=10000&resend_attempts=3", _, + + expected_group_id + "/next?token=" + + expected_token + "&resend_nacks=true&delay_ms=10000&resend_attempts=3", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(""))); consumer->SetResendNacs(true, 10000, 3); consumer->GetNext(expected_group_id, &info, nullptr, expected_stream); @@ -1333,14 +1341,14 @@ TEST_F(ConsumerImplTests, NegativeAcknowledgeUsesCorrectUri) { MockGetBrokerUri(); auto expected_neg_acknowledge_command = R"({"Op":"negackmessage","Params":{"DelayMs":10000}})"; EXPECT_CALL(mock_http_client, Post_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/" + - expected_group_id - + "/" + std::to_string(expected_dataset_id) + "?token=" - + expected_token, _, expected_neg_acknowledge_command, _, _)).WillOnce( - DoAll( - SetArgPointee<3>(HttpCode::OK), - SetArgPointee<4>(nullptr), - Return(""))); + expected_stream + "/" + + expected_group_id + + "/" + std::to_string(expected_dataset_id) + "?token=" + + expected_token, _, expected_neg_acknowledge_command, _, _)).WillOnce( + DoAll( + SetArgPointee<3>(HttpCode::OK), + SetArgPointee<4>(nullptr), + Return(""))); auto err = consumer->NegativeAcknowledge(expected_group_id, expected_dataset_id, 10000, expected_stream); @@ -1349,15 +1357,15 @@ TEST_F(ConsumerImplTests, NegativeAcknowledgeUsesCorrectUri) { TEST_F(ConsumerImplTests, CanInterruptOperation) { EXPECT_CALL(mock_http_client, Get_t(_, _, _)).Times(AtLeast(1)).WillRepeatedly(DoAll( - SetArgPointee<1>(HttpCode::NotFound), - SetArgPointee<2>(nullptr), - Return(""))); + SetArgPointee<1>(HttpCode::NotFound), + SetArgPointee<2>(nullptr), + Return(""))); auto start = std::chrono::system_clock::now(); asapo::Error err; - auto exec = [this,&err]() { - consumer->SetTimeout(10000); - err = consumer->GetNext("", &info, nullptr, expected_stream); + auto exec = [this, &err]() { + consumer->SetTimeout(10000); + err = consumer->GetNext("", &info, nullptr, expected_stream); }; auto thread = std::thread(exec); std::this_thread::sleep_for(std::chrono::milliseconds(100)); @@ -1366,7 +1374,8 @@ TEST_F(ConsumerImplTests, CanInterruptOperation) { thread.join(); - auto elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - start).count(); + auto elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - + start).count(); ASSERT_THAT(elapsed_ms, testing::Lt(1000)); ASSERT_THAT(err, Eq(asapo::ConsumerErrorTemplates::kInterruptedTransaction)); @@ -1378,13 +1387,13 @@ TEST_F(ConsumerImplTests, GetCurrentDataSetCounteUsesCorrectUri) { consumer->SetTimeout(100); EXPECT_CALL(mock_http_client, Get_t(expected_broker_api + "/beamtime/beamtime_id/" + expected_data_source + "/" + - expected_stream + "/size?token=" - + expected_token+"&incomplete=true", _, _)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return("{\"size\":10}"))); + expected_stream + "/size?token=" + + expected_token + "&incomplete=true", _, _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return("{\"size\":10}"))); asapo::Error err; - auto size = consumer->GetCurrentDatasetCount(expected_stream,true, &err); + auto size = consumer->GetCurrentDatasetCount(expected_stream, true, &err); ASSERT_THAT(err, Eq(nullptr)); ASSERT_THAT(size, Eq(10)); } @@ -1392,7 +1401,7 @@ TEST_F(ConsumerImplTests, GetCurrentDataSetCounteUsesCorrectUri) { TEST_F(ConsumerImplTests, GetVersionInfoClientOnly) { std::string client_info; - auto err = consumer->GetVersionInfo(&client_info,nullptr,nullptr); + auto err = consumer->GetVersionInfo(&client_info, nullptr, nullptr); ASSERT_THAT(err, Eq(nullptr)); ASSERT_THAT(client_info, HasSubstr(std::string(asapo::kVersion))); ASSERT_THAT(client_info, HasSubstr(asapo::kConsumerProtocol.GetVersion())); @@ -1400,15 +1409,18 @@ TEST_F(ConsumerImplTests, GetVersionInfoClientOnly) { TEST_F(ConsumerImplTests, GetVersionInfoWithServer) { - std::string result = R"({"softwareVersion":"20.03.1, build 7a9294ad","clientSupported":"no", "clientProtocol":{"versionInfo":"v0.2"}})"; + std::string result = + R"({"softwareVersion":"20.03.1, build 7a9294ad","clientSupported":"no", "clientProtocol":{"versionInfo":"v0.2"}})"; - EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/version?token=token&client=consumer&protocol="+expected_consumer_protocol), _,_)).WillOnce(DoAll( - SetArgPointee<1>(HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(result))); + EXPECT_CALL(mock_http_client, Get_t(HasSubstr(expected_server_uri + + "/asapo-discovery/v0.1/version?token=token&client=consumer&protocol=" + expected_consumer_protocol), _, + _)).WillOnce(DoAll( + SetArgPointee<1>(HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(result))); - std::string client_info,server_info; - auto err = consumer->GetVersionInfo(&client_info,&server_info,nullptr); + std::string client_info, server_info; + auto err = consumer->GetVersionInfo(&client_info, &server_info, nullptr); ASSERT_THAT(err, Eq(nullptr)); ASSERT_THAT(server_info, HasSubstr("20.03.1")); ASSERT_THAT(server_info, HasSubstr("v0.2")); diff --git a/examples/consumer/getnext/getnext.cpp b/examples/consumer/getnext/getnext.cpp index 3429a4861ea29b23eee3fbfbda5d9a3c05c8bd78..142de7f7ec5c83ff77c323eaa587dd9745132cf2 100644 --- a/examples/consumer/getnext/getnext.cpp +++ b/examples/consumer/getnext/getnext.cpp @@ -89,7 +89,8 @@ void WaitThreads(std::vector<std::thread>* threads) { int ProcessError(const Error& err) { if (err == nullptr) return 0; std::cout << err->Explain() << std::endl; - return (err == asapo::ConsumerErrorTemplates::kEndOfStream ||err == asapo::ConsumerErrorTemplates::kStreamFinished) ? 0 : 1; + return (err == asapo::ConsumerErrorTemplates::kEndOfStream + || err == asapo::ConsumerErrorTemplates::kStreamFinished) ? 0 : 1; } std::vector<std::thread> @@ -100,12 +101,12 @@ StartThreads(const Args& params, std::vector<int>* nfiles, std::vector<int>* err asapo::MessageMeta fi; Error err; auto consumer = asapo::ConsumerFactory::CreateConsumer(params.server, - params.file_path, - true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - params.beamtime_id, "", - params.data_source, params.token}, - &err); + params.file_path, + true, + asapo::SourceCredentials{asapo::SourceType::kProcessed, + params.beamtime_id, "", + params.data_source, params.token}, + &err); if (err) { std::cout << "Error CreateConsumer: " << err << std::endl; exit(EXIT_FAILURE); diff --git a/examples/pipeline/in_to_out/in_to_out.cpp b/examples/pipeline/in_to_out/in_to_out.cpp index e96985a02266e9a7e5fa3bde748e0ba6361e3478..fe0f49520f6693bb478c849134634a07eaf52c9c 100644 --- a/examples/pipeline/in_to_out/in_to_out.cpp +++ b/examples/pipeline/in_to_out/in_to_out.cpp @@ -27,16 +27,16 @@ system_clock::time_point streamout_start; system_clock::time_point streamout_finish; struct Args { - std::string server; - std::string file_path; - std::string beamtime_id; - std::string stream_in; - std::string stream_out; - std::string token; - int timeout_ms; - int timeout_ms_producer; - int nthreads; - bool transfer_data; + std::string server; + std::string file_path; + std::string beamtime_id; + std::string stream_in; + std::string stream_out; + std::string token; + int timeout_ms; + int timeout_ms_producer; + int nthreads; + bool transfer_data; }; void ProcessAfterSend(asapo::RequestCallbackPayload payload, asapo::Error err) { @@ -52,23 +52,23 @@ void ProcessAfterSend(asapo::RequestCallbackPayload payload, asapo::Error err) { } void WaitConsumerThreadsFinished(std::vector<std::thread>* threads) { - for (auto &thread : *threads) { + for (auto& thread : *threads) { thread.join(); } } -int ProcessError(const Error &err) { +int ProcessError(const Error& err) { if (err == nullptr) return 0; std::cout << err->Explain() << std::endl; return err == asapo::ConsumerErrorTemplates::kEndOfStream ? 0 : 1; } -ConsumerPtr CreateConsumerAndGroup(const Args &args, Error* err) { +ConsumerPtr CreateConsumerAndGroup(const Args& args, Error* err) { auto consumer = asapo::ConsumerFactory::CreateConsumer(args.server, args.file_path, true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - args.beamtime_id, "", - args.stream_in, - args.token}, err); + asapo::SourceCredentials{asapo::SourceType::kProcessed, + args.beamtime_id, "", + args.stream_in, + args.token}, err); if (*err) { return nullptr; } @@ -88,7 +88,7 @@ ConsumerPtr CreateConsumerAndGroup(const Args &args, Error* err) { return consumer; } -void GetBeamtimeMeta(const ConsumerPtr &consumer) { +void GetBeamtimeMeta(const ConsumerPtr& consumer) { Error err; auto meta = consumer->GetBeamtimeMeta(&err); if (err == nullptr) { @@ -98,8 +98,8 @@ void GetBeamtimeMeta(const ConsumerPtr &consumer) { } } -void SendDownstreamThePipeline(const Args &args, const asapo::MessageMeta &fi, asapo::MessageData data, - const ProducerPtr &producer) { +void SendDownstreamThePipeline(const Args& args, const asapo::MessageMeta& fi, asapo::MessageData data, + const ProducerPtr& producer) { asapo::MessageHeader header{fi.id, fi.size, fi.name, fi.metadata}; Error err_send; if (args.transfer_data) { @@ -124,7 +124,7 @@ void SendDownstreamThePipeline(const Args &args, const asapo::MessageMeta &fi, a } } -Error ProcessNextEvent(const Args &args, const ConsumerPtr &consumer, const ProducerPtr &producer) { +Error ProcessNextEvent(const Args& args, const ConsumerPtr& consumer, const ProducerPtr& producer) { asapo::MessageData data; asapo::MessageMeta fi; @@ -138,29 +138,29 @@ Error ProcessNextEvent(const Args &args, const ConsumerPtr &consumer, const Prod return nullptr; } -std::vector<std::thread> StartConsumerThreads(const Args &args, const ProducerPtr &producer, +std::vector<std::thread> StartConsumerThreads(const Args& args, const ProducerPtr& producer, std::vector<int>* nfiles, std::vector<int>* errors) { auto exec_next = [&args, nfiles, errors, &producer](int i) { - asapo::MessageMeta fi; - Error err; - auto consumer = CreateConsumerAndGroup(args, &err); - if (err) { - (*errors)[i] += ProcessError(err); - return; - } - - while (true) { - auto err = ProcessNextEvent(args, consumer, producer); - if (err) { - (*errors)[i] += ProcessError(err); - if (err == asapo::ConsumerErrorTemplates::kEndOfStream - || err == asapo::ConsumerErrorTemplates::kWrongInput) { - break; - } - } - (*nfiles)[i]++; - } + asapo::MessageMeta fi; + Error err; + auto consumer = CreateConsumerAndGroup(args, &err); + if (err) { + (*errors)[i] += ProcessError(err); + return; + } + + while (true) { + auto err = ProcessNextEvent(args, consumer, producer); + if (err) { + (*errors)[i] += ProcessError(err); + if (err == asapo::ConsumerErrorTemplates::kEndOfStream + || err == asapo::ConsumerErrorTemplates::kWrongInput) { + break; + } + } + (*nfiles)[i]++; + } }; std::vector<std::thread> threads; @@ -170,7 +170,7 @@ std::vector<std::thread> StartConsumerThreads(const Args &args, const ProducerPt return threads; } -int ProcessAllData(const Args &args, const ProducerPtr &producer, uint64_t* duration_ms, int* nerrors) { +int ProcessAllData(const Args& args, const ProducerPtr& producer, uint64_t* duration_ms, int* nerrors) { asapo::MessageMeta fi; system_clock::time_point t1 = system_clock::now(); @@ -189,12 +189,12 @@ int ProcessAllData(const Args &args, const ProducerPtr &producer, uint64_t* dura return n_total; } -std::unique_ptr<asapo::Producer> CreateProducer(const Args &args) { +std::unique_ptr<asapo::Producer> CreateProducer(const Args& args) { asapo::Error err; auto producer = asapo::Producer::Create(args.server, args.nthreads, asapo::RequestHandlerType::kTcp, asapo::SourceCredentials{asapo::SourceType::kProcessed, args.beamtime_id, - "", args.stream_out, args.token}, 60000, &err); + "", args.stream_out, args.token}, 60000, &err); if (err) { std::cerr << "Cannot start producer. ProducerError: " << err << std::endl; exit(EXIT_FAILURE); @@ -209,7 +209,7 @@ int main(int argc, char* argv[]) { Args args; if (argc != 11) { std::cout << "Usage: " + std::string{argv[0]} - + " <server> <files_path> <beamtime_id> <stream_in> <stream_out> <nthreads> <token> <timeout ms> <timeout ms producer> <transfer data>" + + " <server> <files_path> <beamtime_id> <stream_in> <stream_out> <nthreads> <token> <timeout ms> <timeout ms producer> <transfer data>" << std::endl; exit(EXIT_FAILURE); diff --git a/examples/producer/dummy-data-producer/dummy_data_producer.cpp b/examples/producer/dummy-data-producer/dummy_data_producer.cpp index 1a31044f8b3f99a7b601457671294fd337a191ed..d0626ac4910598d259ee6c48c76ffecf57ddeb52 100644 --- a/examples/producer/dummy-data-producer/dummy_data_producer.cpp +++ b/examples/producer/dummy-data-producer/dummy_data_producer.cpp @@ -35,9 +35,9 @@ void PrintCommandArguments(const Args& args) { << "iterations: " << args.iterations << std::endl << "nthreads: " << args.nthreads << std::endl << "mode: " << args.mode << std::endl - << "Write files: " << ((args.mode %100) / 10 == 1) << std::endl - << "Tcp mode: " << ((args.mode % 10) ==0 ) << std::endl - << "Raw: " << (args.mode / 100 == 1)<< std::endl + << "Write files: " << ((args.mode % 100) / 10 == 1) << std::endl + << "Tcp mode: " << ((args.mode % 10) == 0 ) << std::endl + << "Raw: " << (args.mode / 100 == 1) << std::endl << "timeout: " << args.timeout_ms << std::endl << "messages in set: " << args.messages_in_set << std::endl << std::endl; @@ -85,7 +85,7 @@ void ProcessCommandArguments(int argc, char* argv[], Args* args) { args->iterations = std::stoull(argv[4]); args->nthreads = std::stoull(argv[5]); args->mode = std::stoull(argv[6]); - args->timeout_ms = std::stoull(argv[7])*1000; + args->timeout_ms = std::stoull(argv[7]) * 1000; if (argc == 9) { args->messages_in_set = std::stoull(argv[8]); } else { @@ -140,7 +140,7 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it } } - std::string message_folder = GetStringFromSourceType(type)+asapo::kPathSeparator; + std::string message_folder = GetStringFromSourceType(type) + asapo::kPathSeparator; for (uint64_t i = 0; i < iterations; i++) { @@ -150,7 +150,7 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it if (!data_source.empty()) { message_header.file_name = data_source + "/" + message_header.file_name; } - message_header.file_name = message_folder+message_header.file_name; + message_header.file_name = message_folder + message_header.file_name; message_header.user_metadata = std::move(meta); if (messages_in_set == 1) { auto err = producer->Send(message_header, @@ -189,14 +189,15 @@ bool SendDummyData(asapo::Producer* producer, size_t number_of_byte, uint64_t it } } } - return producer->SendStreamFinishedFlag("default",iterations,"",nullptr) == nullptr; + return producer->SendStreamFinishedFlag("default", iterations, "", nullptr) == nullptr; } std::unique_ptr<asapo::Producer> CreateProducer(const Args& args) { asapo::Error err; auto producer = asapo::Producer::Create(args.discovery_service_endpoint, args.nthreads, args.mode % 10 == 0 ? asapo::RequestHandlerType::kTcp : asapo::RequestHandlerType::kFilesystem, - asapo::SourceCredentials{args.mode / 100 == 0 ?asapo::SourceType::kProcessed:asapo::SourceType::kRaw,args.beamtime_id, "", args.data_source, args.token }, 3600000, &err); + asapo::SourceCredentials{args.mode / 100 == 0 ? asapo::SourceType::kProcessed : asapo::SourceType::kRaw, args.beamtime_id, "", args.data_source, args.token }, + 3600000, &err); if(err) { std::cerr << "Cannot start producer. ProducerError: " << err << std::endl; exit(EXIT_FAILURE); @@ -232,7 +233,7 @@ int main (int argc, char* argv[]) { system_clock::time_point start_time = system_clock::now(); if(!SendDummyData(producer.get(), args.number_of_bytes, args.iterations, args.messages_in_set, args.data_source, - (args.mode %100) / 10 == 0,args.mode / 100 == 0 ?asapo::SourceType::kProcessed:asapo::SourceType::kRaw)) { + (args.mode % 100) / 10 == 0, args.mode / 100 == 0 ? asapo::SourceType::kProcessed : asapo::SourceType::kRaw)) { return EXIT_FAILURE; } diff --git a/examples/producer/simple-producer/produce.cpp b/examples/producer/simple-producer/produce.cpp index 57c8b0fd68435876c35521b06efbb2980b6b194e..e0fd685037d3d0bc008fd5389428e12ba0367a28 100644 --- a/examples/producer/simple-producer/produce.cpp +++ b/examples/producer/simple-producer/produce.cpp @@ -34,7 +34,7 @@ int main(int argc, char* argv[]) { auto buffer = asapo::MessageData(new uint8_t[send_size]); memcpy(buffer.get(), to_send.c_str(), send_size); - asapo::EventHeader message_header{1, send_size, "processed"+asapo::kPathseparator +"test_file"}; + asapo::EventHeader message_header{1, send_size, "processed" + asapo::kPathseparator + "test_file"}; err = producer->Send(message_header, std::move(buffer), asapo::kDefaultIngestMode, &ProcessAfterSend); exit_if_error("Cannot send file", err); diff --git a/producer/api/cpp/include/asapo/producer/producer.h b/producer/api/cpp/include/asapo/producer/producer.h index 9091f7df846b4b996b7c7d01b1c2298dc105a8db..6e35e8b82d2e93e6ca77ce126e0757eff429b5e3 100644 --- a/producer/api/cpp/include/asapo/producer/producer.h +++ b/producer/api/cpp/include/asapo/producer/producer.h @@ -23,14 +23,14 @@ class Producer { virtual ~Producer() = default; - //! Return version - /*! - \param client_info - for client version - \param server_info - for server - \param supported - set to true if client is supported by server - \return nullptr of command was successful, otherwise error. - */ - virtual Error GetVersionInfo(std::string* client_info,std::string* server_info, bool* supported) const = 0; + //! Return version + /*! + \param client_info - for client version + \param server_info - for server + \param supported - set to true if client is supported by server + \return nullptr of command was successful, otherwise error. + */ + virtual Error GetVersionInfo(std::string* client_info, std::string* server_info, bool* supported) const = 0; //! Get stream information from receiver /*! @@ -40,20 +40,20 @@ class Producer { */ virtual StreamInfo GetStreamInfo(std::string stream, uint64_t timeout_ms, Error* err) const = 0; - //! Delete stream - /*! - \param stream - stream to send messages to - \param timeout_ms - operation timeout in milliseconds - \param options - delete stream options - \return Error - will be nullptr on success - */ - virtual Error DeleteStream(std::string stream, uint64_t timeout_ms, DeleteStreamOptions options) const = 0; - - //! Get stream that has the newest ingested data - /*! - \param timeout_ms - operation timeout in milliseconds - \return StreamInfo - a structure with stream information - */ + //! Delete stream + /*! + \param stream - stream to send messages to + \param timeout_ms - operation timeout in milliseconds + \param options - delete stream options + \return Error - will be nullptr on success + */ + virtual Error DeleteStream(std::string stream, uint64_t timeout_ms, DeleteStreamOptions options) const = 0; + + //! Get stream that has the newest ingested data + /*! + \param timeout_ms - operation timeout in milliseconds + \return StreamInfo - a structure with stream information + */ virtual StreamInfo GetLastStream(uint64_t timeout_ms, Error* err) const = 0; //! Sends message to the receiver @@ -62,7 +62,7 @@ class Producer { \param data - A smart pointer to the message data to send, can be nullptr \return Error - Will be nullptr on success */ - virtual Error Send(const MessageHeader &message_header, + virtual Error Send(const MessageHeader& message_header, MessageData data, uint64_t ingest_mode, std::string stream, @@ -71,7 +71,7 @@ class Producer { //! Sends data to the receiver - same as Send - memory should not be freed until send is finished //! used e.g. for Python bindings - virtual Error Send__(const MessageHeader &message_header, + virtual Error Send__(const MessageHeader& message_header, void* data, uint64_t ingest_mode, std::string stream, @@ -87,7 +87,7 @@ class Producer { \param file_to_send - A full path of the file to send \return Error - Will be nullptr on success */ - virtual Error SendFile(const MessageHeader &message_header, + virtual Error SendFile(const MessageHeader& message_header, std::string file_to_send, uint64_t ingest_mode, std::string stream, @@ -101,7 +101,7 @@ class Producer { \return Error - Will be nullptr on success */ virtual Error SendStreamFinishedFlag(std::string stream, uint64_t last_id, std::string next_stream, - RequestCallback callback) = 0; + RequestCallback callback) = 0; //! Sends metadata for the current beamtime to the receiver diff --git a/producer/api/cpp/include/asapo/producer/producer_error.h b/producer/api/cpp/include/asapo/producer/producer_error.h index 6f8e66ea926a60bbba909809893e350171c2637e..83460b5e4c804a60d0cd163422598a8178f80eba 100644 --- a/producer/api/cpp/include/asapo/producer/producer_error.h +++ b/producer/api/cpp/include/asapo/producer/producer_error.h @@ -20,8 +20,8 @@ enum class ProducerErrorType { using ProducerErrorTemplate = ServiceErrorTemplate<ProducerErrorType, ErrorType::kProducerError>; class OriginalData : public CustomErrorData { - public: - MessageData data; + public: + MessageData data; }; diff --git a/producer/api/cpp/src/producer.cpp b/producer/api/cpp/src/producer.cpp index cb94f8d0c08d1cdd8abb4deefcde65ca1f780f7b..3c277fcfe1e70b06019b5f315c70585ef6af8c14 100644 --- a/producer/api/cpp/src/producer.cpp +++ b/producer/api/cpp/src/producer.cpp @@ -3,7 +3,7 @@ #include "asapo/producer/producer_error.h" std::unique_ptr<asapo::Producer> asapo::Producer::Create(const std::string& endpoint, uint8_t n_processing_threads, - asapo::RequestHandlerType type, SourceCredentials source_cred, uint64_t timeout_ms, Error* err) { + asapo::RequestHandlerType type, SourceCredentials source_cred, uint64_t timeout_ms, Error* err) { if (n_processing_threads > kMaxProcessingThreads || n_processing_threads == 0) { *err = ProducerErrorTemplates::kWrongInput.Generate("Set number of processing threads > 0 and <= " + std::to_string( diff --git a/producer/api/cpp/src/producer_impl.cpp b/producer/api/cpp/src/producer_impl.cpp index 000600a6b0dd3c998b1b47b6c5efa904de1da747..e29dfec2e38de5a6a0d6b20db3370b43689f3deb 100644 --- a/producer/api/cpp/src/producer_impl.cpp +++ b/producer/api/cpp/src/producer_impl.cpp @@ -18,7 +18,7 @@ const size_t ProducerImpl::kDiscoveryServiceUpdateFrequencyMs = 10000; // 10s ProducerImpl::ProducerImpl(std::string endpoint, uint8_t n_processing_threads, uint64_t timeout_ms, asapo::RequestHandlerType type): - log__{GetDefaultProducerLogger()},httpclient__{DefaultHttpClient()}, timeout_ms_{timeout_ms},endpoint_{endpoint} { + log__{GetDefaultProducerLogger()}, httpclient__{DefaultHttpClient()}, timeout_ms_{timeout_ms}, endpoint_{endpoint} { switch (type) { case RequestHandlerType::kTcp: discovery_service_.reset(new ReceiverDiscoveryService{endpoint, ProducerImpl::kDiscoveryServiceUpdateFrequencyMs}); @@ -32,7 +32,7 @@ ProducerImpl::ProducerImpl(std::string endpoint, uint8_t n_processing_threads, u } GenericRequestHeader ProducerImpl::GenerateNextSendRequest(const MessageHeader& message_header, std::string stream, - uint64_t ingest_mode) { + uint64_t ingest_mode) { GenericRequestHeader request{kOpcodeTransferData, message_header.message_id, message_header.data_size, message_header.user_metadata.size(), message_header.file_name, stream}; if (message_header.dataset_substream != 0) { @@ -56,12 +56,12 @@ Error CheckIngestMode(uint64_t ingest_mode) { } if (ingest_mode & IngestModeFlags::kTransferData && - !(ingest_mode & (IngestModeFlags::kStoreInDatabase | IngestModeFlags::kStoreInFilesystem))) { + !(ingest_mode & (IngestModeFlags::kStoreInDatabase | IngestModeFlags::kStoreInFilesystem))) { return ProducerErrorTemplates::kWrongInput.Generate("wrong ingest mode"); } if (ingest_mode & IngestModeFlags::kTransferMetaDataOnly && - (ingest_mode & IngestModeFlags::kStoreInFilesystem)) { + (ingest_mode & IngestModeFlags::kStoreInFilesystem)) { return ProducerErrorTemplates::kWrongInput.Generate("wrong ingest mode"); } @@ -93,7 +93,7 @@ Error CheckProducerRequest(const MessageHeader& message_header, uint64_t ingest_ return CheckIngestMode(ingest_mode); } -Error HandleErrorFromPool(Error original_error,bool manage_data_memory) { +Error HandleErrorFromPool(Error original_error, bool manage_data_memory) { if (original_error == nullptr) { return nullptr; } @@ -115,12 +115,12 @@ Error HandleErrorFromPool(Error original_error,bool manage_data_memory) { } else { OriginalData* original = new asapo::OriginalData{}; original->data = std::move(original_data); - producer_error->SetCustomData(std::unique_ptr<asapo::CustomErrorData>{original}); + producer_error->SetCustomData(std::unique_ptr<asapo::CustomErrorData> {original}); } return producer_error; } -Error HandleInputError(Error original_error,MessageData data, bool manage_data_memory) { +Error HandleInputError(Error original_error, MessageData data, bool manage_data_memory) { if (data == nullptr) { return original_error; } @@ -131,7 +131,7 @@ Error HandleInputError(Error original_error,MessageData data, bool manage_data_m OriginalData* original = new asapo::OriginalData{}; original->data = std::move(data); - original_error->SetCustomData(std::unique_ptr<asapo::CustomErrorData>{original}); + original_error->SetCustomData(std::unique_ptr<asapo::CustomErrorData> {original}); return original_error; } @@ -145,7 +145,7 @@ Error ProducerImpl::Send(const MessageHeader& message_header, auto err = CheckProducerRequest(message_header, ingest_mode, stream); if (err) { log__->Error("error checking request - " + err->Explain()); - return HandleInputError(std::move(err),std::move(data),manage_data_memory); + return HandleInputError(std::move(err), std::move(data), manage_data_memory); } auto request_header = GenerateNextSendRequest(message_header, std::move(stream), ingest_mode); @@ -154,7 +154,7 @@ Error ProducerImpl::Send(const MessageHeader& message_header, std::move(data), std::move(message_header.user_metadata), std::move(full_path), callback, manage_data_memory, timeout_ms_} }); - return HandleErrorFromPool(std::move(err),manage_data_memory); + return HandleErrorFromPool(std::move(err), manage_data_memory); } bool WandTransferData(uint64_t ingest_mode) { @@ -173,20 +173,20 @@ Error CheckData(uint64_t ingest_mode, const MessageHeader& message_header, const return nullptr; } -Error ProducerImpl::Send(const MessageHeader &message_header, +Error ProducerImpl::Send(const MessageHeader& message_header, MessageData data, uint64_t ingest_mode, std::string stream, RequestCallback callback) { if (auto err = CheckData(ingest_mode, message_header, &data)) { - return HandleInputError(std::move(err),std::move(data),true); + return HandleInputError(std::move(err), std::move(data), true); } return Send(message_header, std::move(stream), std::move(data), "", ingest_mode, callback, true); } Error ProducerImpl::SendStreamFinishedFlag(std::string stream, uint64_t last_id, std::string next_stream, - RequestCallback callback) { + RequestCallback callback) { MessageHeader message_header; message_header.file_name = kFinishStreamKeyword; message_header.data_size = 0; @@ -248,7 +248,8 @@ Error ProducerImpl::SetCredentials(SourceCredentials source_cred) { Error ProducerImpl::SendMetadata(const std::string& metadata, RequestCallback callback) { GenericRequestHeader request_header{kOpcodeTransferMetaData, 0, metadata.size(), 0, "beamtime_global.meta"}; - request_header.custom_data[kPosIngestMode] = asapo::IngestModeFlags::kTransferData | asapo::IngestModeFlags::kStoreInDatabase; + request_header.custom_data[kPosIngestMode] = asapo::IngestModeFlags::kTransferData | + asapo::IngestModeFlags::kStoreInDatabase; MessageData data{new uint8_t[metadata.size()]}; strncpy((char*)data.get(), metadata.c_str(), metadata.size()); auto err = request_pool__->AddRequest(std::unique_ptr<ProducerRequest> {new ProducerRequest{source_cred_string_, std::move(request_header), @@ -257,7 +258,7 @@ Error ProducerImpl::SendMetadata(const std::string& metadata, RequestCallback ca return HandleErrorFromPool(std::move(err), true); } -Error ProducerImpl::Send__(const MessageHeader &message_header, +Error ProducerImpl::Send__(const MessageHeader& message_header, void* data, uint64_t ingest_mode, std::string stream, @@ -287,7 +288,7 @@ Error ProducerImpl::WaitRequestsFinished(uint64_t timeout_ms) { void ProducerImpl::StopThreads__() { request_pool__->StopThreads(); } -Error ProducerImpl::SendFile(const MessageHeader &message_header, +Error ProducerImpl::SendFile(const MessageHeader& message_header, std::string full_path, uint64_t ingest_mode, std::string stream, @@ -315,7 +316,8 @@ RequestCallback unwrap_callback(RequestCallbackWithPromise<T> callback, return wrapper; } -void ActivatePromiseForStreamInfo(std::shared_ptr<std::promise<StreamInfoResult>> promise, RequestCallbackPayload payload, +void ActivatePromiseForStreamInfo(std::shared_ptr<std::promise<StreamInfoResult>> promise, + RequestCallbackPayload payload, Error err) { StreamInfoResult res; if (err == nullptr) { @@ -330,8 +332,9 @@ void ActivatePromiseForStreamInfo(std::shared_ptr<std::promise<StreamInfoResult> } catch(...) {} } -void ActivatePromiseForErrorInterface(std::shared_ptr<std::promise<ErrorInterface*>> promise, RequestCallbackPayload payload, - Error err) { +void ActivatePromiseForErrorInterface(std::shared_ptr<std::promise<ErrorInterface*>> promise, + RequestCallbackPayload payload, + Error err) { ErrorInterface* res; if (err == nullptr) { res = nullptr; @@ -358,33 +361,33 @@ T GetResultFromCallback(std::future<T>* promiseResult, uint64_t timeout_ms, Erro } -GenericRequestHeader CreateRequestHeaderFromOp(StreamRequestOp op,std::string stream) { +GenericRequestHeader CreateRequestHeaderFromOp(StreamRequestOp op, std::string stream) { switch (op) { - case StreamRequestOp::kStreamInfo: - return GenericRequestHeader{kOpcodeStreamInfo, 0, 0, 0, "", stream}; - case StreamRequestOp::kLastStream: - return GenericRequestHeader{kOpcodeLastStream, 0, 0, 0, "", ""}; + case StreamRequestOp::kStreamInfo: + return GenericRequestHeader{kOpcodeStreamInfo, 0, 0, 0, "", stream}; + case StreamRequestOp::kLastStream: + return GenericRequestHeader{kOpcodeLastStream, 0, 0, 0, "", ""}; } return GenericRequestHeader{}; } -StreamInfo ProducerImpl::StreamRequest(StreamRequestOp op,std::string stream, uint64_t timeout_ms, Error* err) const { - auto header = CreateRequestHeaderFromOp(op,stream); +StreamInfo ProducerImpl::StreamRequest(StreamRequestOp op, std::string stream, uint64_t timeout_ms, Error* err) const { + auto header = CreateRequestHeaderFromOp(op, stream); std::unique_ptr<std::promise<StreamInfoResult>> promise {new std::promise<StreamInfoResult>}; std::future<StreamInfoResult> promiseResult = promise->get_future(); *err = request_pool__->AddRequest(std::unique_ptr<ProducerRequest> {new ProducerRequest{source_cred_string_, std::move(header), - nullptr, "", "", - unwrap_callback( - ActivatePromiseForStreamInfo, - std::move(promise)), true, - timeout_ms} + nullptr, "", "", + unwrap_callback( + ActivatePromiseForStreamInfo, + std::move(promise)), true, + timeout_ms} }, true); if (*err) { return StreamInfo{}; } auto res = GetResultFromCallback<StreamInfoResult>(&promiseResult, timeout_ms + 2000, - err); // we give two more sec for request to exit by timeout + err); // we give two more sec for request to exit by timeout if (res.err == nullptr) { return res.sinfo; } else { @@ -398,19 +401,19 @@ StreamInfo ProducerImpl::GetStreamInfo(std::string stream, uint64_t timeout_ms, *err = ProducerErrorTemplates::kWrongInput.Generate("stream empty"); return {}; } - return StreamRequest(StreamRequestOp::kStreamInfo,stream,timeout_ms,err); + return StreamRequest(StreamRequestOp::kStreamInfo, stream, timeout_ms, err); } StreamInfo ProducerImpl::GetLastStream(uint64_t timeout_ms, Error* err) const { - return StreamRequest(StreamRequestOp::kLastStream,"",timeout_ms,err); + return StreamRequest(StreamRequestOp::kLastStream, "", timeout_ms, err); } uint64_t ProducerImpl::GetRequestsQueueVolumeMb() { - return request_pool__->UsedMemoryInPool()/1000000; + return request_pool__->UsedMemoryInPool() / 1000000; } void ProducerImpl::SetRequestsQueueLimits(uint64_t size, uint64_t volume) { - request_pool__->SetLimits(RequestPoolLimits{size,volume}); + request_pool__->SetLimits(RequestPoolLimits{size, volume}); } Error ProducerImpl::GetVersionInfo(std::string* client_info, std::string* server_info, bool* supported) const { @@ -430,15 +433,15 @@ Error ProducerImpl::GetVersionInfo(std::string* client_info, std::string* server Error ProducerImpl::GetServerVersionInfo(std::string* server_info, bool* supported) const { - auto endpoint = endpoint_ +"/asapo-discovery/"+kProducerProtocol.GetDiscoveryVersion()+ - "/version?client=producer&protocol="+kProducerProtocol.GetVersion(); + auto endpoint = endpoint_ + "/asapo-discovery/" + kProducerProtocol.GetDiscoveryVersion() + + "/version?client=producer&protocol=" + kProducerProtocol.GetVersion(); HttpCode code; Error err; auto response = httpclient__->Get(endpoint, &code, &err); if (err) { return err; } - return ExtractVersionFromResponse(response,"producer",server_info,supported); + return ExtractVersionFromResponse(response, "producer", server_info, supported); } Error ProducerImpl::DeleteStream(std::string stream, uint64_t timeout_ms, DeleteStreamOptions options) const { @@ -449,17 +452,18 @@ Error ProducerImpl::DeleteStream(std::string stream, uint64_t timeout_ms, Delete std::future<ErrorInterface*> promiseResult = promise->get_future(); auto err = request_pool__->AddRequest(std::unique_ptr<ProducerRequest> {new ProducerRequest{source_cred_string_, std::move(header), - nullptr, "", "", - unwrap_callback<ErrorInterface*>( - ActivatePromiseForErrorInterface, - std::move(promise)), true, - timeout_ms} + nullptr, "", "", + unwrap_callback<ErrorInterface*>( + ActivatePromiseForErrorInterface, + std::move(promise)), true, + timeout_ms} }, true); if (err) { return err; } - auto res = GetResultFromCallback<ErrorInterface*>(&promiseResult, timeout_ms + 2000, &err); // we give two more sec for request to exit by timeout + auto res = GetResultFromCallback<ErrorInterface*>(&promiseResult, timeout_ms + 2000, + &err); // we give two more sec for request to exit by timeout if (err) { return err; } diff --git a/producer/api/cpp/src/producer_impl.h b/producer/api/cpp/src/producer_impl.h index 3bdab64d2ad37c1225f86af634f83c32023b1a50..35d0ff87f3a516ba2bc822331bcd8942da5179ce 100644 --- a/producer/api/cpp/src/producer_impl.h +++ b/producer/api/cpp/src/producer_impl.h @@ -13,81 +13,81 @@ namespace asapo { enum class StreamRequestOp { - kStreamInfo, - kLastStream + kStreamInfo, + kLastStream }; class ProducerImpl : public Producer { - private: - // important to create it before request_pool__ - std::unique_ptr<ReceiverDiscoveryService> discovery_service_; - std::unique_ptr<RequestHandlerFactory> request_handler_factory_; - public: - static const size_t kDiscoveryServiceUpdateFrequencyMs; - - explicit ProducerImpl(std::string endpoint, uint8_t n_processing_threads, uint64_t timeout_ms, - asapo::RequestHandlerType type); - ProducerImpl(const ProducerImpl &) = delete; - ProducerImpl &operator=(const ProducerImpl &) = delete; - - - Error GetVersionInfo(std::string* client_info,std::string* server_info, bool* supported) const override; - - StreamInfo GetStreamInfo(std::string stream, uint64_t timeout_ms, Error* err) const override; - StreamInfo GetLastStream(uint64_t timeout_ms, Error* err) const override; - - void SetLogLevel(LogLevel level) override; - void EnableLocalLog(bool enable) override; - void EnableRemoteLog(bool enable) override; - Error Send(const MessageHeader &message_header, - MessageData data, - uint64_t ingest_mode, - std::string stream, - RequestCallback callback) override; - Error Send__(const MessageHeader &message_header, - void* data, + private: + // important to create it before request_pool__ + std::unique_ptr<ReceiverDiscoveryService> discovery_service_; + std::unique_ptr<RequestHandlerFactory> request_handler_factory_; + public: + static const size_t kDiscoveryServiceUpdateFrequencyMs; + + explicit ProducerImpl(std::string endpoint, uint8_t n_processing_threads, uint64_t timeout_ms, + asapo::RequestHandlerType type); + ProducerImpl(const ProducerImpl&) = delete; + ProducerImpl& operator=(const ProducerImpl&) = delete; + + + Error GetVersionInfo(std::string* client_info, std::string* server_info, bool* supported) const override; + + StreamInfo GetStreamInfo(std::string stream, uint64_t timeout_ms, Error* err) const override; + StreamInfo GetLastStream(uint64_t timeout_ms, Error* err) const override; + + void SetLogLevel(LogLevel level) override; + void EnableLocalLog(bool enable) override; + void EnableRemoteLog(bool enable) override; + Error Send(const MessageHeader& message_header, + MessageData data, uint64_t ingest_mode, std::string stream, RequestCallback callback) override; - void StopThreads__() override; - Error SendFile(const MessageHeader &message_header, - std::string full_path, + Error Send__(const MessageHeader& message_header, + void* data, uint64_t ingest_mode, std::string stream, RequestCallback callback) override; - Error SendStreamFinishedFlag(std::string stream, uint64_t last_id, std::string next_stream, - RequestCallback callback) override; - - Error DeleteStream(std::string stream, uint64_t timeout_ms, DeleteStreamOptions options) const override; - - AbstractLogger* log__; - std::unique_ptr<HttpClient> httpclient__; - std::unique_ptr<RequestPool> request_pool__; - - Error SetCredentials(SourceCredentials source_cred) override; - - Error SendMetadata(const std::string &metadata, RequestCallback callback) override; - uint64_t GetRequestsQueueSize() override; - Error WaitRequestsFinished(uint64_t timeout_ms) override; - uint64_t GetRequestsQueueVolumeMb() override; - void SetRequestsQueueLimits(uint64_t size, uint64_t volume) override; - private: - StreamInfo StreamRequest(StreamRequestOp op, std::string stream, uint64_t timeout_ms, Error* err) const; - Error Send(const MessageHeader &message_header, std::string stream, MessageData data, std::string full_path, - uint64_t ingest_mode, - RequestCallback callback, bool manage_data_memory); - GenericRequestHeader GenerateNextSendRequest(const MessageHeader &message_header, std::string stream, - uint64_t ingest_mode); - std::string source_cred_string_; - uint64_t timeout_ms_; - std::string endpoint_; - Error GetServerVersionInfo(std::string* server_info, - bool* supported) const; + void StopThreads__() override; + Error SendFile(const MessageHeader& message_header, + std::string full_path, + uint64_t ingest_mode, + std::string stream, + RequestCallback callback) override; + Error SendStreamFinishedFlag(std::string stream, uint64_t last_id, std::string next_stream, + RequestCallback callback) override; + + Error DeleteStream(std::string stream, uint64_t timeout_ms, DeleteStreamOptions options) const override; + + AbstractLogger* log__; + std::unique_ptr<HttpClient> httpclient__; + std::unique_ptr<RequestPool> request_pool__; + + Error SetCredentials(SourceCredentials source_cred) override; + + Error SendMetadata(const std::string& metadata, RequestCallback callback) override; + uint64_t GetRequestsQueueSize() override; + Error WaitRequestsFinished(uint64_t timeout_ms) override; + uint64_t GetRequestsQueueVolumeMb() override; + void SetRequestsQueueLimits(uint64_t size, uint64_t volume) override; + private: + StreamInfo StreamRequest(StreamRequestOp op, std::string stream, uint64_t timeout_ms, Error* err) const; + Error Send(const MessageHeader& message_header, std::string stream, MessageData data, std::string full_path, + uint64_t ingest_mode, + RequestCallback callback, bool manage_data_memory); + GenericRequestHeader GenerateNextSendRequest(const MessageHeader& message_header, std::string stream, + uint64_t ingest_mode); + std::string source_cred_string_; + uint64_t timeout_ms_; + std::string endpoint_; + Error GetServerVersionInfo(std::string* server_info, + bool* supported) const; }; struct StreamInfoResult { - StreamInfo sinfo; - ErrorInterface* err; + StreamInfo sinfo; + ErrorInterface* err; }; } diff --git a/producer/api/cpp/src/producer_request.cpp b/producer/api/cpp/src/producer_request.cpp index 7d41d0d44c1311674214c1d72bf72e0955d5f044..0ae7b1bf3218cc50b7deda671935ce845b70b78c 100644 --- a/producer/api/cpp/src/producer_request.cpp +++ b/producer/api/cpp/src/producer_request.cpp @@ -26,7 +26,7 @@ ProducerRequest::ProducerRequest(std::string source_credentials, callback{callback}, manage_data_memory{manage_data_memory} { - if (kProducerProtocol.GetReceiverVersion().size()<kMaxVersionSize) { + if (kProducerProtocol.GetReceiverVersion().size() < kMaxVersionSize) { strcpy(header.api_version, kProducerProtocol.GetReceiverVersion().c_str()); } else { strcpy(header.api_version, "v0.0"); diff --git a/producer/api/cpp/src/producer_request.h b/producer/api/cpp/src/producer_request.h index f15d2510330d4c1530f018cea718f6479dd6f5a7..130a296e7823b9d4b8ebff15956c79609e41766b 100644 --- a/producer/api/cpp/src/producer_request.h +++ b/producer/api/cpp/src/producer_request.h @@ -19,7 +19,7 @@ class ProducerRequest : public GenericRequest { bool manage_data_memory, uint64_t timeout_ms); virtual bool ContainsData() override { - return !DataFromFile(); + return !DataFromFile(); }; std::string source_credentials; std::string metadata; diff --git a/producer/api/cpp/src/receiver_discovery_service.cpp b/producer/api/cpp/src/receiver_discovery_service.cpp index 33ad5da6cf95a8adad9de0f2836f876f5200a9b4..63db2b9828ca4c59c4ac2c5a7f23418f017dee70 100644 --- a/producer/api/cpp/src/receiver_discovery_service.cpp +++ b/producer/api/cpp/src/receiver_discovery_service.cpp @@ -10,8 +10,9 @@ namespace asapo { -const std::string ReceiverDiscoveryService::kServiceEndpointSuffix = "/asapo-discovery/"+kProducerProtocol.GetDiscoveryVersion() - +"/asapo-receiver?protocol="+kProducerProtocol.GetVersion(); +const std::string ReceiverDiscoveryService::kServiceEndpointSuffix = "/asapo-discovery/" + + kProducerProtocol.GetDiscoveryVersion() + + "/asapo-receiver?protocol=" + kProducerProtocol.GetVersion(); ReceiverDiscoveryService::ReceiverDiscoveryService(std::string endpoint, uint64_t update_frequency_ms): httpclient__{DefaultHttpClient()}, log__{GetDefaultProducerLogger()}, diff --git a/producer/api/cpp/src/request_handler_filesystem.cpp b/producer/api/cpp/src/request_handler_filesystem.cpp index 968c68b347f341af8ac71048e4092e54895be5ec..6f509f9bb6c2e64cd8bad32f755d8cd20222786c 100644 --- a/producer/api/cpp/src/request_handler_filesystem.cpp +++ b/producer/api/cpp/src/request_handler_filesystem.cpp @@ -32,7 +32,8 @@ bool RequestHandlerFilesystem::ProcessRequestUnlocked(GenericRequest* request, b err = io__->WriteDataToFile(destination_folder_, request->header.message, (uint8_t*)producer_request->data.get(), (size_t)request->header.data_size, true, true); if (producer_request->callback) { - producer_request->callback(RequestCallbackPayload{request->header, std::move(producer_request->data),""}, std::move(err)); + producer_request->callback(RequestCallbackPayload{request->header, std::move(producer_request->data), ""}, std::move( + err)); } *retry = false; return true; diff --git a/producer/api/cpp/src/request_handler_tcp.cpp b/producer/api/cpp/src/request_handler_tcp.cpp index 00a2337e29056929270e6bf51b71954679148a74..824930f4a2f1350ad2411c4fe902ca93ff25c299 100644 --- a/producer/api/cpp/src/request_handler_tcp.cpp +++ b/producer/api/cpp/src/request_handler_tcp.cpp @@ -15,7 +15,7 @@ RequestHandlerTcp::RequestHandlerTcp(ReceiverDiscoveryService* discovery_service ncurrent_connections_{shared_counter} { } -Error RequestHandlerTcp::Authorize(const std::string &source_credentials) { +Error RequestHandlerTcp::Authorize(const std::string& source_credentials) { GenericRequestHeader header{kOpcodeAuthorize, 0, 0, source_credentials.size(), ""}; Error err; io__->Send(sd_, &header, sizeof(header), &err); @@ -31,7 +31,7 @@ Error RequestHandlerTcp::Authorize(const std::string &source_credentials) { return ReceiveResponse(header, nullptr); } -Error RequestHandlerTcp::ConnectToReceiver(const std::string &source_credentials, const std::string &receiver_address) { +Error RequestHandlerTcp::ConnectToReceiver(const std::string& source_credentials, const std::string& receiver_address) { Error err; sd_ = io__->CreateAndConnectIPTCPSocket(receiver_address, &err); @@ -82,7 +82,7 @@ Error RequestHandlerTcp::SendRequestContent(const ProducerRequest* request) { return nullptr; } -Error RequestHandlerTcp::ReceiveResponse(const GenericRequestHeader &request_header, std::string* response) { +Error RequestHandlerTcp::ReceiveResponse(const GenericRequestHeader& request_header, std::string* response) { Error err; SendResponse sendDataResponse; io__->Receive(sd_, &sendDataResponse, sizeof(sendDataResponse), &err); @@ -91,38 +91,39 @@ Error RequestHandlerTcp::ReceiveResponse(const GenericRequestHeader &request_hea } switch (sendDataResponse.error_code) { - case kNetAuthorizationError : { - auto res_err = ProducerErrorTemplates::kWrongInput.Generate(); - res_err->Append(sendDataResponse.message); - return res_err; - } - case kNetErrorNotSupported : { - auto res_err = ProducerErrorTemplates::kUnsupportedClient.Generate(); - res_err->Append(sendDataResponse.message); - return res_err; - } - case kNetErrorWrongRequest : { - auto res_err = ProducerErrorTemplates::kWrongInput.Generate(); - res_err->Append(sendDataResponse.message); - return res_err; - } - case kNetErrorWarning: { - auto res_err = ProducerErrorTemplates::kServerWarning.Generate(); - res_err->Append(sendDataResponse.message); - return res_err; - } - case kNetErrorReauthorize: { - auto res_err = ProducerErrorTemplates::kReAuthorizationNeeded.Generate(); - return res_err; + case kNetAuthorizationError : { + auto res_err = ProducerErrorTemplates::kWrongInput.Generate(); + res_err->Append(sendDataResponse.message); + return res_err; + } + case kNetErrorNotSupported : { + auto res_err = ProducerErrorTemplates::kUnsupportedClient.Generate(); + res_err->Append(sendDataResponse.message); + return res_err; + } + case kNetErrorWrongRequest : { + auto res_err = ProducerErrorTemplates::kWrongInput.Generate(); + res_err->Append(sendDataResponse.message); + return res_err; + } + case kNetErrorWarning: { + auto res_err = ProducerErrorTemplates::kServerWarning.Generate(); + res_err->Append(sendDataResponse.message); + return res_err; + } + case kNetErrorReauthorize: { + auto res_err = ProducerErrorTemplates::kReAuthorizationNeeded.Generate(); + return res_err; + } + case kNetErrorNoError : + if (response) { + *response = sendDataResponse.message; } - case kNetErrorNoError : - if (response) { - *response = sendDataResponse.message; - } - return nullptr; - default:auto res_err = ProducerErrorTemplates::kInternalServerError.Generate(); - res_err->Append(sendDataResponse.message); - return res_err; + return nullptr; + default: + auto res_err = ProducerErrorTemplates::kInternalServerError.Generate(); + res_err->Append(sendDataResponse.message); + return res_err; } } @@ -135,7 +136,7 @@ Error RequestHandlerTcp::TrySendToReceiver(const ProducerRequest* request, std:: err = ReceiveResponse(request->header, response); if (err == nullptr || err == ProducerErrorTemplates::kServerWarning) { log__->Debug("successfully sent data, opcode: " + std::to_string(request->header.op_code) + - ", id: " + std::to_string(request->header.data_id) + " to " + connected_receiver_uri_); + ", id: " + std::to_string(request->header.data_id) + " to " + connected_receiver_uri_); if (err == ProducerErrorTemplates::kServerWarning) { log__->Warning( "warning from server for id " + std::to_string(request->header.data_id) + ": " + err->Explain()); @@ -164,7 +165,7 @@ bool RequestHandlerTcp::UpdateReceiversList() { bool RequestHandlerTcp::TimeToUpdateReceiverList() { uint64_t elapsed_ms = std::chrono::duration_cast<std::chrono::milliseconds>(system_clock::now() - - last_receivers_uri_update_).count(); + last_receivers_uri_update_).count(); return elapsed_ms > discovery_service__->UpdateFrequency(); } @@ -195,24 +196,24 @@ void RequestHandlerTcp::Disconnect() { connected_receiver_uri_.clear(); } -bool RequestHandlerTcp::ServerError(const Error &err) { +bool RequestHandlerTcp::ServerError(const Error& err) { return err != nullptr && (err != ProducerErrorTemplates::kWrongInput && - err != ProducerErrorTemplates::kLocalIOError && - err != ProducerErrorTemplates::kUnsupportedClient && - err != ProducerErrorTemplates::kServerWarning - ); + err != ProducerErrorTemplates::kLocalIOError && + err != ProducerErrorTemplates::kUnsupportedClient && + err != ProducerErrorTemplates::kServerWarning + ); } -bool RequestHandlerTcp::ProcessErrorFromReceiver(const Error &error, +bool RequestHandlerTcp::ProcessErrorFromReceiver(const Error& error, const ProducerRequest* request, - const std::string &receiver_uri) { + const std::string& receiver_uri) { bool is_server_error = ServerError(error); if (error && error != ProducerErrorTemplates::kServerWarning) { Disconnect(); std::string log_str = "cannot send data, opcode: " + std::to_string(request->header.op_code) + - ", id: " + std::to_string(request->header.data_id) + " to " + receiver_uri + ": " + - error->Explain(); + ", id: " + std::to_string(request->header.data_id) + " to " + receiver_uri + ": " + + error->Explain(); if (is_server_error) { log__->Warning(log_str + ", will try again"); } else { @@ -261,8 +262,8 @@ bool RequestHandlerTcp::SendToOneOfTheReceivers(ProducerRequest* request, bool* return success; } log__->Warning((receivers_list_.empty() ? std::string("receiver list empty, ") : "") - + "put back to the queue, request opcode: " + std::to_string(request->header.op_code) + - ", id: " + std::to_string(request->header.data_id)); + + "put back to the queue, request opcode: " + std::to_string(request->header.op_code) + + ", id: " + std::to_string(request->header.data_id)); *retry = true; return false; } @@ -302,7 +303,7 @@ void RequestHandlerTcp::PrepareProcessingRequestLocked() { } void RequestHandlerTcp::TearDownProcessingRequestLocked(bool request_processed_successfully) { - if (!request_processed_successfully && *ncurrent_connections_>0) { + if (!request_processed_successfully && *ncurrent_connections_ > 0) { (*ncurrent_connections_)--; } } @@ -310,8 +311,8 @@ void RequestHandlerTcp::TearDownProcessingRequestLocked(bool request_processed_s void RequestHandlerTcp::ProcessRequestTimeoutUnlocked(GenericRequest* request) { auto producer_request = static_cast<ProducerRequest*>(request); auto err_string = "request id:" + std::to_string(request->header.data_id) + ", opcode: " + std::to_string( - request->header.op_code) + " for " + request->header.stream + - " stream"; + request->header.op_code) + " for " + request->header.stream + + " stream"; log__->Error("timeout " + err_string); auto err = ProducerErrorTemplates::kTimeout.Generate(err_string); diff --git a/producer/api/cpp/unittests/test_producer.cpp b/producer/api/cpp/unittests/test_producer.cpp index 984f10225e06f008a3df5161d32206d85e446d15..61443083639034797ddc11453f31bc0df52bf9f5 100644 --- a/producer/api/cpp/unittests/test_producer.cpp +++ b/producer/api/cpp/unittests/test_producer.cpp @@ -15,7 +15,7 @@ namespace { TEST(CreateProducer, TcpProducer) { asapo::Error err; std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("endpoint", 4, asapo::RequestHandlerType::kTcp, - SourceCredentials{asapo::SourceType::kRaw,"bt", "", "", ""}, 3600000, &err); + SourceCredentials{asapo::SourceType::kRaw, "bt", "", "", ""}, 3600000, &err); ASSERT_THAT(dynamic_cast<asapo::ProducerImpl*>(producer.get()), Ne(nullptr)); ASSERT_THAT(err, Eq(nullptr)); } @@ -24,13 +24,13 @@ TEST(CreateProducer, ErrorBeamtime) { asapo::Error err; std::string expected_beamtimeid(asapo::kMaxMessageSize * 10, 'a'); std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("endpoint", 4, asapo::RequestHandlerType::kTcp, - SourceCredentials{asapo::SourceType::kRaw,expected_beamtimeid, "", "", ""}, 3600000, &err); + SourceCredentials{asapo::SourceType::kRaw, expected_beamtimeid, "", "", ""}, 3600000, &err); ASSERT_THAT(producer, Eq(nullptr)); ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kWrongInput)); } TEST(CreateProducer, ErrorOnBothAutoBeamlineBeamtime) { - asapo::SourceCredentials creds{asapo::SourceType::kRaw,"auto", "auto", "subname", "token"}; + asapo::SourceCredentials creds{asapo::SourceType::kRaw, "auto", "auto", "subname", "token"}; asapo::Error err; std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("endpoint", 4, asapo::RequestHandlerType::kTcp, creds, 3600000, &err); @@ -41,7 +41,7 @@ TEST(CreateProducer, ErrorOnBothAutoBeamlineBeamtime) { TEST(CreateProducer, TooManyThreads) { asapo::Error err; std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("", asapo::kMaxProcessingThreads + 1, - asapo::RequestHandlerType::kTcp, SourceCredentials{asapo::SourceType::kRaw,"bt", "", "", ""}, 3600000, &err); + asapo::RequestHandlerType::kTcp, SourceCredentials{asapo::SourceType::kRaw, "bt", "", "", ""}, 3600000, &err); ASSERT_THAT(producer, Eq(nullptr)); ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kWrongInput)); } @@ -50,7 +50,7 @@ TEST(CreateProducer, TooManyThreads) { TEST(CreateProducer, ZeroThreads) { asapo::Error err; std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("", 0, - asapo::RequestHandlerType::kTcp, SourceCredentials{asapo::SourceType::kRaw,"bt", "", "", ""}, 3600000, &err); + asapo::RequestHandlerType::kTcp, SourceCredentials{asapo::SourceType::kRaw, "bt", "", "", ""}, 3600000, &err); ASSERT_THAT(producer, Eq(nullptr)); ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kWrongInput)); } @@ -59,7 +59,7 @@ TEST(CreateProducer, ZeroThreads) { TEST(Producer, SimpleWorkflowWihoutConnection) { asapo::Error err; std::unique_ptr<asapo::Producer> producer = asapo::Producer::Create("hello", 5, asapo::RequestHandlerType::kTcp, - SourceCredentials{asapo::SourceType::kRaw,"bt", "", "", ""}, 3600000, + SourceCredentials{asapo::SourceType::kRaw, "bt", "", "", ""}, 3600000, &err); asapo::MessageHeader message_header{1, 1, "test"}; diff --git a/producer/api/cpp/unittests/test_producer_impl.cpp b/producer/api/cpp/unittests/test_producer_impl.cpp index 023912b1f5c8b880e867cfb427edc4d9f851a811..caf5a38e6369143ce0150868eadd88883853118b 100644 --- a/producer/api/cpp/unittests/test_producer_impl.cpp +++ b/producer/api/cpp/unittests/test_producer_impl.cpp @@ -40,18 +40,18 @@ MATCHER_P10(M_CheckSendRequest, op_code, source_credentials, metadata, file_id, "Checks if a valid GenericRequestHeader was Send") { auto request = static_cast<ProducerRequest*>(arg); return ((asapo::GenericRequestHeader) (arg->header)).op_code == op_code - && ((asapo::GenericRequestHeader) (arg->header)).data_id == file_id - && ((asapo::GenericRequestHeader) (arg->header)).data_size == uint64_t(file_size) - && request->manage_data_memory == true - && request->source_credentials == source_credentials - && request->metadata == metadata - && (op_code == asapo::kOpcodeTransferDatasetData ? ((asapo::GenericRequestHeader) (arg->header)).custom_data[1] - == uint64_t(dataset_id) : true) - && (op_code == asapo::kOpcodeTransferDatasetData ? ((asapo::GenericRequestHeader) (arg->header)).custom_data[2] - == uint64_t(dataset_size) : true) - && ((asapo::GenericRequestHeader) (arg->header)).custom_data[asapo::kPosIngestMode] == uint64_t(ingest_mode) - && strcmp(((asapo::GenericRequestHeader) (arg->header)).message, message) == 0 - && strcmp(((asapo::GenericRequestHeader) (arg->header)).stream, stream) == 0; + && ((asapo::GenericRequestHeader) (arg->header)).data_id == file_id + && ((asapo::GenericRequestHeader) (arg->header)).data_size == uint64_t(file_size) + && request->manage_data_memory == true + && request->source_credentials == source_credentials + && request->metadata == metadata + && (op_code == asapo::kOpcodeTransferDatasetData ? ((asapo::GenericRequestHeader) (arg->header)).custom_data[1] + == uint64_t(dataset_id) : true) + && (op_code == asapo::kOpcodeTransferDatasetData ? ((asapo::GenericRequestHeader) (arg->header)).custom_data[2] + == uint64_t(dataset_size) : true) + && ((asapo::GenericRequestHeader) (arg->header)).custom_data[asapo::kPosIngestMode] == uint64_t(ingest_mode) + && strcmp(((asapo::GenericRequestHeader) (arg->header)).message, message) == 0 + && strcmp(((asapo::GenericRequestHeader) (arg->header)).stream, stream) == 0; } TEST(ProducerImpl, Constructor) { @@ -62,54 +62,54 @@ TEST(ProducerImpl, Constructor) { } class ProducerImplTests : public testing::Test { - public: - testing::NiceMock<MockDiscoveryService> service; - asapo::ProducerRequestHandlerFactory factory{&service}; - testing::NiceMock<asapo::MockLogger> mock_logger; - testing::NiceMock<MockRequestPull> mock_pull{&factory, &mock_logger}; - std::string expected_server_uri = "127.0.0.1:9400"; - asapo::ProducerImpl producer{expected_server_uri, 1, 3600000, asapo::RequestHandlerType::kTcp}; - uint64_t expected_size = 100; - uint64_t expected_id = 10; - uint64_t expected_dataset_id = 100; - uint64_t expected_dataset_size = 4; - uint64_t expected_ingest_mode = asapo::IngestModeFlags::kTransferMetaDataOnly; - - char expected_name[asapo::kMaxMessageSize] = "test_name"; - char expected_stream[asapo::kMaxMessageSize] = "test_stream"; - std::string expected_next_stream = "next_stream"; - - asapo::SourceCredentials expected_credentials{asapo::SourceType::kRaw, "beamtime_id", "beamline", "subname", "token" - }; - asapo::SourceCredentials expected_default_credentials{ - asapo::SourceType::kProcessed, "beamtime_id", "", "", "token" - }; - - std::string expected_credentials_str = "raw%beamtime_id%beamline%subname%token"; - std::string expected_default_credentials_str = "processed%beamtime_id%auto%detector%token"; - - std::string expected_metadata = "meta"; - std::string expected_fullpath = "filename"; - bool expected_managed_memory = true; - bool expected_unmanaged_memory = false; - - MockHttpClient* mock_http_client; - - void SetUp() override { - producer.log__ = &mock_logger; - producer.request_pool__ = std::unique_ptr<RequestPool>{&mock_pull}; - mock_http_client = new MockHttpClient; - producer.httpclient__.reset(mock_http_client); - - } - void TearDown() override { - producer.request_pool__.release(); - } + public: + testing::NiceMock<MockDiscoveryService> service; + asapo::ProducerRequestHandlerFactory factory{&service}; + testing::NiceMock<asapo::MockLogger> mock_logger; + testing::NiceMock<MockRequestPull> mock_pull{&factory, &mock_logger}; + std::string expected_server_uri = "127.0.0.1:9400"; + asapo::ProducerImpl producer{expected_server_uri, 1, 3600000, asapo::RequestHandlerType::kTcp}; + uint64_t expected_size = 100; + uint64_t expected_id = 10; + uint64_t expected_dataset_id = 100; + uint64_t expected_dataset_size = 4; + uint64_t expected_ingest_mode = asapo::IngestModeFlags::kTransferMetaDataOnly; + + char expected_name[asapo::kMaxMessageSize] = "test_name"; + char expected_stream[asapo::kMaxMessageSize] = "test_stream"; + std::string expected_next_stream = "next_stream"; + + asapo::SourceCredentials expected_credentials{asapo::SourceType::kRaw, "beamtime_id", "beamline", "subname", "token" + }; + asapo::SourceCredentials expected_default_credentials{ + asapo::SourceType::kProcessed, "beamtime_id", "", "", "token" + }; + + std::string expected_credentials_str = "raw%beamtime_id%beamline%subname%token"; + std::string expected_default_credentials_str = "processed%beamtime_id%auto%detector%token"; + + std::string expected_metadata = "meta"; + std::string expected_fullpath = "filename"; + bool expected_managed_memory = true; + bool expected_unmanaged_memory = false; + + MockHttpClient* mock_http_client; + + void SetUp() override { + producer.log__ = &mock_logger; + producer.request_pool__ = std::unique_ptr<RequestPool> {&mock_pull}; + mock_http_client = new MockHttpClient; + producer.httpclient__.reset(mock_http_client); + + } + void TearDown() override { + producer.request_pool__.release(); + } }; TEST_F(ProducerImplTests, SendReturnsError) { EXPECT_CALL(mock_pull, AddRequest_t(_, false)).WillOnce(Return( - asapo::IOErrorTemplates::kNoSpaceLeft.Generate().release())); + asapo::IOErrorTemplates::kNoSpaceLeft.Generate().release())); asapo::MessageHeader message_header{1, 1, "test"}; auto err = producer.Send(message_header, nullptr, expected_ingest_mode, "default", nullptr); ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kRequestPoolIsFull)); @@ -117,7 +117,7 @@ TEST_F(ProducerImplTests, SendReturnsError) { TEST_F(ProducerImplTests, ErrorIfFileNameTooLong) { asapo::MessageData data = asapo::MessageData{new uint8_t[100]}; - data[34]=12; + data[34] = 12; std::string long_string(asapo::kMaxMessageSize + 100, 'a'); asapo::MessageHeader message_header{1, 1, long_string}; auto err = producer.Send(message_header, std::move(data), expected_ingest_mode, "default", nullptr); @@ -192,17 +192,17 @@ TEST_F(ProducerImplTests, OKSendingSendRequestWithStream) { producer.SetCredentials(expected_credentials); EXPECT_CALL(mock_pull, AddRequest_t(M_CheckSendRequest(asapo::kOpcodeTransferData, - expected_credentials_str, - expected_metadata, - expected_id, - expected_size, - expected_name, - expected_stream, - expected_ingest_mode, - 0, - 0 - ), false)).WillOnce(Return( - nullptr)); + expected_credentials_str, + expected_metadata, + expected_id, + expected_size, + expected_name, + expected_stream, + expected_ingest_mode, + 0, + 0 + ), false)).WillOnce(Return( + nullptr)); asapo::MessageHeader message_header{expected_id, expected_size, expected_name, expected_metadata}; auto err = producer.Send(message_header, nullptr, expected_ingest_mode, expected_stream, nullptr); @@ -216,17 +216,17 @@ TEST_F(ProducerImplTests, OKSendingStreamFinish) { std::string next_stream_meta = std::string("{\"next_stream\":") + "\"" + expected_next_stream + "\"}"; EXPECT_CALL(mock_pull, AddRequest_t(M_CheckSendRequest(asapo::kOpcodeTransferData, - expected_credentials_str, - next_stream_meta.c_str(), - expected_id + 1, - 0, - asapo::kFinishStreamKeyword.c_str(), - expected_stream, - asapo::IngestModeFlags::kTransferMetaDataOnly, - 0, - 0 - ), false)).WillOnce(Return( - nullptr)); + expected_credentials_str, + next_stream_meta.c_str(), + expected_id + 1, + 0, + asapo::kFinishStreamKeyword.c_str(), + expected_stream, + asapo::IngestModeFlags::kTransferMetaDataOnly, + 0, + 0 + ), false)).WillOnce(Return( + nullptr)); auto err = producer.SendStreamFinishedFlag(expected_stream, expected_id, expected_next_stream, nullptr); @@ -244,21 +244,21 @@ TEST_F(ProducerImplTests, OKSendingStreamFinishWithNoNextStream) { producer.SetCredentials(expected_credentials); std::string - next_stream_meta = std::string("{\"next_stream\":") + "\"" + asapo::kNoNextStreamKeyword - + "\"}"; + next_stream_meta = std::string("{\"next_stream\":") + "\"" + asapo::kNoNextStreamKeyword + + "\"}"; EXPECT_CALL(mock_pull, AddRequest_t(M_CheckSendRequest(asapo::kOpcodeTransferData, - expected_credentials_str, - next_stream_meta.c_str(), - expected_id + 1, - 0, - asapo::kFinishStreamKeyword.c_str(), - expected_stream, - asapo::IngestModeFlags::kTransferMetaDataOnly, - 0, - 0 - ), false)).WillOnce(Return( - nullptr)); + expected_credentials_str, + next_stream_meta.c_str(), + expected_id + 1, + 0, + asapo::kFinishStreamKeyword.c_str(), + expected_stream, + asapo::IngestModeFlags::kTransferMetaDataOnly, + 0, + 0 + ), false)).WillOnce(Return( + nullptr)); auto err = producer.SendStreamFinishedFlag(expected_stream, expected_id, "", nullptr); @@ -268,20 +268,20 @@ TEST_F(ProducerImplTests, OKSendingStreamFinishWithNoNextStream) { TEST_F(ProducerImplTests, OKSendingSendDatasetDataRequest) { producer.SetCredentials(expected_credentials); EXPECT_CALL(mock_pull, AddRequest_t(M_CheckSendRequest(asapo::kOpcodeTransferDatasetData, - expected_credentials_str, - expected_metadata, - expected_id, - expected_size, - expected_name, - expected_stream, - expected_ingest_mode, - expected_dataset_id, - expected_dataset_size), false)).WillOnce( - Return( - nullptr)); + expected_credentials_str, + expected_metadata, + expected_id, + expected_size, + expected_name, + expected_stream, + expected_ingest_mode, + expected_dataset_id, + expected_dataset_size), false)).WillOnce( + Return( + nullptr)); asapo::MessageHeader message_header - {expected_id, expected_size, expected_name, expected_metadata, expected_dataset_id, expected_dataset_size}; + {expected_id, expected_size, expected_name, expected_metadata, expected_dataset_id, expected_dataset_size}; auto err = producer.Send(message_header, nullptr, expected_ingest_mode, expected_stream, nullptr); ASSERT_THAT(err, Eq(nullptr)); @@ -295,16 +295,16 @@ TEST_F(ProducerImplTests, OKAddingSendMetaDataRequest) { producer.SetCredentials(expected_credentials); EXPECT_CALL(mock_pull, AddRequest_t(M_CheckSendRequest(asapo::kOpcodeTransferMetaData, - expected_credentials_str, - "", - expected_id, - expected_size, - "beamtime_global.meta", - "", - expected_ingest_mode, - 10, - 10), false)).WillOnce(Return( - nullptr)); + expected_credentials_str, + "", + expected_id, + expected_size, + "beamtime_global.meta", + "", + expected_ingest_mode, + 10, + 10), false)).WillOnce(Return( + nullptr)); auto err = producer.SendMetadata(expected_metadata, nullptr); @@ -351,16 +351,16 @@ TEST_F(ProducerImplTests, OKSendingSendFileRequestWithStream) { producer.SetCredentials(expected_credentials); EXPECT_CALL(mock_pull, AddRequest_t(M_CheckSendRequest(asapo::kOpcodeTransferData, - expected_credentials_str, - "", - expected_id, - 0, - expected_name, - expected_stream, - expected_ingest_mode, - 0, - 0), false)).WillOnce(Return( - nullptr)); + expected_credentials_str, + "", + expected_id, + 0, + expected_name, + expected_stream, + expected_ingest_mode, + 0, + 0), false)).WillOnce(Return( + nullptr)); asapo::MessageHeader message_header{expected_id, 0, expected_name}; auto err = @@ -397,7 +397,8 @@ TEST_F(ProducerImplTests, ErrorSendingWrongIngestMode) { asapo::IngestModeFlags::kStoreInFilesystem, asapo::IngestModeFlags::kStoreInDatabase | asapo::IngestModeFlags::kStoreInFilesystem, asapo::IngestModeFlags::kTransferMetaDataOnly - | asapo::IngestModeFlags::kStoreInFilesystem}; + | asapo::IngestModeFlags::kStoreInFilesystem + }; EXPECT_CALL(mock_pull, AddRequest_t(_, _)).Times(0); @@ -423,19 +424,19 @@ TEST_F(ProducerImplTests, GetQueueVolume) { ASSERT_THAT(vol, Eq(10)); } -MATCHER_P(M_CheckLimits, limits,"Checks if a valid limits were used") { +MATCHER_P(M_CheckLimits, limits, "Checks if a valid limits were used") { return arg.max_requests == limits.max_requests && arg.max_memory_mb == limits.max_memory_mb; }; TEST_F(ProducerImplTests, SetLimits) { - EXPECT_CALL(mock_pull, SetLimits(M_CheckLimits(asapo::RequestPoolLimits{10,20}))); + EXPECT_CALL(mock_pull, SetLimits(M_CheckLimits(asapo::RequestPoolLimits{10, 20}))); - producer.SetRequestsQueueLimits(10,20); + producer.SetRequestsQueueLimits(10, 20); } TEST_F(ProducerImplTests, WaitRequestsFinished) { EXPECT_CALL(mock_pull, WaitRequestsFinished_t(_)).WillOnce(Return( - asapo::IOErrorTemplates::kTimeout.Generate().release())); + asapo::IOErrorTemplates::kTimeout.Generate().release())); auto err = producer.WaitRequestsFinished(100); @@ -446,16 +447,16 @@ MATCHER_P3(M_CheckGetStreamInfoRequest, op_code, source_credentials, stream, "Checks if a valid GenericRequestHeader was Send") { auto request = static_cast<ProducerRequest*>(arg); return ((asapo::GenericRequestHeader) (arg->header)).op_code == op_code - && request->source_credentials == source_credentials - && strcmp(((asapo::GenericRequestHeader) (arg->header)).stream, stream) == 0; + && request->source_credentials == source_credentials + && strcmp(((asapo::GenericRequestHeader) (arg->header)).stream, stream) == 0; } TEST_F(ProducerImplTests, GetStreamInfoMakesCorerctRequest) { producer.SetCredentials(expected_credentials); EXPECT_CALL(mock_pull, AddRequest_t(M_CheckGetStreamInfoRequest(asapo::kOpcodeStreamInfo, - expected_credentials_str, - expected_stream), true)).WillOnce( - Return(nullptr)); + expected_credentials_str, + expected_stream), true)).WillOnce( + Return(nullptr)); asapo::Error err; producer.GetStreamInfo(expected_stream, 1000, &err); @@ -481,9 +482,9 @@ TEST(GetStreamInfoTest, GetStreamInfoTimeout) { TEST_F(ProducerImplTests, GetLastStreamMakesCorerctRequest) { producer.SetCredentials(expected_credentials); EXPECT_CALL(mock_pull, AddRequest_t(M_CheckGetStreamInfoRequest(asapo::kOpcodeLastStream, - expected_credentials_str, - ""), true)).WillOnce( - Return(nullptr)); + expected_credentials_str, + ""), true)).WillOnce( + Return(nullptr)); asapo::Error err; producer.GetLastStream(1000, &err); @@ -498,14 +499,14 @@ TEST_F(ProducerImplTests, ReturnDataIfCanotAddToQueue) { data[40] = 10; asapo::OriginalRequest* original_request = new asapo::OriginalRequest{}; - auto request = std::unique_ptr<ProducerRequest> {new ProducerRequest{"", asapo::GenericRequestHeader{},std::move(data), "", "", nullptr, true, 0}}; + auto request = std::unique_ptr<ProducerRequest> {new ProducerRequest{"", asapo::GenericRequestHeader{}, std::move(data), "", "", nullptr, true, 0}}; original_request->request = std::move(request); auto pool_err = asapo::IOErrorTemplates::kNoSpaceLeft.Generate(); - pool_err->SetCustomData(std::unique_ptr<asapo::CustomErrorData>{original_request}); + pool_err->SetCustomData(std::unique_ptr<asapo::CustomErrorData> {original_request}); - EXPECT_CALL(mock_pull, AddRequest_t(_,_)).WillOnce(Return( - std::move(pool_err).release())); + EXPECT_CALL(mock_pull, AddRequest_t(_, _)).WillOnce(Return( + std::move(pool_err).release())); asapo::MessageHeader message_header{expected_id, 0, expected_name}; auto err = producer.Send(message_header, std::move(data), expected_ingest_mode, expected_stream, nullptr); @@ -521,27 +522,29 @@ TEST_F(ProducerImplTests, ReturnDataIfCanotAddToQueue) { TEST_F(ProducerImplTests, GetVersionInfoWithServer) { - std::string result = R"({"softwareVersion":"20.03.1, build 7a9294ad","clientSupported":"no", "clientProtocol":{"versionInfo":"v0.2"}})"; + std::string result = + R"({"softwareVersion":"20.03.1, build 7a9294ad","clientSupported":"no", "clientProtocol":{"versionInfo":"v0.2"}})"; - EXPECT_CALL(*mock_http_client, Get_t(HasSubstr(expected_server_uri + "/asapo-discovery/v0.1/version?client=producer&protocol=v0.2"), _,_)).WillOnce(DoAll( - SetArgPointee<1>(asapo::HttpCode::OK), - SetArgPointee<2>(nullptr), - Return(result))); + EXPECT_CALL(*mock_http_client, Get_t(HasSubstr(expected_server_uri + + "/asapo-discovery/v0.1/version?client=producer&protocol=v0.2"), _, _)).WillOnce(DoAll( + SetArgPointee<1>(asapo::HttpCode::OK), + SetArgPointee<2>(nullptr), + Return(result))); - std::string client_info,server_info; - auto err = producer.GetVersionInfo(&client_info,&server_info,nullptr); + std::string client_info, server_info; + auto err = producer.GetVersionInfo(&client_info, &server_info, nullptr); ASSERT_THAT(err, Eq(nullptr)); ASSERT_THAT(server_info, HasSubstr("20.03.1")); ASSERT_THAT(server_info, HasSubstr("v0.2")); } -MATCHER_P4(M_CheckDeleteStreamRequest, op_code, source_credentials, stream,flag, +MATCHER_P4(M_CheckDeleteStreamRequest, op_code, source_credentials, stream, flag, "Checks if a valid GenericRequestHeader was Send") { auto request = static_cast<ProducerRequest*>(arg); return ((asapo::GenericRequestHeader) (arg->header)).op_code == op_code - && request->source_credentials == source_credentials - && ((asapo::GenericRequestHeader) (arg->header)).custom_data[0] == flag - && strcmp(((asapo::GenericRequestHeader) (arg->header)).stream, stream) == 0; + && request->source_credentials == source_credentials + && ((asapo::GenericRequestHeader) (arg->header)).custom_data[0] == flag + && strcmp(((asapo::GenericRequestHeader) (arg->header)).stream, stream) == 0; } TEST_F(ProducerImplTests, DeleteStreamMakesCorerctRequest) { @@ -549,15 +552,15 @@ TEST_F(ProducerImplTests, DeleteStreamMakesCorerctRequest) { asapo::DeleteStreamOptions expected_options{}; expected_options.delete_meta = true; expected_options.error_on_not_exist = true; - auto flag =3; + auto flag = 3; EXPECT_CALL(mock_pull, AddRequest_t(M_CheckDeleteStreamRequest(asapo::kOpcodeDeleteStream, - expected_credentials_str, - expected_stream, flag), true)).WillOnce( - Return(nullptr)); + expected_credentials_str, + expected_stream, flag), true)).WillOnce( + Return(nullptr)); asapo::DeleteStreamOptions options{}; - auto err = producer.DeleteStream(expected_stream, 1000,options); + auto err = producer.DeleteStream(expected_stream, 1000, options); ASSERT_THAT(err, Eq(asapo::ProducerErrorTemplates::kTimeout)); } diff --git a/producer/api/cpp/unittests/test_request_handler_filesystem.cpp b/producer/api/cpp/unittests/test_request_handler_filesystem.cpp index d0b042aa09729ccb700e780c201f8e1639969e1f..70439e49f9b6f113e4265bad50a0af4c78ac3b4c 100644 --- a/producer/api/cpp/unittests/test_request_handler_filesystem.cpp +++ b/producer/api/cpp/unittests/test_request_handler_filesystem.cpp @@ -130,8 +130,8 @@ TEST_F(RequestHandlerFilesystemTests, WorksWithemptyCallback) { TEST_F(RequestHandlerFilesystemTests, FileRequestErrorOnReadData) { - auto unknown_error = []{ - return asapo::IOErrorTemplates::kUnknownIOError.Generate().release(); + auto unknown_error = [] { + return asapo::IOErrorTemplates::kUnknownIOError.Generate().release(); }; EXPECT_CALL(mock_io, GetDataFromFile_t(expected_origin_fullpath, testing::Pointee(expected_file_size), _)) diff --git a/producer/api/cpp/unittests/test_request_handler_tcp.cpp b/producer/api/cpp/unittests/test_request_handler_tcp.cpp index 9066b904493af1df5a095a28abdcf1cdc0f55981..faa60f74a2e044fd064c3f5bdd147fd792ed97d4 100644 --- a/producer/api/cpp/unittests/test_request_handler_tcp.cpp +++ b/producer/api/cpp/unittests/test_request_handler_tcp.cpp @@ -47,112 +47,113 @@ std::string expected_auth_message = {"12345"}; asapo::Opcode expected_op_code = asapo::kOpcodeTransferData; class RequestHandlerTcpTests : public testing::Test { - public: - NiceMock<asapo::MockIO> mock_io; - NiceMock<MockDiscoveryService> mock_discovery_service; - - uint64_t expected_file_id = 42; - uint64_t expected_file_size = 1337; - uint64_t expected_meta_size = 4; - std::string expected_metadata = "meta"; - std::string expected_warning = "warning"; - std::string expected_response = "response"; - - char expected_file_name[asapo::kMaxMessageSize] = "test_name"; - char expected_beamtime_id[asapo::kMaxMessageSize] = "test_beamtime_id"; - char expected_stream[asapo::kMaxMessageSize] = "test_stream"; - - uint64_t expected_thread_id = 2; - - asapo::Error callback_err; - asapo::GenericRequestHeader header{expected_op_code, expected_file_id, expected_file_size, - expected_meta_size, expected_file_name, expected_stream}; - asapo::GenericRequestHeader header_fromfile{expected_op_code, expected_file_id, 0, expected_meta_size, - expected_file_name, expected_stream}; - bool callback_called = false; - asapo::GenericRequestHeader callback_header; - std::string callback_response; - uint8_t expected_callback_data = 2; - asapo::MessageData expected_data{[this]() { - auto a = new uint8_t[expected_file_size]; - for (auto i = 0; i < expected_file_size; i++) { - a[i] = expected_callback_data; + public: + NiceMock<asapo::MockIO> mock_io; + NiceMock<MockDiscoveryService> mock_discovery_service; + + uint64_t expected_file_id = 42; + uint64_t expected_file_size = 1337; + uint64_t expected_meta_size = 4; + std::string expected_metadata = "meta"; + std::string expected_warning = "warning"; + std::string expected_response = "response"; + + char expected_file_name[asapo::kMaxMessageSize] = "test_name"; + char expected_beamtime_id[asapo::kMaxMessageSize] = "test_beamtime_id"; + char expected_stream[asapo::kMaxMessageSize] = "test_stream"; + + uint64_t expected_thread_id = 2; + + asapo::Error callback_err; + asapo::GenericRequestHeader header{expected_op_code, expected_file_id, expected_file_size, + expected_meta_size, expected_file_name, expected_stream}; + asapo::GenericRequestHeader header_fromfile{expected_op_code, expected_file_id, 0, expected_meta_size, + expected_file_name, expected_stream}; + bool callback_called = false; + asapo::GenericRequestHeader callback_header; + std::string callback_response; + uint8_t expected_callback_data = 2; + asapo::MessageData expected_data{[this]() { + auto a = new uint8_t[expected_file_size]; + for (auto i = 0; i < expected_file_size; i++) { + a[i] = expected_callback_data; + } + return a; + } + ()}; + asapo::MessageData callback_data; + + asapo::ProducerRequest request{expected_beamtime_id, header, std::move(expected_data), expected_metadata, "", + [this](asapo::RequestCallbackPayload payload, asapo::Error err) { + callback_called = true; + callback_err = std::move(err); + callback_header = payload.original_header; + callback_response = payload.response; + callback_data = std::move(payload.data); + }, true, 0}; + + std::string expected_origin_fullpath = std::string("origin/") + expected_file_name; + asapo::ProducerRequest request_filesend{expected_beamtime_id, header_fromfile, nullptr, expected_metadata, + expected_origin_fullpath, + [this](asapo::RequestCallbackPayload payload, asapo::Error err) { + callback_called = true; + callback_err = std::move(err); + callback_header = payload.original_header; + callback_response = payload.response; + callback_data = std::move(payload.data); + }, true, 0}; + + asapo::ProducerRequest + request_nocallback{expected_beamtime_id, header, nullptr, expected_metadata, "", nullptr, true, 0}; + testing::NiceMock<asapo::MockLogger> mock_logger; + uint64_t n_connections{0}; + asapo::RequestHandlerTcp request_handler{&mock_discovery_service, expected_thread_id, &n_connections}; + + std::string expected_address1 = {"127.0.0.1:9090"}; + std::string expected_address2 = {"127.0.0.1:9091"}; + asapo::ReceiversList receivers_list{expected_address1, expected_address2}; + asapo::ReceiversList receivers_list2{expected_address2, expected_address1}; + + asapo::ReceiversList receivers_list_single{expected_address1}; + + std::vector<asapo::SocketDescriptor> expected_sds{83942, 83943}; + + bool retry; + Sequence seq_receive[2]; + void ExpectFailConnect(bool only_once = false); + void ExpectFailAuthorize(asapo::NetworkErrorCode error_code); + void ExpectOKAuthorize(bool only_once = false); + void ExpectFailSendHeader(bool only_once = false); + void ExpectFailSend(uint64_t expected_size, bool only_once); + void ExpectFailSend(bool only_once = false); + void ExpectFailSendMetaData(bool only_once = false); + void ExpectOKConnect(bool only_once = false); + void ExpectOKSendHeader(bool only_once = false, asapo::Opcode code = expected_op_code); + void ExpectOKSend(uint64_t expected_size, bool only_once); + void ExpectOKSendAll(bool only_once); + void ExpectGetFileSize(bool ok); + void ExpectOKSend(bool only_once = false); + void ExpectOKSendFile(bool only_once = false); + void ExpectFailSendFile(const asapo::ProducerErrorTemplate& err_template, bool client_error = false); + void ExpectOKSendMetaData(bool only_once = false); + void ExpectFailReceive(bool only_once = false); + void ExpectOKReceive(bool only_once = true, asapo::NetworkErrorCode code = asapo::kNetErrorNoError, + std::string message = ""); + void DoSingleSend(bool connect = true, bool success = true); + void AssertImmediatelyCallBack(asapo::NetworkErrorCode error_code, const asapo::ProducerErrorTemplate& err_template); + void SetUp() override { + request_handler.log__ = &mock_logger; + request_handler.io__.reset(&mock_io); + request.header.custom_data[asapo::kPosIngestMode] = asapo::kDefaultIngestMode; + request_filesend.header.custom_data[asapo::kPosIngestMode] = asapo::kDefaultIngestMode; + request_nocallback.header.custom_data[asapo::kPosIngestMode] = asapo::kDefaultIngestMode; + ON_CALL(mock_discovery_service, RotatedUriList(_)). + WillByDefault(Return(receivers_list)); + + } + void TearDown() override { + request_handler.io__.release(); } - return a; - }()}; - asapo::MessageData callback_data; - - asapo::ProducerRequest request{expected_beamtime_id, header, std::move(expected_data), expected_metadata, "", - [this](asapo::RequestCallbackPayload payload, asapo::Error err) { - callback_called = true; - callback_err = std::move(err); - callback_header = payload.original_header; - callback_response = payload.response; - callback_data = std::move(payload.data); - }, true, 0}; - - std::string expected_origin_fullpath = std::string("origin/") + expected_file_name; - asapo::ProducerRequest request_filesend{expected_beamtime_id, header_fromfile, nullptr, expected_metadata, - expected_origin_fullpath, - [this](asapo::RequestCallbackPayload payload, asapo::Error err) { - callback_called = true; - callback_err = std::move(err); - callback_header = payload.original_header; - callback_response = payload.response; - callback_data = std::move(payload.data); - }, true, 0}; - - asapo::ProducerRequest - request_nocallback{expected_beamtime_id, header, nullptr, expected_metadata, "", nullptr, true, 0}; - testing::NiceMock<asapo::MockLogger> mock_logger; - uint64_t n_connections{0}; - asapo::RequestHandlerTcp request_handler{&mock_discovery_service, expected_thread_id, &n_connections}; - - std::string expected_address1 = {"127.0.0.1:9090"}; - std::string expected_address2 = {"127.0.0.1:9091"}; - asapo::ReceiversList receivers_list{expected_address1, expected_address2}; - asapo::ReceiversList receivers_list2{expected_address2, expected_address1}; - - asapo::ReceiversList receivers_list_single{expected_address1}; - - std::vector<asapo::SocketDescriptor> expected_sds{83942, 83943}; - - bool retry; - Sequence seq_receive[2]; - void ExpectFailConnect(bool only_once = false); - void ExpectFailAuthorize(asapo::NetworkErrorCode error_code); - void ExpectOKAuthorize(bool only_once = false); - void ExpectFailSendHeader(bool only_once = false); - void ExpectFailSend(uint64_t expected_size, bool only_once); - void ExpectFailSend(bool only_once = false); - void ExpectFailSendMetaData(bool only_once = false); - void ExpectOKConnect(bool only_once = false); - void ExpectOKSendHeader(bool only_once = false, asapo::Opcode code = expected_op_code); - void ExpectOKSend(uint64_t expected_size, bool only_once); - void ExpectOKSendAll(bool only_once); - void ExpectGetFileSize(bool ok); - void ExpectOKSend(bool only_once = false); - void ExpectOKSendFile(bool only_once = false); - void ExpectFailSendFile(const asapo::ProducerErrorTemplate &err_template, bool client_error = false); - void ExpectOKSendMetaData(bool only_once = false); - void ExpectFailReceive(bool only_once = false); - void ExpectOKReceive(bool only_once = true, asapo::NetworkErrorCode code = asapo::kNetErrorNoError, - std::string message = ""); - void DoSingleSend(bool connect = true, bool success = true); - void AssertImmediatelyCallBack(asapo::NetworkErrorCode error_code, const asapo::ProducerErrorTemplate &err_template); - void SetUp() override { - request_handler.log__ = &mock_logger; - request_handler.io__.reset(&mock_io); - request.header.custom_data[asapo::kPosIngestMode] = asapo::kDefaultIngestMode; - request_filesend.header.custom_data[asapo::kPosIngestMode] = asapo::kDefaultIngestMode; - request_nocallback.header.custom_data[asapo::kPosIngestMode] = asapo::kDefaultIngestMode; - ON_CALL(mock_discovery_service, RotatedUriList(_)). - WillByDefault(Return(receivers_list)); - - } - void TearDown() override { - request_handler.io__.release(); - } }; ACTION_P2(A_WriteSendResponse, error_code, message) { @@ -164,27 +165,27 @@ ACTION_P2(A_WriteSendResponse, error_code, message) { MATCHER_P5(M_CheckSendRequest, op_code, file_id, file_size, message, stream, "Checks if a valid GenericRequestHeader was Send") { return ((asapo::GenericRequestHeader*) arg)->op_code == op_code - && ((asapo::GenericRequestHeader*) arg)->data_id == uint64_t(file_id) - && ((asapo::GenericRequestHeader*) arg)->data_size == uint64_t(file_size) - && strcmp(((asapo::GenericRequestHeader*) arg)->message, message) == 0 - && strcmp(((asapo::GenericRequestHeader*) arg)->stream, stream) == 0; + && ((asapo::GenericRequestHeader*) arg)->data_id == uint64_t(file_id) + && ((asapo::GenericRequestHeader*) arg)->data_size == uint64_t(file_size) + && strcmp(((asapo::GenericRequestHeader*) arg)->message, message) == 0 + && strcmp(((asapo::GenericRequestHeader*) arg)->stream, stream) == 0; } void RequestHandlerTcpTests::ExpectFailConnect(bool only_once) { for (auto expected_address : receivers_list) { EXPECT_CALL(mock_io, CreateAndConnectIPTCPSocket_t(expected_address, _)) - .WillOnce( - DoAll( - testing::SetArgPointee<1>(asapo::IOErrorTemplates::kInvalidAddressFormat.Generate().release()), - Return(asapo::kDisconnectedSocketDescriptor) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<1>(asapo::IOErrorTemplates::kInvalidAddressFormat.Generate().release()), + Return(asapo::kDisconnectedSocketDescriptor) + )); if (only_once) EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("cannot connect"), - HasSubstr(expected_address) + HasSubstr("cannot connect"), + HasSubstr(expected_address) ) - )); + )); if (only_once) break; } @@ -195,42 +196,42 @@ void RequestHandlerTcpTests::ExpectFailAuthorize(asapo::NetworkErrorCode error_c auto expected_sd = expected_sds[0]; EXPECT_CALL(mock_io, Send_t(expected_sd, M_CheckSendRequest(asapo::kOpcodeAuthorize, 0, 0, "", - ""), + ""), sizeof(asapo::GenericRequestHeader), _)) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - Return(sizeof(asapo::GenericRequestHeader)) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + Return(sizeof(asapo::GenericRequestHeader)) + )); EXPECT_CALL(mock_io, Send_t(expected_sd, _, strlen(expected_beamtime_id), _)) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - Return(strlen(expected_beamtime_id)) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + Return(strlen(expected_beamtime_id)) + )); EXPECT_CALL(mock_io, Receive_t(expected_sd, _, sizeof(asapo::SendResponse), _)) - .InSequence(seq_receive[0]) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - A_WriteSendResponse(error_code, expected_auth_message), - testing::ReturnArg<2>() - )); + .InSequence(seq_receive[0]) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + A_WriteSendResponse(error_code, expected_auth_message), + testing::ReturnArg<2>() + )); EXPECT_CALL(mock_io, CloseSocket_t(expected_sd, _)); EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("disconnected"), - HasSubstr(receivers_list[0]) + HasSubstr("disconnected"), + HasSubstr(receivers_list[0]) ) - )); + )); EXPECT_CALL(mock_logger, Error(AllOf( - HasSubstr("authorization"), - HasSubstr(expected_auth_message), - HasSubstr(receivers_list[0]) + HasSubstr("authorization"), + HasSubstr(expected_auth_message), + HasSubstr(receivers_list[0]) ) - )); + )); } @@ -239,35 +240,35 @@ void RequestHandlerTcpTests::ExpectOKAuthorize(bool only_once) { for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Send_t(expected_sd, M_CheckSendRequest(asapo::kOpcodeAuthorize, 0, 0, "", - ""), + ""), sizeof(asapo::GenericRequestHeader), _)) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - Return(sizeof(asapo::GenericRequestHeader)) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + Return(sizeof(asapo::GenericRequestHeader)) + )); EXPECT_CALL(mock_io, Send_t(expected_sd, _, strlen(expected_beamtime_id), _)) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - Return(strlen(expected_beamtime_id)) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + Return(strlen(expected_beamtime_id)) + )); EXPECT_CALL(mock_io, Receive_t(expected_sd, _, sizeof(asapo::SendResponse), _)) - .InSequence(seq_receive[i]) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - A_WriteSendResponse(asapo::kNetErrorNoError, expected_auth_message), - testing::ReturnArg<2>() - )); + .InSequence(seq_receive[i]) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + A_WriteSendResponse(asapo::kNetErrorNoError, expected_auth_message), + testing::ReturnArg<2>() + )); if (only_once) { EXPECT_CALL(mock_logger, Info(AllOf( - HasSubstr("authorized"), - HasSubstr(receivers_list[i]) + HasSubstr("authorized"), + HasSubstr(receivers_list[i]) ) - )); + )); } if (only_once) break; i++; @@ -279,28 +280,28 @@ void RequestHandlerTcpTests::ExpectFailSendHeader(bool only_once) { int i = 0; for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Send_t(expected_sd, M_CheckSendRequest(expected_op_code, - expected_file_id, - expected_file_size, - expected_file_name, - expected_stream), + expected_file_id, + expected_file_size, + expected_file_name, + expected_stream), sizeof(asapo::GenericRequestHeader), _)) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(asapo::IOErrorTemplates::kBadFileNumber.Generate().release()), - Return(-1) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<3>(asapo::IOErrorTemplates::kBadFileNumber.Generate().release()), + Return(-1) + )); if (only_once) { EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("disconnected"), - HasSubstr(receivers_list[i]) + HasSubstr("disconnected"), + HasSubstr(receivers_list[i]) ) - )); + )); EXPECT_CALL(mock_logger, Warning(AllOf( - HasSubstr("cannot send"), - HasSubstr(receivers_list[i]) + HasSubstr("cannot send"), + HasSubstr(receivers_list[i]) ) - )); + )); } EXPECT_CALL(mock_io, CloseSocket_t(expected_sd, _)); if (only_once) break; @@ -311,26 +312,26 @@ void RequestHandlerTcpTests::ExpectFailSendHeader(bool only_once) { } } -void RequestHandlerTcpTests::ExpectFailSendFile(const asapo::ProducerErrorTemplate &err_template, bool client_error) { +void RequestHandlerTcpTests::ExpectFailSendFile(const asapo::ProducerErrorTemplate& err_template, bool client_error) { int i = 0; for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, SendFile_t(expected_sd, expected_origin_fullpath, (size_t) expected_file_size)) - .Times(1) - .WillOnce( - Return(err_template.Generate().release()) - ); + .Times(1) + .WillOnce( + Return(err_template.Generate().release()) + ); if (client_error) { EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("disconnected"), - HasSubstr(receivers_list[i]) + HasSubstr("disconnected"), + HasSubstr(receivers_list[i]) ) - )); + )); EXPECT_CALL(mock_logger, Error(AllOf( - HasSubstr("cannot send"), - HasSubstr(receivers_list[i])) - )); + HasSubstr("cannot send"), + HasSubstr(receivers_list[i])) + )); } @@ -348,24 +349,24 @@ void RequestHandlerTcpTests::ExpectFailSend(uint64_t expected_size, bool only_on int i = 0; for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Send_t(expected_sd, _, (size_t) expected_size, _)) - .Times(1) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(asapo::IOErrorTemplates::kBadFileNumber.Generate().release()), - Return(-1) - )); + .Times(1) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(asapo::IOErrorTemplates::kBadFileNumber.Generate().release()), + Return(-1) + )); if (only_once) { EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("disconnected"), - HasSubstr(receivers_list[i]) + HasSubstr("disconnected"), + HasSubstr(receivers_list[i]) ) - )); + )); EXPECT_CALL(mock_logger, Warning(AllOf( - HasSubstr("cannot send"), - HasSubstr(receivers_list[i]) + HasSubstr("cannot send"), + HasSubstr(receivers_list[i]) ) - )); + )); } EXPECT_CALL(mock_io, CloseSocket_t(expected_sd, _)); @@ -387,23 +388,23 @@ void RequestHandlerTcpTests::ExpectFailReceive(bool only_once) { int i = 0; for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Receive_t(expected_sd, _, sizeof(asapo::SendResponse), _)) - .InSequence(seq_receive[i]) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(asapo::IOErrorTemplates::kBadFileNumber.Generate().release()), - testing::Return(-1) - )); + .InSequence(seq_receive[i]) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(asapo::IOErrorTemplates::kBadFileNumber.Generate().release()), + testing::Return(-1) + )); EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("disconnected"), - HasSubstr(receivers_list[i]) + HasSubstr("disconnected"), + HasSubstr(receivers_list[i]) ) - )); + )); EXPECT_CALL(mock_logger, Warning(AllOf( - HasSubstr("cannot send"), - HasSubstr(receivers_list[i]) + HasSubstr("cannot send"), + HasSubstr(receivers_list[i]) ) - )); + )); EXPECT_CALL(mock_io, CloseSocket_t(expected_sd, _)); if (only_once) break; i++; @@ -421,12 +422,12 @@ void RequestHandlerTcpTests::ExpectOKSendAll(bool only_once) { void RequestHandlerTcpTests::ExpectOKSend(uint64_t expected_size, bool only_once) { for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Send_t(expected_sd, _, (size_t) expected_size, _)) - .Times(1) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - Return((size_t) expected_file_size) - )); + .Times(1) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + Return((size_t) expected_file_size) + )); if (only_once) break; } } @@ -442,8 +443,8 @@ void RequestHandlerTcpTests::ExpectOKSend(bool only_once) { void RequestHandlerTcpTests::ExpectOKSendFile(bool only_once) { for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, SendFile_t(expected_sd, expected_origin_fullpath, (size_t) expected_file_size)) - .Times(1) - .WillOnce(Return(nullptr)); + .Times(1) + .WillOnce(Return(nullptr)); if (only_once) break; } } @@ -451,16 +452,16 @@ void RequestHandlerTcpTests::ExpectOKSendFile(bool only_once) { void RequestHandlerTcpTests::ExpectOKSendHeader(bool only_once, asapo::Opcode opcode) { for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Send_t(expected_sd, M_CheckSendRequest(opcode, - expected_file_id, - expected_file_size, - expected_file_name, - expected_stream), + expected_file_id, + expected_file_size, + expected_file_name, + expected_stream), sizeof(asapo::GenericRequestHeader), _)) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - Return(sizeof(asapo::GenericRequestHeader)) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + Return(sizeof(asapo::GenericRequestHeader)) + )); if (only_once) break; } @@ -470,17 +471,17 @@ void RequestHandlerTcpTests::ExpectOKConnect(bool only_once) { int i = 0; for (auto expected_address : receivers_list) { EXPECT_CALL(mock_io, CreateAndConnectIPTCPSocket_t(expected_address, _)) - .WillOnce( - DoAll( - testing::SetArgPointee<1>(nullptr), - Return(expected_sds[i]) - )); + .WillOnce( + DoAll( + testing::SetArgPointee<1>(nullptr), + Return(expected_sds[i]) + )); if (only_once) { EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("connected to"), - HasSubstr(expected_address) + HasSubstr("connected to"), + HasSubstr(expected_address) ) - )); + )); } if (only_once) break; i++; @@ -491,19 +492,19 @@ void RequestHandlerTcpTests::ExpectOKReceive(bool only_once, asapo::NetworkError int i = 0; for (auto expected_sd : expected_sds) { EXPECT_CALL(mock_io, Receive_t(expected_sd, _, sizeof(asapo::SendResponse), _)) - .InSequence(seq_receive[i]) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - A_WriteSendResponse(code, message), - testing::ReturnArg<2>() - )); + .InSequence(seq_receive[i]) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + A_WriteSendResponse(code, message), + testing::ReturnArg<2>() + )); if (only_once) { EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("sent data"), - HasSubstr(receivers_list[i]) + HasSubstr("sent data"), + HasSubstr(receivers_list[i]) ) - )); + )); } if (only_once) break; i++; @@ -525,7 +526,7 @@ void RequestHandlerTcpTests::DoSingleSend(bool connect, bool success) { if (connect) { EXPECT_CALL(mock_discovery_service, RotatedUriList(_)). - WillOnce(Return(receivers_list_single)); + WillOnce(Return(receivers_list_single)); } request_handler.PrepareProcessingRequestLocked(); @@ -623,10 +624,10 @@ TEST_F(RequestHandlerTcpTests, DoesNotTryConnectWhenConnected) { DoSingleSend(); EXPECT_CALL(mock_discovery_service, RotatedUriList(_)). - WillOnce(Return(receivers_list_single)); + WillOnce(Return(receivers_list_single)); EXPECT_CALL(mock_io, CreateAndConnectIPTCPSocket_t(_, _)) - .Times(0); + .Times(0); ExpectFailSendHeader(true); @@ -656,7 +657,7 @@ TEST_F(RequestHandlerTcpTests, CloseConnectionWhenRebalance) { std::this_thread::sleep_for(std::chrono::milliseconds(10)); EXPECT_CALL(mock_discovery_service, RotatedUriList(_)). - WillOnce(Return(asapo::ReceiversList{})); + WillOnce(Return(asapo::ReceiversList{})); EXPECT_CALL(mock_io, CloseSocket_t(_, _)); @@ -711,7 +712,7 @@ TEST_F(RequestHandlerTcpTests, ErrorWhenCannotSendMetaData) { TEST_F(RequestHandlerTcpTests, ErrorWhenCannotReceiveData) { EXPECT_CALL(mock_discovery_service, RotatedUriList(_)). - WillOnce(Return(receivers_list_single)); + WillOnce(Return(receivers_list_single)); ExpectOKConnect(true); ExpectOKAuthorize(true); @@ -727,30 +728,30 @@ TEST_F(RequestHandlerTcpTests, ErrorWhenCannotReceiveData) { } void RequestHandlerTcpTests::AssertImmediatelyCallBack(asapo::NetworkErrorCode error_code, - const asapo::ProducerErrorTemplate &err_template) { + const asapo::ProducerErrorTemplate& err_template) { ExpectOKConnect(true); ExpectOKAuthorize(true); ExpectOKSendAll(true); EXPECT_CALL(mock_io, Receive_t(expected_sds[0], _, sizeof(asapo::SendResponse), _)) - .InSequence(seq_receive[0]) - .WillOnce( - DoAll( - testing::SetArgPointee<3>(nullptr), - A_WriteSendResponse(error_code, expected_auth_message), - testing::ReturnArg<2>() - )); + .InSequence(seq_receive[0]) + .WillOnce( + DoAll( + testing::SetArgPointee<3>(nullptr), + A_WriteSendResponse(error_code, expected_auth_message), + testing::ReturnArg<2>() + )); EXPECT_CALL(mock_logger, Debug(AllOf( - HasSubstr("disconnected"), - HasSubstr(receivers_list[0]) + HasSubstr("disconnected"), + HasSubstr(receivers_list[0]) ) - )); + )); EXPECT_CALL(mock_logger, Error(AllOf( - HasSubstr("cannot send"), - HasSubstr(receivers_list[0]) + HasSubstr("cannot send"), + HasSubstr(receivers_list[0]) ) - )); + )); request_handler.PrepareProcessingRequestLocked(); auto success = request_handler.ProcessRequestUnlocked(&request, &retry); @@ -970,9 +971,9 @@ TEST_F(RequestHandlerTcpTests, SendMetaOnlyForFileReadOK) { TEST_F(RequestHandlerTcpTests, TimeoutCallsCallback) { EXPECT_CALL(mock_logger, Error(AllOf( - HasSubstr("timeout"), - HasSubstr("stream")) - )); + HasSubstr("timeout"), + HasSubstr("stream")) + )); request_handler.ProcessRequestTimeoutUnlocked(&request); @@ -989,9 +990,9 @@ TEST_F(RequestHandlerTcpTests, SendWithWarning) { ExpectOKReceive(true, asapo::kNetErrorWarning, expected_warning); EXPECT_CALL(mock_logger, Warning(AllOf( - HasSubstr("server"), - HasSubstr(expected_warning)) - )); + HasSubstr("server"), + HasSubstr(expected_warning)) + )); request_handler.PrepareProcessingRequestLocked(); auto success = request_handler.ProcessRequestUnlocked(&request, &retry); diff --git a/producer/event_monitor_producer/src/main_eventmon.cpp b/producer/event_monitor_producer/src/main_eventmon.cpp index 72446fa522c48bbdd9724fedc639985874afe1ae..0133991d9e5add14fd3b88d75a8ce4b77bd54146 100644 --- a/producer/event_monitor_producer/src/main_eventmon.cpp +++ b/producer/event_monitor_producer/src/main_eventmon.cpp @@ -39,7 +39,8 @@ std::unique_ptr<Producer> CreateProducer() { Error err; auto producer = Producer::Create(config->asapo_endpoint, (uint8_t) config->nthreads, - config->mode, asapo::SourceCredentials{asapo::SourceType::kProcessed,config->beamtime_id, "", config->data_source, ""}, 3600000, &err); + config->mode, asapo::SourceCredentials{asapo::SourceType::kProcessed, config->beamtime_id, "", config->data_source, ""}, + 3600000, &err); if(err) { std::cerr << "cannot create producer: " << err << std::endl; exit(EXIT_FAILURE); @@ -138,7 +139,7 @@ int main (int argc, char* argv[]) { message_header.message_id = ++i; HandleDatasets(&message_header); producer->SendFile(message_header, GetEventMonConfig()->root_monitored_folder + asapo::kPathSeparator + - message_header.file_name, asapo::kDefaultIngestMode, "default", ProcessAfterSend); + message_header.file_name, asapo::kDefaultIngestMode, "default", ProcessAfterSend); } logger->Info("Producer exit. Processed " + std::to_string(i) + " files"); diff --git a/receiver/src/file_processors/file_processor.cpp b/receiver/src/file_processors/file_processor.cpp index 44390dee2f84bfa0ec944e9eb3b7c89eff6af457..422f6dfe96937ab9e756bcc195806cdf65161ce9 100644 --- a/receiver/src/file_processors/file_processor.cpp +++ b/receiver/src/file_processors/file_processor.cpp @@ -16,30 +16,30 @@ Error GetRootFolder(const Request* request, std::string* root_folder) { auto fname = request->GetFileName(); auto pos = fname.find(asapo::kPathSeparator); if (pos == std::string::npos) { - return ReceiverErrorTemplates::kBadRequest.Generate("cannot extract root folder from file path "+fname); + return ReceiverErrorTemplates::kBadRequest.Generate("cannot extract root folder from file path " + fname); } auto posr = fname.find(".."); if (posr != std::string::npos) { - return ReceiverErrorTemplates::kBadRequest.Generate("cannot use relative path in path name "+fname); + return ReceiverErrorTemplates::kBadRequest.Generate("cannot use relative path in path name " + fname); } std::string file_folder = fname.substr(0, pos); auto folder_by_type = GetStringFromSourceType(request->GetSourceType()); - if (file_folder!=folder_by_type) { - return ReceiverErrorTemplates::kBadRequest.Generate("file "+fname+" is not in "+folder_by_type +" folder"); + if (file_folder != folder_by_type) { + return ReceiverErrorTemplates::kBadRequest.Generate("file " + fname + " is not in " + folder_by_type + " folder"); } switch (request->GetSourceType()) { - case SourceType::kProcessed: - root = request->GetOfflinePath(); - break; - case SourceType::kRaw: - root = request->GetOnlinePath(); - if (root.empty()) { - return ReceiverErrorTemplates::kBadRequest.Generate("online path not available"); - } - break; + case SourceType::kProcessed: + root = request->GetOfflinePath(); + break; + case SourceType::kRaw: + root = request->GetOnlinePath(); + if (root.empty()) { + return ReceiverErrorTemplates::kBadRequest.Generate("online path not available"); + } + break; } *root_folder = root; diff --git a/receiver/src/file_processors/receive_file_processor.cpp b/receiver/src/file_processors/receive_file_processor.cpp index a96b94ba394a96428cc044adc9ad85cfd9517a3c..676c82a14e430c5ad02f1683d053eb48edad2828 100644 --- a/receiver/src/file_processors/receive_file_processor.cpp +++ b/receiver/src/file_processors/receive_file_processor.cpp @@ -17,7 +17,7 @@ Error ReceiveFileProcessor::ProcessFile(const Request* request, bool overwrite) auto socket = request->GetSocket(); auto fname = request->GetFileName(); std::string root_folder; - auto err = GetRootFolder(request,&root_folder); + auto err = GetRootFolder(request, &root_folder); if (err) { return err; } diff --git a/receiver/src/file_processors/write_file_processor.cpp b/receiver/src/file_processors/write_file_processor.cpp index 23c726fb8a5d015b749c2d2f26a23b9fc2f97d47..c995179237e550f6c64200884c691eb00264e7b4 100644 --- a/receiver/src/file_processors/write_file_processor.cpp +++ b/receiver/src/file_processors/write_file_processor.cpp @@ -22,7 +22,7 @@ Error WriteFileProcessor::ProcessFile(const Request* request, bool overwrite) co auto data = request->GetData(); auto fname = request->GetFileName(); std::string root_folder; - auto err = GetRootFolder(request,&root_folder); + auto err = GetRootFolder(request, &root_folder); if (err) { return err; } diff --git a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp index 1529dc7ff4dfa201e0ee0c224fcb2ea3f0dde6e4..59406f7f2606fb5ac28394527a61d3d1d0166799 100644 --- a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp +++ b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.cpp @@ -11,7 +11,7 @@ ReceiverDataServerRequestHandler::ReceiverDataServerRequestHandler(RdsNetServer* } -bool ReceiverDataServerRequestHandler::CheckRequest(const ReceiverDataServerRequest* request,NetworkErrorCode* code) { +bool ReceiverDataServerRequestHandler::CheckRequest(const ReceiverDataServerRequest* request, NetworkErrorCode* code) { if (request->header.op_code != kOpcodeGetBufferData) { *code = kNetErrorWrongRequest; return false; @@ -57,8 +57,8 @@ bool ReceiverDataServerRequestHandler::ProcessRequestUnlocked(GenericRequest* re *retry = false; auto receiver_request = dynamic_cast<ReceiverDataServerRequest*>(request); NetworkErrorCode code; - if (!CheckRequest(receiver_request,&code)) { - HandleInvalidRequest(receiver_request,code); + if (!CheckRequest(receiver_request, &code)) { + HandleInvalidRequest(receiver_request, code); return true; } @@ -90,16 +90,17 @@ void ReceiverDataServerRequestHandler::ProcessRequestTimeoutUnlocked(GenericRequ // do nothing } -void ReceiverDataServerRequestHandler::HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request,NetworkErrorCode code) { +void ReceiverDataServerRequestHandler::HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request, + NetworkErrorCode code) { SendResponse(receiver_request, code); server_->HandleAfterError(receiver_request->source_id); switch (code) { - case NetworkErrorCode::kNetErrorWrongRequest: - log__->Error("wrong request, code:" + std::to_string(receiver_request->header.op_code)); - break; - case NetworkErrorCode::kNetErrorNotSupported: - log__->Error("unsupported client, version: " + std::string(receiver_request->header.api_version)); - break; + case NetworkErrorCode::kNetErrorWrongRequest: + log__->Error("wrong request, code:" + std::to_string(receiver_request->header.op_code)); + break; + case NetworkErrorCode::kNetErrorNotSupported: + log__->Error("unsupported client, version: " + std::string(receiver_request->header.api_version)); + break; }; } diff --git a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h index 952cb1cb78e83b6c92ecd142e7f6761a6b086a44..71d63ad22d01a4e19d3004938cf456ad6ba1a8d7 100644 --- a/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h +++ b/receiver/src/receiver_data_server/request_handler/receiver_data_server_request_handler.h @@ -24,12 +24,12 @@ class ReceiverDataServerRequestHandler: public RequestHandler { private: RdsNetServer* server_; DataCache* data_cache_; - bool CheckRequest(const ReceiverDataServerRequest* request,NetworkErrorCode* code); + bool CheckRequest(const ReceiverDataServerRequest* request, NetworkErrorCode* code); Error SendResponse(const ReceiverDataServerRequest* request, NetworkErrorCode code); Error SendResponseAndSlotData(const ReceiverDataServerRequest* request, const CacheMeta* meta); CacheMeta* GetSlotAndLock(const ReceiverDataServerRequest* request); - void HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request,NetworkErrorCode code); + void HandleInvalidRequest(const ReceiverDataServerRequest* receiver_request, NetworkErrorCode code); void HandleValidRequest(const ReceiverDataServerRequest* receiver_request, const CacheMeta* meta); }; diff --git a/receiver/src/request_handler/request_factory.cpp b/receiver/src/request_handler/request_factory.cpp index 847411057b8af8024381d82aa014eead0f046158..4279f485adb563261fd899f9d32cf5fbdeee89db 100644 --- a/receiver/src/request_handler/request_factory.cpp +++ b/receiver/src/request_handler/request_factory.cpp @@ -4,21 +4,21 @@ namespace asapo { -bool NeedFileWriteHandler(const GenericRequestHeader &request_header) { +bool NeedFileWriteHandler(const GenericRequestHeader& request_header) { return request_header.custom_data[kPosIngestMode] & IngestModeFlags::kStoreInFilesystem; } -bool NeedDbHandler(const GenericRequestHeader &request_header) { +bool NeedDbHandler(const GenericRequestHeader& request_header) { return (request_header.custom_data[kPosIngestMode] & IngestModeFlags::kStoreInDatabase) || - (request_header.custom_data[kPosIngestMode] == asapo::IngestModeFlags::kTransferMetaDataOnly); + (request_header.custom_data[kPosIngestMode] == asapo::IngestModeFlags::kTransferMetaDataOnly); } -bool RequestFactory::ReceiveDirectToFile(const GenericRequestHeader &request_header) const { +bool RequestFactory::ReceiveDirectToFile(const GenericRequestHeader& request_header) const { return request_header.data_size > GetReceiverConfig()->receive_to_disk_threshold_mb * 1024 * 1024; } -Error RequestFactory::AddReceiveWriteHandlers(std::unique_ptr<Request> &request, - const GenericRequestHeader &request_header) const { +Error RequestFactory::AddReceiveWriteHandlers(std::unique_ptr<Request>& request, + const GenericRequestHeader& request_header) const { if (ReceiveDirectToFile(request_header)) { return AddReceiveDirectToFileHandler(request, request_header); } else { @@ -27,82 +27,83 @@ Error RequestFactory::AddReceiveWriteHandlers(std::unique_ptr<Request> &request, } } -void RequestFactory::AddReceiveViaBufferHandlers(std::unique_ptr<Request> &request, - const GenericRequestHeader &request_header) const { +void RequestFactory::AddReceiveViaBufferHandlers(std::unique_ptr<Request>& request, + const GenericRequestHeader& request_header) const { request->AddHandler(&request_handler_receivedata_); if (NeedFileWriteHandler(request_header)) { request->AddHandler(&request_handler_filewrite_); } } -Error RequestFactory::AddReceiveDirectToFileHandler(std::unique_ptr<Request> &request, - const GenericRequestHeader &request_header) const { +Error RequestFactory::AddReceiveDirectToFileHandler(std::unique_ptr<Request>& request, + const GenericRequestHeader& request_header) const { if (!(request_header.custom_data[kPosIngestMode] & kStoreInFilesystem)) { return ReceiverErrorTemplates::kBadRequest.Generate( - "ingest mode should include kStoreInFilesystem for large files "); + "ingest mode should include kStoreInFilesystem for large files "); } request->AddHandler(&request_handler_filereceive_); return nullptr; } -Error RequestFactory::AddHandlersToRequest(std::unique_ptr<Request> &request, - const GenericRequestHeader &request_header) const { +Error RequestFactory::AddHandlersToRequest(std::unique_ptr<Request>& request, + const GenericRequestHeader& request_header) const { if (request_header.op_code != Opcode::kOpcodeAuthorize) { request->AddHandler(&request_handler_authorize_); } switch (request_header.op_code) { - case Opcode::kOpcodeTransferData: - case Opcode::kOpcodeTransferDatasetData: { - request->AddHandler(&request_handler_receive_metadata_); - auto err = AddReceiveWriteHandlers(request, request_header); - if (err) { - return err; - } - if (NeedDbHandler(request_header)) { - request->AddHandler(&request_handler_dbwrite_); - } - break; + case Opcode::kOpcodeTransferData: + case Opcode::kOpcodeTransferDatasetData: { + request->AddHandler(&request_handler_receive_metadata_); + auto err = AddReceiveWriteHandlers(request, request_header); + if (err) { + return err; } - case Opcode::kOpcodeTransferMetaData: { - if (NeedDbHandler(request_header)) { - request->AddHandler(&request_handler_receivedata_); - request->AddHandler(&request_handler_db_meta_write_); - } else { - return ReceiverErrorTemplates::kInternalServerError.Generate( - "reciever does not support writing to database"); - } - break; + if (NeedDbHandler(request_header)) { + request->AddHandler(&request_handler_dbwrite_); } - case Opcode::kOpcodeAuthorize: { - request->AddHandler(&request_handler_receive_metadata_); - request->AddHandler(&request_handler_authorize_); - break; - } - case Opcode::kOpcodeStreamInfo: { - request->AddHandler(&request_handler_db_stream_info_); - break; - } - case Opcode::kOpcodeDeleteStream: { - request->AddHandler(&request_handler_delete_stream_); - break; - } - case Opcode::kOpcodeLastStream: { - request->AddHandler(&request_handler_db_last_stream_); - break; + break; + } + case Opcode::kOpcodeTransferMetaData: { + if (NeedDbHandler(request_header)) { + request->AddHandler(&request_handler_receivedata_); + request->AddHandler(&request_handler_db_meta_write_); + } else { + return ReceiverErrorTemplates::kInternalServerError.Generate( + "reciever does not support writing to database"); } - default:return ReceiverErrorTemplates::kInvalidOpCode.Generate(); + break; + } + case Opcode::kOpcodeAuthorize: { + request->AddHandler(&request_handler_receive_metadata_); + request->AddHandler(&request_handler_authorize_); + break; + } + case Opcode::kOpcodeStreamInfo: { + request->AddHandler(&request_handler_db_stream_info_); + break; + } + case Opcode::kOpcodeDeleteStream: { + request->AddHandler(&request_handler_delete_stream_); + break; + } + case Opcode::kOpcodeLastStream: { + request->AddHandler(&request_handler_db_last_stream_); + break; + } + default: + return ReceiverErrorTemplates::kInvalidOpCode.Generate(); } return nullptr; } -std::unique_ptr<Request> RequestFactory::GenerateRequest(const GenericRequestHeader & -request_header, SocketDescriptor socket_fd, std::string origin_uri, - Error* err) const noexcept { - auto request = std::unique_ptr<Request>{new Request{request_header, socket_fd, std::move(origin_uri), cache_.get(), - &request_handler_db_check_} +std::unique_ptr<Request> RequestFactory::GenerateRequest(const GenericRequestHeader& + request_header, SocketDescriptor socket_fd, std::string origin_uri, + Error* err) const noexcept { + auto request = std::unique_ptr<Request> {new Request{request_header, socket_fd, std::move(origin_uri), cache_.get(), + &request_handler_db_check_} }; *err = AddHandlersToRequest(request, request_header); if (*err) { diff --git a/receiver/src/request_handler/request_handler_authorize.cpp b/receiver/src/request_handler/request_handler_authorize.cpp index e7e433d59f623ac2bed20eb71b9dc8a96ad4366f..d171bebca59cf3ec98ff178b2f33c8bf192a13cd 100644 --- a/receiver/src/request_handler/request_handler_authorize.cpp +++ b/receiver/src/request_handler/request_handler_authorize.cpp @@ -16,12 +16,14 @@ std::string RequestHandlerAuthorize::GetRequestString(const Request* request, co return request_string; } -Error RequestHandlerAuthorize::ErrorFromAuthorizationServerResponse(const Error& err, const std::string response,HttpCode code) const { +Error RequestHandlerAuthorize::ErrorFromAuthorizationServerResponse(const Error& err, const std::string response, + HttpCode code) const { if (err) { return asapo::ReceiverErrorTemplates::kInternalServerError.Generate("cannot authorize request: " + err->Explain()); } else { if (code != HttpCode::Unauthorized) { - return asapo::ReceiverErrorTemplates::kInternalServerError.Generate(response+" return code " + std::to_string(int(code))); + return asapo::ReceiverErrorTemplates::kInternalServerError.Generate(response + " return code " + std::to_string(int( + code))); } return asapo::ReceiverErrorTemplates::kAuthorizationFailure.Generate(response); } @@ -44,7 +46,7 @@ Error RequestHandlerAuthorize::Authorize(Request* request, const char* source_cr auto response = http_client__->Post(GetReceiverConfig()->authorization_server + "/authorize", "", request_string, &code, &err); if (err || code != HttpCode::OK) { - auto auth_error = ErrorFromAuthorizationServerResponse(err,response, code); + auto auth_error = ErrorFromAuthorizationServerResponse(err, response, code); log__->Error("failure authorizing at " + GetReceiverConfig()->authorization_server + " request: " + request_string + " - " + auth_error->Explain()); @@ -64,19 +66,20 @@ Error RequestHandlerAuthorize::Authorize(Request* request, const char* source_cr (err = GetSourceTypeFromString(stype, &source_type_)) || (err = parser.GetString("beamline", &beamline_)); if (err) { - return ErrorFromAuthorizationServerResponse(err,"", code); + return ErrorFromAuthorizationServerResponse(err, "", code); } err = CheckAccessType(access_types); if (err) { log__->Error("failure authorizing at " + GetReceiverConfig()->authorization_server + " request: " + request_string + - " - " + - err->Explain()); + " - " + + err->Explain()); return err; } - log__->Debug(std::string("authorized connection from ") + request->GetOriginUri() +"source type: "+stype+ " beamline: " + - beamline_ + ", beamtime id: " + beamtime_id_ + ", data soucre: " + data_source_); + log__->Debug(std::string("authorized connection from ") + request->GetOriginUri() + "source type: " + stype + + " beamline: " + + beamline_ + ", beamtime id: " + beamtime_id_ + ", data soucre: " + data_source_); last_updated_ = system_clock::now(); cached_source_credentials_ = source_credentials; @@ -88,7 +91,7 @@ Error RequestHandlerAuthorize::CheckVersion(const std::string& version_from_clie int verClient = VersionToNumber(version_from_client); int verService = VersionToNumber(GetReceiverApiVersion()); if (verClient > verService) { - auto err_string = "client version: "+version_from_client + ", server version: "+GetReceiverApiVersion(); + auto err_string = "client version: " + version_from_client + ", server version: " + GetReceiverApiVersion(); return asapo::ReceiverErrorTemplates::kUnsupportedClient.Generate(err_string); log__->Error("failure serving client - unsupported version, " + err_string); } diff --git a/receiver/src/request_handler/request_handler_db_last_stream.cpp b/receiver/src/request_handler/request_handler_db_last_stream.cpp index 7e31468f565b0306b0334cc18420b43ba797f6d5..fbe5b8035b64d203bcef4f70c58f3311a5cd9916 100644 --- a/receiver/src/request_handler/request_handler_db_last_stream.cpp +++ b/receiver/src/request_handler/request_handler_db_last_stream.cpp @@ -19,7 +19,7 @@ Error RequestHandlerDbLastStream::ProcessRequest(Request* request) const { auto err = db_client__->GetLastStream(&info); if (!err) { log__->Debug(std::string{"get last stream "} + " in " + - db_name_ + " at " + GetReceiverConfig()->database_uri); + db_name_ + " at " + GetReceiverConfig()->database_uri); request->SetResponseMessage(info.Json(), ResponseMessageType::kInfo); } return err; diff --git a/receiver/src/request_handler/request_handler_db_last_stream.h b/receiver/src/request_handler/request_handler_db_last_stream.h index 7673ed58f8419712d7777e4ab226ca556cafc29b..f16a38024ceab509b27fc9e182d57971b01edc92 100644 --- a/receiver/src/request_handler/request_handler_db_last_stream.h +++ b/receiver/src/request_handler/request_handler_db_last_stream.h @@ -7,9 +7,9 @@ namespace asapo { class RequestHandlerDbLastStream final : public RequestHandlerDb { - public: - RequestHandlerDbLastStream(std::string collection_name_prefix); - Error ProcessRequest(Request* request) const override; + public: + RequestHandlerDbLastStream(std::string collection_name_prefix); + Error ProcessRequest(Request* request) const override; }; } diff --git a/receiver/src/request_handler/request_handler_delete_stream.cpp b/receiver/src/request_handler/request_handler_delete_stream.cpp index 42719ff49899275d3bd364e322d13e8f0172c482..3f58f002f69724cd38908d6da2736ed55c6a4281 100644 --- a/receiver/src/request_handler/request_handler_delete_stream.cpp +++ b/receiver/src/request_handler/request_handler_delete_stream.cpp @@ -5,7 +5,7 @@ namespace asapo { RequestHandlerDeleteStream::RequestHandlerDeleteStream(std::string collection_name_prefix) : RequestHandlerDb( - std::move(collection_name_prefix)) { + std::move(collection_name_prefix)) { } Error RequestHandlerDeleteStream::ProcessRequest(Request* request) const { @@ -20,7 +20,7 @@ Error RequestHandlerDeleteStream::ProcessRequest(Request* request) const { if (!options.delete_meta) { log__->Debug(std::string{"skipped deleting stream meta in "} + stream_name + " in " + - db_name_ + " at " + GetReceiverConfig()->database_uri); + db_name_ + " at " + GetReceiverConfig()->database_uri); return nullptr; } auto err = db_client__->DeleteStream(stream_name); @@ -32,7 +32,7 @@ Error RequestHandlerDeleteStream::ProcessRequest(Request* request) const { if (no_error) { log__->Debug(std::string{"deleted stream meta in "} + stream_name + " in " + - db_name_ + " at " + GetReceiverConfig()->database_uri); + db_name_ + " at " + GetReceiverConfig()->database_uri); return nullptr; } diff --git a/receiver/src/request_handler/request_handler_delete_stream.h b/receiver/src/request_handler/request_handler_delete_stream.h index 3cf4e0fb0a46dd399c0e4dc4f23e2087c5f96790..a9550da652a7969fe59c0487d01c2ae98ea73c0d 100644 --- a/receiver/src/request_handler/request_handler_delete_stream.h +++ b/receiver/src/request_handler/request_handler_delete_stream.h @@ -7,9 +7,9 @@ namespace asapo { class RequestHandlerDeleteStream final: public RequestHandlerDb { - public: - RequestHandlerDeleteStream(std::string collection_name_prefix); - Error ProcessRequest(Request* request) const override; + public: + RequestHandlerDeleteStream(std::string collection_name_prefix); + Error ProcessRequest(Request* request) const override; }; } diff --git a/receiver/src/request_handler/requests_dispatcher.cpp b/receiver/src/request_handler/requests_dispatcher.cpp index 79d414af2535316d025c13d9c4cdca127ddb05b9..8d455393a5685e4352152b4f296dc05ab84e303c 100644 --- a/receiver/src/request_handler/requests_dispatcher.cpp +++ b/receiver/src/request_handler/requests_dispatcher.cpp @@ -22,7 +22,8 @@ NetworkErrorCode GetNetworkCodeFromError(const Error& err) { return NetworkErrorCode::kNetErrorNotSupported; } else if (err == ReceiverErrorTemplates::kReAuthorizationFailure) { return NetworkErrorCode::kNetErrorReauthorize; - } else if (err == DBErrorTemplates::kJsonParseError || err == ReceiverErrorTemplates::kBadRequest || err == DBErrorTemplates::kNoRecord) { + } else if (err == DBErrorTemplates::kJsonParseError || err == ReceiverErrorTemplates::kBadRequest + || err == DBErrorTemplates::kNoRecord) { return NetworkErrorCode::kNetErrorWrongRequest; } else { return NetworkErrorCode::kNetErrorInternalServerError; diff --git a/receiver/unittests/file_processors/test_file_processor.cpp b/receiver/unittests/file_processors/test_file_processor.cpp index e238dfc52f8f7caacc01bc5a84f6ee43dc45d28e..992d9dd5d7e7fe1ca756730a5ff15c862be75b69 100644 --- a/receiver/unittests/file_processors/test_file_processor.cpp +++ b/receiver/unittests/file_processors/test_file_processor.cpp @@ -48,7 +48,7 @@ class FileProcessorTests : public Test { NiceMock<asapo::MockLogger> mock_logger; std::string expected_offline_path = "offline"; std::string expected_online_path = "online"; - void MockRequestData(std::string fname,asapo::SourceType type); + void MockRequestData(std::string fname, asapo::SourceType type); void SetUp() override { GenericRequestHeader request_header; request_header.data_id = 2; @@ -61,14 +61,14 @@ class FileProcessorTests : public Test { }; -void FileProcessorTests::MockRequestData(std::string fname,asapo::SourceType type) { +void FileProcessorTests::MockRequestData(std::string fname, asapo::SourceType type) { if (type == asapo::SourceType::kProcessed) { - EXPECT_CALL(*mock_request, GetOfflinePath()) - .WillRepeatedly(ReturnRef(expected_offline_path)); + EXPECT_CALL(*mock_request, GetOfflinePath()) + .WillRepeatedly(ReturnRef(expected_offline_path)); } else { EXPECT_CALL(*mock_request, GetOnlinePath()) - .WillRepeatedly(ReturnRef(expected_online_path)); + .WillRepeatedly(ReturnRef(expected_online_path)); } EXPECT_CALL(*mock_request, GetSourceType()).WillRepeatedly(Return(type)); @@ -87,25 +87,25 @@ std::string repl_sep(const std::string& orig) { TEST_F(FileProcessorTests, RawWriteToRaw) { struct Test { - asapo::SourceType type; - std::string filename; - bool error; - std::string res; + asapo::SourceType type; + std::string filename; + bool error; + std::string res; }; std::vector<Test> tests = { - Test{asapo::SourceType::kProcessed,repl_sep("processed/bla.text"),false,expected_offline_path}, - Test{asapo::SourceType::kProcessed,repl_sep("raw/bla.text"),true,""}, - Test{asapo::SourceType::kProcessed,repl_sep("processed/../bla.text"),true,""}, - Test{asapo::SourceType::kProcessed,repl_sep("bla/bla.text"),true,""}, - Test{asapo::SourceType::kProcessed,repl_sep("bla.text"),true,""}, - Test{asapo::SourceType::kProcessed,repl_sep("./bla.text"),true,""}, - Test{asapo::SourceType::kRaw,repl_sep("raw/bla.text"),false,expected_online_path}, + Test{asapo::SourceType::kProcessed, repl_sep("processed/bla.text"), false, expected_offline_path}, + Test{asapo::SourceType::kProcessed, repl_sep("raw/bla.text"), true, ""}, + Test{asapo::SourceType::kProcessed, repl_sep("processed/../bla.text"), true, ""}, + Test{asapo::SourceType::kProcessed, repl_sep("bla/bla.text"), true, ""}, + Test{asapo::SourceType::kProcessed, repl_sep("bla.text"), true, ""}, + Test{asapo::SourceType::kProcessed, repl_sep("./bla.text"), true, ""}, + Test{asapo::SourceType::kRaw, repl_sep("raw/bla.text"), false, expected_online_path}, }; - for (auto& test: tests) { - MockRequestData(test.filename,test.type); + for (auto& test : tests) { + MockRequestData(test.filename, test.type); std::string res; - auto err = GetRootFolder(mock_request.get(),&res); + auto err = GetRootFolder(mock_request.get(), &res); if (test.error) { ASSERT_THAT(err, Eq(asapo::ReceiverErrorTemplates::kBadRequest)); } else { diff --git a/receiver/unittests/file_processors/test_receive_file_processor.cpp b/receiver/unittests/file_processors/test_receive_file_processor.cpp index 132770032cce65f98dffcbb371a33356f9b87ea0..66c7eec1bdc12fd1fe23f6a607b3f5f4279e7c3f 100644 --- a/receiver/unittests/file_processors/test_receive_file_processor.cpp +++ b/receiver/unittests/file_processors/test_receive_file_processor.cpp @@ -54,7 +54,7 @@ class ReceiveFileProcessorTests : public Test { std::unique_ptr<MockRequest> mock_request; NiceMock<asapo::MockLogger> mock_logger; SocketDescriptor expected_socket_id = SocketDescriptor{1}; - std::string expected_file_name = std::string("processed")+asapo::kPathSeparator+std::string("2"); + std::string expected_file_name = std::string("processed") + asapo::kPathSeparator + std::string("2"); std::string expected_beamtime_id = "beamtime_id"; std::string expected_beamline = "beamline"; std::string expected_facility = "facility"; @@ -99,7 +99,7 @@ void ReceiveFileProcessorTests::MockRequestData() { .WillRepeatedly(ReturnRef(expected_full_path)); EXPECT_CALL(*mock_request, GetSourceType()).Times(2) - .WillRepeatedly(Return(expected_source_type)); + .WillRepeatedly(Return(expected_source_type)); EXPECT_CALL(*mock_request, GetFileName()).Times(2) diff --git a/receiver/unittests/file_processors/test_write_file_processor.cpp b/receiver/unittests/file_processors/test_write_file_processor.cpp index 83aecae0b8a77cc63daf9b79c2b056ca55dfb092..a4df078b7872ba9d347c84d4e0455ca10f71a3f8 100644 --- a/receiver/unittests/file_processors/test_write_file_processor.cpp +++ b/receiver/unittests/file_processors/test_write_file_processor.cpp @@ -53,7 +53,7 @@ class WriteFileProcessorTests : public Test { NiceMock<MockIO> mock_io; std::unique_ptr<MockRequest> mock_request; NiceMock<asapo::MockLogger> mock_logger; - std::string expected_file_name = std::string("raw")+asapo::kPathSeparator+std::string("2"); + std::string expected_file_name = std::string("raw") + asapo::kPathSeparator + std::string("2"); asapo::SourceType expected_source_type = asapo::SourceType::kRaw; std::string expected_beamtime_id = "beamtime_id"; std::string expected_beamline = "beamline"; @@ -104,11 +104,11 @@ void WriteFileProcessorTests::MockRequestData(int times) { EXPECT_CALL(*mock_request, GetOnlinePath()).Times(times) .WillRepeatedly(ReturnRef(expected_full_path)); - EXPECT_CALL(*mock_request, GetSourceType()).Times(times*2) - .WillRepeatedly(Return(expected_source_type)); + EXPECT_CALL(*mock_request, GetSourceType()).Times(times * 2) + .WillRepeatedly(Return(expected_source_type)); - EXPECT_CALL(*mock_request, GetFileName()).Times(times*2) + EXPECT_CALL(*mock_request, GetFileName()).Times(times * 2) .WillRepeatedly(Return(expected_file_name)); } diff --git a/receiver/unittests/mock_receiver_config.cpp b/receiver/unittests/mock_receiver_config.cpp index 17e236cbdd665969a80682f1e62e50e49e987430..5577cbe9ca26d5242e7d0c5294792988ed64bc19 100644 --- a/receiver/unittests/mock_receiver_config.cpp +++ b/receiver/unittests/mock_receiver_config.cpp @@ -44,7 +44,7 @@ Error SetReceiverConfig (const ReceiverConfig& config, std::string error_field) auto config_string = std::string("{") + Key("PerformanceDbServer", error_field) + "\"" + config.performance_db_uri + "\""; config_string += "," + Key("PerformanceDbName", error_field) + "\"" + config.performance_db_name + "\""; - config_string += "," + Key("MonitorPerformance", error_field) + (config.monitor_performance?"true":"false"); + config_string += "," + Key("MonitorPerformance", error_field) + (config.monitor_performance ? "true" : "false"); config_string += "," + Key("DatabaseServer", error_field) + "\"" + config.database_uri + "\""; config_string += "," + Key("DiscoveryServer", error_field) + "\"" + config.discovery_server + "\""; config_string += "," + Key("ListenPort", error_field) + std::to_string(config.listen_port); diff --git a/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp b/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp index e5c495b00a1d7b9c8663f7fd48be97487c95aadc..fb85f18e56798d664529c1223ad59e39dce1c61d 100644 --- a/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp +++ b/receiver/unittests/receiver_data_server/request_handler/test_request_handler.cpp @@ -123,7 +123,7 @@ TEST_F(RequestHandlerTests, ProcessRequest_WrongOpCode) { } TEST_F(RequestHandlerTests, ProcessRequest_WrongClientVersion) { - strcpy(request.header.api_version,"v0.2"); + strcpy(request.header.api_version, "v0.2"); MockSendResponse(asapo::kNetErrorNotSupported, false); EXPECT_CALL(mock_net, HandleAfterError_t(expected_source_id)); diff --git a/receiver/unittests/request_handler/test_request_factory.cpp b/receiver/unittests/request_handler/test_request_factory.cpp index b9b8418e0d3591acf378b2f2704f54678789a1b3..718ddd901b5e6da20f8591d9dc6b15e444e96b57 100644 --- a/receiver/unittests/request_handler/test_request_factory.cpp +++ b/receiver/unittests/request_handler/test_request_factory.cpp @@ -135,7 +135,8 @@ TEST_F(FactoryTests, DoNotAddDiskAndDbWriterIfNotWantedInRequest) { } TEST_F(FactoryTests, DoNotAddDbWriterIfNotWanted) { - generic_request_header.custom_data[asapo::kPosIngestMode] = asapo::IngestModeFlags::kTransferData | asapo::IngestModeFlags::kStoreInFilesystem; + generic_request_header.custom_data[asapo::kPosIngestMode] = asapo::IngestModeFlags::kTransferData | + asapo::IngestModeFlags::kStoreInFilesystem; SetReceiverConfig(config, "none"); @@ -171,7 +172,8 @@ TEST_F(FactoryTests, ReturnsMetaDataRequestOnTransferMetaDataOnly) { } TEST_F(FactoryTests, ReturnsMetaDataRequestOnkOpcodeTransferMetaData) { - generic_request_header.custom_data[asapo::kPosIngestMode] = asapo::IngestModeFlags::kTransferData | asapo::IngestModeFlags::kStoreInDatabase; + generic_request_header.custom_data[asapo::kPosIngestMode] = asapo::IngestModeFlags::kTransferData | + asapo::IngestModeFlags::kStoreInDatabase; generic_request_header.op_code = asapo::Opcode::kOpcodeTransferMetaData; auto request = factory.GenerateRequest(generic_request_header, 1, origin_uri, &err); diff --git a/receiver/unittests/request_handler/test_request_handler_authorizer.cpp b/receiver/unittests/request_handler/test_request_handler_authorizer.cpp index dc15c7d3231d03b66f204817047c7ed4fd900245..b4488cd47942e5c72b89604b6537752e6d78fa0b 100644 --- a/receiver/unittests/request_handler/test_request_handler_authorizer.cpp +++ b/receiver/unittests/request_handler/test_request_handler_authorizer.cpp @@ -80,7 +80,7 @@ class AuthorizerHandlerTests : public Test { void MockRequestData(); void SetUp() override { GenericRequestHeader request_header; - expected_source_credentials = "processed%"+expected_beamtime_id + "%source%token"; + expected_source_credentials = "processed%" + expected_beamtime_id + "%source%token"; expect_request_string = std::string("{\"SourceCredentials\":\"") + expected_source_credentials + "\",\"OriginHost\":\"" + expected_producer_uri + "\"}"; @@ -128,7 +128,7 @@ class AuthorizerHandlerTests : public Test { HasSubstr(expected_data_source), HasSubstr(expected_producer_uri), HasSubstr(expected_authorization_server)))); - } else if (expected_access_type_str=="[\"write\"]") { + } else if (expected_access_type_str == "[\"write\"]") { EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("authorized"), HasSubstr(expected_beamtime_id), HasSubstr(expected_beamline), @@ -151,8 +151,8 @@ class AuthorizerHandlerTests : public Test { ; EXPECT_CALL(*mock_request, GetApiVersion()) - .WillOnce(Return(expected_api_version)) - ; + .WillOnce(Return(expected_api_version)) + ; MockAuthRequest(error, code); @@ -274,11 +274,11 @@ TEST_F(AuthorizerHandlerTests, RequestAuthorizeReturnsDifferentBeamtimeId) { TEST_F(AuthorizerHandlerTests, RequestFromUnsupportedClient) { EXPECT_CALL(*mock_request, GetOpCode()) - .WillOnce(Return(asapo::kOpcodeAuthorize)) - ; + .WillOnce(Return(asapo::kOpcodeAuthorize)) + ; EXPECT_CALL(*mock_request, GetApiVersion()) - .WillOnce(Return("v1000.2")) - ; + .WillOnce(Return("v1000.2")) + ; auto err = handler.ProcessRequest(mock_request.get()); ASSERT_THAT(err, Eq(asapo::ReceiverErrorTemplates::kUnsupportedClient)); diff --git a/receiver/unittests/request_handler/test_request_handler_db_last_stream.cpp b/receiver/unittests/request_handler/test_request_handler_db_last_stream.cpp index 9eb2310cacfa5da4097b788d42f609c19b944e25..7889f95b4702344688259542ba30950d502110ba 100644 --- a/receiver/unittests/request_handler/test_request_handler_db_last_stream.cpp +++ b/receiver/unittests/request_handler/test_request_handler_db_last_stream.cpp @@ -63,14 +63,17 @@ class DbMetaLastStreamTests : public Test { ReceiverConfig config; std::string expected_beamtime_id = "beamtime_id"; std::string expected_data_source = "source"; - std::string info_str = R"({"lastId":10,"name":"stream","timestampCreated":1000000,"timestampLast":2000000,"finished":false,"nextStream":""})"; + std::string info_str = + R"({"lastId":10,"name":"stream","timestampCreated":1000000,"timestampLast":2000000,"finished":false,"nextStream":""})"; asapo::StreamInfo expected_stream_info; void SetUp() override { GenericRequestHeader request_header; expected_stream_info.last_id = 10; expected_stream_info.name = expectedlaststream; - expected_stream_info.timestamp_created = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(1)); - expected_stream_info.timestamp_lastentry = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(2)); + expected_stream_info.timestamp_created = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds( + 1)); + expected_stream_info.timestamp_lastentry = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds( + 2)); request_header.data_id = 0; handler.db_client__ = std::unique_ptr<asapo::Database> {&mock_db}; handler.log__ = &mock_logger; diff --git a/receiver/unittests/request_handler/test_request_handler_db_stream_info.cpp b/receiver/unittests/request_handler/test_request_handler_db_stream_info.cpp index a2828c31eafab387f1f373bc8ffa35e531a75cfa..9c9753598fbd3dc35eea456373dd86a53963fb97 100644 --- a/receiver/unittests/request_handler/test_request_handler_db_stream_info.cpp +++ b/receiver/unittests/request_handler/test_request_handler_db_stream_info.cpp @@ -64,14 +64,17 @@ class DbMetaStreamInfoTests : public Test { ReceiverConfig config; std::string expected_beamtime_id = "beamtime_id"; std::string expected_data_source = "source"; - std::string info_str = R"({"lastId":10,"name":"stream","timestampCreated":1000000,"timestampLast":2000000,"finished":false,"nextStream":""})"; + std::string info_str = + R"({"lastId":10,"name":"stream","timestampCreated":1000000,"timestampLast":2000000,"finished":false,"nextStream":""})"; asapo::StreamInfo expected_stream_info; void SetUp() override { GenericRequestHeader request_header; expected_stream_info.last_id = 10; expected_stream_info.name = expected_stream; - expected_stream_info.timestamp_created = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(1)); - expected_stream_info.timestamp_lastentry = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(2)); + expected_stream_info.timestamp_created = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds( + 1)); + expected_stream_info.timestamp_lastentry = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds( + 2)); request_header.data_id = 0; handler.db_client__ = std::unique_ptr<asapo::Database> {&mock_db}; handler.log__ = &mock_logger; diff --git a/receiver/unittests/request_handler/test_request_handler_db_writer.cpp b/receiver/unittests/request_handler/test_request_handler_db_writer.cpp index 129e704a0cea73acb6e8d19368817a815b383c29..d12f6ef1f4863728cb4a557698ca3eb60a3e2f0d 100644 --- a/receiver/unittests/request_handler/test_request_handler_db_writer.cpp +++ b/receiver/unittests/request_handler/test_request_handler_db_writer.cpp @@ -122,7 +122,7 @@ MATCHER_P(CompareMessageMeta, file, "") { if (arg.id != file.id) return false; if (arg.metadata != file.metadata) return false; - if (arg.timestamp<std::chrono::system_clock::now()-std::chrono::seconds (5)) { + if (arg.timestamp < std::chrono::system_clock::now() - std::chrono::seconds (5)) { return false; } diff --git a/receiver/unittests/request_handler/test_request_handler_delete_stream.cpp b/receiver/unittests/request_handler/test_request_handler_delete_stream.cpp index 277ccdea4003e9dfafa819fc57886c423a772654..94eaf86196578d3b54237ce68e3ed576faaba725 100644 --- a/receiver/unittests/request_handler/test_request_handler_delete_stream.cpp +++ b/receiver/unittests/request_handler/test_request_handler_delete_stream.cpp @@ -66,7 +66,7 @@ class DbMetaDeleteStreamTests : public Test { std::string expected_stream = "stream"; uint64_t expected_custom_data[asapo::kNCustomParams] {0, 0, 0}; - void SetUp() override { + void SetUp() override { GenericRequestHeader request_header; handler.db_client__ = std::unique_ptr<asapo::Database> {&mock_db}; handler.log__ = &mock_logger; @@ -91,24 +91,25 @@ class DbMetaDeleteStreamTests : public Test { HasSubstr(expected_data_source), HasSubstr(expected_stream), HasSubstr(expected_beamtime_id) - ) - ) - ); return; + ) + ) + ); + return; } EXPECT_CALL(mock_db, Connect_t(config.database_uri, expected_beamtime_id + "_" + expected_data_source)). - WillOnce(testing::Return(nullptr)); + WillOnce(testing::Return(nullptr)); EXPECT_CALL(mock_db, DeleteStream_t(expected_stream)). - WillOnce(testing::Return(errorTemplate==nullptr?nullptr:errorTemplate->Generate().release())); + WillOnce(testing::Return(errorTemplate == nullptr ? nullptr : errorTemplate->Generate().release())); if (errorTemplate == nullptr) { EXPECT_CALL(mock_logger, Debug(AllOf(HasSubstr("deleted stream meta"), HasSubstr(config.database_uri), HasSubstr(expected_data_source), HasSubstr(expected_stream), HasSubstr(expected_beamtime_id) - ) - ) - ); + ) + ) + ); } } @@ -118,7 +119,7 @@ class DbMetaDeleteStreamTests : public Test { TEST_F(DbMetaDeleteStreamTests, CallsDeleteOk) { - ExpectDelete(3,nullptr); + ExpectDelete(3, nullptr); auto err = handler.ProcessRequest(mock_request.get()); ASSERT_THAT(err, Eq(nullptr)); @@ -127,7 +128,7 @@ TEST_F(DbMetaDeleteStreamTests, CallsDeleteOk) { TEST_F(DbMetaDeleteStreamTests, CallsDeleteErrorAlreadyExist) { - ExpectDelete(3,&asapo::DBErrorTemplates::kNoRecord); + ExpectDelete(3, &asapo::DBErrorTemplates::kNoRecord); auto err = handler.ProcessRequest(mock_request.get()); ASSERT_THAT(err, Eq(asapo::DBErrorTemplates::kNoRecord)); @@ -135,7 +136,7 @@ TEST_F(DbMetaDeleteStreamTests, CallsDeleteErrorAlreadyExist) { TEST_F(DbMetaDeleteStreamTests, CallsDeleteNoErrorAlreadyExist) { - ExpectDelete(1,&asapo::DBErrorTemplates::kNoRecord); + ExpectDelete(1, &asapo::DBErrorTemplates::kNoRecord); auto err = handler.ProcessRequest(mock_request.get()); ASSERT_THAT(err, Eq(nullptr)); @@ -143,7 +144,7 @@ TEST_F(DbMetaDeleteStreamTests, CallsDeleteNoErrorAlreadyExist) { TEST_F(DbMetaDeleteStreamTests, CallsDeleteNoOp) { - ExpectDelete(0,&asapo::DBErrorTemplates::kNoRecord); + ExpectDelete(0, &asapo::DBErrorTemplates::kNoRecord); auto err = handler.ProcessRequest(mock_request.get()); ASSERT_THAT(err, Eq(nullptr)); diff --git a/receiver/unittests/test_config.cpp b/receiver/unittests/test_config.cpp index 06c7c2ddf1f26860b168618ce6f48c4bfdb3d7c1..40289b3d7d0e189b197a95eed34bdf0d4d6c871d 100644 --- a/receiver/unittests/test_config.cpp +++ b/receiver/unittests/test_config.cpp @@ -106,7 +106,7 @@ TEST_F(ConfigTests, ErrorReadSettings) { std::vector<std::string>fields {"PerformanceDbServer", "ListenPort", "DataServer", "ListenPort", "DataCache", "Use", "SizeGB", "ReservedShare", "DatabaseServer", "Tag", "AuthorizationServer", "AuthorizationInterval", "PerformanceDbName", "LogLevel", - "NThreads", "DiscoveryServer", "AdvertiseURI", "NetworkMode","MonitorPerformance", + "NThreads", "DiscoveryServer", "AdvertiseURI", "NetworkMode", "MonitorPerformance", "ReceiveToDiskThresholdMB"}; for (const auto& field : fields) { auto err = asapo::SetReceiverConfig(test_config, field); diff --git a/tests/automatic/consumer/consumer_api/consumer_api.cpp b/tests/automatic/consumer/consumer_api/consumer_api.cpp index 26230c93279759c59ca9505b5796e5ac2390edd9..9107d44ac36aadc981ca3f08537077c464479e37 100644 --- a/tests/automatic/consumer/consumer_api/consumer_api.cpp +++ b/tests/automatic/consumer/consumer_api/consumer_api.cpp @@ -31,9 +31,9 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str asapo::MessageMeta fi; asapo::Error err; - std::string client,server; + std::string client, server; bool supported; - err = consumer->GetVersionInfo(&client,&server,&supported); + err = consumer->GetVersionInfo(&client, &server, &supported); M_AssertTrue(err == nullptr, "Version OK"); M_AssertTrue(supported, "client supported by server"); M_AssertTrue(!client.empty(), "client version"); @@ -63,7 +63,7 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(fi.name == "2", "GetNext2 filename"); - err = consumer->SetLastReadMarker(group_id, 2,"default"); + err = consumer->SetLastReadMarker(group_id, 2, "default"); M_AssertTrue(err == nullptr, "SetLastReadMarker no error"); @@ -80,7 +80,7 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(err == nullptr, "GetLast2 no error"); - err = consumer->SetLastReadMarker(group_id, 8,"default"); + err = consumer->SetLastReadMarker(group_id, 8, "default"); M_AssertTrue(err == nullptr, "SetLastReadMarker 2 no error"); @@ -100,7 +100,7 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(err == nullptr, "GetCurrentSize 2 no error"); M_AssertTrue(size2 == 5, "GetCurrentSize 2 size"); - err = consumer->ResetLastReadMarker(group_id,"default"); + err = consumer->ResetLastReadMarker(group_id, "default"); M_AssertTrue(err == nullptr, "SetLastReadMarker"); err = consumer->GetNext(group_id, &fi, nullptr, "default"); @@ -112,25 +112,25 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(err == nullptr, "GetNext5 no error"); M_AssertTrue(fi.name == "1", "GetNext5 filename"); - auto messages = consumer->QueryMessages("meta.test = 10","default", &err); + auto messages = consumer->QueryMessages("meta.test = 10", "default", &err); M_AssertTrue(err == nullptr, "query1"); M_AssertTrue(messages.size() == 10, "size of query answer 1"); - messages = consumer->QueryMessages("meta.test = 10 AND name='1'","default", &err); + messages = consumer->QueryMessages("meta.test = 10 AND name='1'", "default", &err); M_AssertTrue(err == nullptr, "query2"); M_AssertTrue(messages.size() == 1, "size of query answer 2"); M_AssertTrue(fi.name == "1", "GetNext5 filename"); - messages = consumer->QueryMessages("meta.test = 11","default", &err); + messages = consumer->QueryMessages("meta.test = 11", "default", &err); M_AssertTrue(err == nullptr, "query3"); M_AssertTrue(messages.size() == 0, "size of query answer 3"); - messages = consumer->QueryMessages("meta.test = 18","default", &err); + messages = consumer->QueryMessages("meta.test = 18", "default", &err); M_AssertTrue(err == nullptr, "query4"); M_AssertTrue(messages.size() == 0, "size of query answer 4"); - messages = consumer->QueryMessages("bla","default", &err); + messages = consumer->QueryMessages("bla", "default", &err); M_AssertTrue(err != nullptr, "query5"); M_AssertTrue(messages.size() == 0, "size of query answer 5"); @@ -148,7 +148,7 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(err == nullptr, "GetNext stream2 no error"); M_AssertTrue(fi.name == "21", "GetNext stream2 filename"); - auto streams = consumer->GetStreamList("",asapo::StreamFilter::kAllStreams,&err); + auto streams = consumer->GetStreamList("", asapo::StreamFilter::kAllStreams, &err); M_AssertTrue(err == nullptr, "GetStreamList no error"); M_AssertTrue(streams.size() == 3, "streams.size"); M_AssertTrue(streams[0].name == "default", "streams0.name"); @@ -166,7 +166,7 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(asapo::NanosecsEpochFromTimePoint(streams[2].timestamp_lastentry) == 2000, "streams2.timestamp lastentry"); // acknowledges - auto id = consumer->GetLastAcknowledgedMessage(group_id,"default", &err); + auto id = consumer->GetLastAcknowledgedMessage(group_id, "default", &err); M_AssertTrue(err == asapo::ConsumerErrorTemplates::kNoData, "last ack default stream no data"); M_AssertTrue(id == 0, "last ack default stream no data id = 0"); @@ -174,13 +174,13 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(err == nullptr, "nacks default stream all"); M_AssertTrue(nacks.size() == 10, "nacks default stream size = 10"); - err = consumer->Acknowledge(group_id, 1,"default"); + err = consumer->Acknowledge(group_id, 1, "default"); M_AssertTrue(err == nullptr, "ack default stream no error"); nacks = consumer->GetUnacknowledgedMessages(group_id, 0, 0, "default", &err); M_AssertTrue(nacks.size() == 9, "nacks default stream size = 9 after ack"); - id = consumer->GetLastAcknowledgedMessage(group_id,"default", &err); + id = consumer->GetLastAcknowledgedMessage(group_id, "default", &err); M_AssertTrue(err == nullptr, "last ack default stream no error"); M_AssertTrue(id == 1, "last ack default stream id = 1"); @@ -191,18 +191,18 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str M_AssertTrue(nacks.size() == 4, "nacks stream1 size = 4 after ack"); // negative acks - consumer->ResetLastReadMarker(group_id,"default"); + consumer->ResetLastReadMarker(group_id, "default"); err = consumer->GetNext(group_id, &fi, nullptr, "default"); M_AssertTrue(err == nullptr, "GetNextNegAckBeforeResend no error"); M_AssertTrue(fi.name == "1", "GetNextNegAckBeforeResend filename"); - err = consumer->NegativeAcknowledge(group_id, 1, 0,"default"); + err = consumer->NegativeAcknowledge(group_id, 1, 0, "default"); M_AssertTrue(err == nullptr, "NegativeAcknowledge no error"); err = consumer->GetNext(group_id, &fi, nullptr, "default"); M_AssertTrue(err == nullptr, "GetNextNegAckWithResend no error"); M_AssertTrue(fi.name == "1", "GetNextNegAckWithResend filename"); // automatic resend - consumer->ResetLastReadMarker(group_id,"default"); + consumer->ResetLastReadMarker(group_id, "default"); consumer->SetResendNacs(true, 0, 1); err = consumer->GetNext(group_id, &fi, nullptr, "default"); M_AssertTrue(err == nullptr, "GetNextBeforeResend no error"); @@ -219,11 +219,11 @@ void TestSingle(const std::unique_ptr<asapo::Consumer>& consumer, const std::str // delete stream - err = consumer->DeleteStream("default",asapo::DeleteStreamOptions{true,true}); + err = consumer->DeleteStream("default", asapo::DeleteStreamOptions{true, true}); M_AssertTrue(err == nullptr, "delete default stream ok"); - err = consumer->DeleteStream("default",asapo::DeleteStreamOptions{true,true}); + err = consumer->DeleteStream("default", asapo::DeleteStreamOptions{true, true}); M_AssertTrue(err == asapo::ConsumerErrorTemplates::kWrongInput, "delete non existing stream error"); - err = consumer->DeleteStream("default",asapo::DeleteStreamOptions{true,false}); + err = consumer->DeleteStream("default", asapo::DeleteStreamOptions{true, false}); M_AssertTrue(err == nullptr, "delete non existing stream ok"); } @@ -317,11 +317,11 @@ void TestDataset(const std::unique_ptr<asapo::Consumer>& consumer, const std::st void TestAll(const Args& args) { asapo::Error err; auto consumer = asapo::ConsumerFactory::CreateConsumer(args.server, - ".", - true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - args.run_name, "", "", args.token}, - &err); + ".", + true, + asapo::SourceCredentials{asapo::SourceType::kProcessed, + args.run_name, "", "", args.token}, + &err); if (err) { std::cout << "Error CreateConsumer: " << err << std::endl; exit(EXIT_FAILURE); diff --git a/tests/automatic/consumer/next_multithread_broker/next_multithread_broker.cpp b/tests/automatic/consumer/next_multithread_broker/next_multithread_broker.cpp index d12de6de804c5884d55b371bccb58de80fabe000..4be2fc5524f0fce0163670d4554bad6b780f1b31 100644 --- a/tests/automatic/consumer/next_multithread_broker/next_multithread_broker.cpp +++ b/tests/automatic/consumer/next_multithread_broker/next_multithread_broker.cpp @@ -54,11 +54,11 @@ Args GetArgs(int argc, char* argv[]) { void TestAll(const Args& args) { asapo::Error err; auto consumer = asapo::ConsumerFactory::CreateConsumer(args.server, - "dummy", - true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - args.run_name, "", "", args.token}, - &err); + "dummy", + true, + asapo::SourceCredentials{asapo::SourceType::kProcessed, + args.run_name, "", "", args.token}, + &err); if (err) { std::cout << "Error CreateConsumer: " << err << std::endl; exit(EXIT_FAILURE); diff --git a/tests/automatic/curl_http_client/curl_http_client_command/curl_httpclient_command.cpp b/tests/automatic/curl_http_client/curl_http_client_command/curl_httpclient_command.cpp index c3391d9ab9f63c634420893f615484eacdd7762e..4bf11faac0d5971310434c889c5b627b69fe1b59 100644 --- a/tests/automatic/curl_http_client/curl_http_client_command/curl_httpclient_command.cpp +++ b/tests/automatic/curl_http_client/curl_http_client_command/curl_httpclient_command.cpp @@ -28,23 +28,25 @@ Args GetArgs(int argc, char* argv[]) { int main(int argc, char* argv[]) { auto args = GetArgs(argc, argv); - auto token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjMTkycDFiaXB0MzBub3AwcTNlZyIsInN1YiI6ImJ0X2FhYSIsIkV4dHJhQ2xhaW1zIjp7IkFjY2Vzc1R5cGVzIjpbInJlYWQiXX19.dt3ifrG3zqQP4uM2kaoe7ydDjUdFeasOB07fVRfFApE"; //token for aaa + auto token = + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjMTkycDFiaXB0MzBub3AwcTNlZyIsInN1YiI6ImJ0X2FhYSIsIkV4dHJhQ2xhaW1zIjp7IkFjY2Vzc1R5cGVzIjpbInJlYWQiXX19.dt3ifrG3zqQP4uM2kaoe7ydDjUdFeasOB07fVRfFApE"; //token for aaa std::string authorize_request = "{\"Folder\":\"" + args.folder + "\",\"BeamtimeId\":\"aaa\",\"Token\":\"" + token + "\"}"; asapo::Error err; auto consumer = asapo::ConsumerFactory::CreateConsumer(args.uri_authorizer, - "", - true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, "", "", - "", ""}, - &err); + "", + true, + asapo::SourceCredentials{asapo::SourceType::kProcessed, "", "", + "", ""}, + &err); auto consumer_impl = static_cast<asapo::ConsumerImpl*>(consumer.get()); M_AssertEq(nullptr, err); asapo::HttpCode code; std::string response; std::string input_data; - auto folder_token = consumer_impl->httpclient__->Post(args.uri_authorizer + "/v0.1/folder", "", authorize_request, &code, + auto folder_token = consumer_impl->httpclient__->Post(args.uri_authorizer + "/v0.1/folder", "", authorize_request, + &code, &err); if (err) { std::cout << err->Explain(); diff --git a/tests/automatic/full_chain/send_recv_streams/send_recv_streams.cpp b/tests/automatic/full_chain/send_recv_streams/send_recv_streams.cpp index 7858801dcd1ea3b0ef8a4e53225c42fde5be4f16..94227abe2238fd4dad86b0bf33c354cc7b30e339 100644 --- a/tests/automatic/full_chain/send_recv_streams/send_recv_streams.cpp +++ b/tests/automatic/full_chain/send_recv_streams/send_recv_streams.cpp @@ -36,11 +36,11 @@ void ProcessAfterSend(asapo::RequestCallbackPayload payload, asapo::Error err) { ConsumerPtr CreateConsumerAndGroup(const Args& args, Error* err) { auto consumer = asapo::ConsumerFactory::CreateConsumer(args.server, - ".", - true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - args.beamtime_id, "", "", args.token}, - err); + ".", + true, + asapo::SourceCredentials{asapo::SourceType::kProcessed, + args.beamtime_id, "", "", args.token}, + err); if (*err) { return nullptr; } @@ -61,7 +61,7 @@ ProducerPtr CreateProducer(const Args& args) { auto producer = asapo::Producer::Create(args.server, 1, asapo::RequestHandlerType::kTcp, asapo::SourceCredentials{asapo::SourceType::kProcessed, - args.beamtime_id, "", "", args.token }, 60000, &err); + args.beamtime_id, "", "", args.token }, 60000, &err); if(err) { std::cerr << "Cannot start producer. ProducerError: " << err << std::endl; exit(EXIT_FAILURE); diff --git a/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp b/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp index ac95431b257f15d3cfc9d3279937a7ec042c1fdf..4da3b42cc829861f6e85d76ceb4aa9a9a3344918 100644 --- a/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp +++ b/tests/automatic/mongo_db/insert_retrieve/insert_retrieve_mongodb.cpp @@ -28,7 +28,7 @@ Args GetArgs(int argc, char* argv[]) { std::cout << "Wrong number of arguments" << std::endl; exit(EXIT_FAILURE); } - printf("%s %s",argv[1],argv[2]) ; + printf("%s %s", argv[1], argv[2]) ; return Args{argv[1], atoi(argv[2])}; } @@ -62,9 +62,9 @@ int main(int argc, char* argv[]) { auto fi2 = fi; fi2.id = 123; fi1.timestamp = std::chrono::system_clock::now(); - fi2.timestamp = std::chrono::system_clock::now()+std::chrono::minutes(1); + fi2.timestamp = std::chrono::system_clock::now() + std::chrono::minutes(1); fi2.name = asapo::kFinishStreamKeyword; - fi2.metadata=R"({"next_stream":"ns"})"; + fi2.metadata = R"({"next_stream":"ns"})"; db.Insert("data_test1", fi1, false); db.Insert("data_test1", fi2, false); @@ -92,7 +92,7 @@ int main(int argc, char* argv[]) { M_AssertEq(fi2.id, info.last_id); M_AssertEq("test1", info.name); M_AssertEq(true, info.finished); - M_AssertEq("ns",info.next_stream); + M_AssertEq("ns", info.next_stream); // delete stream db.Insert("inprocess_test_blabla", fi, false); @@ -111,7 +111,7 @@ int main(int argc, char* argv[]) { err = db.GetStreamInfo("acks_test_blabla1", &info); M_AssertTrue(info.last_id == 0); err = db.DeleteStream("test1"); - M_AssertTrue(err==nullptr); + M_AssertTrue(err == nullptr); } return 0; diff --git a/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp b/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp index e5ad6c75713c22c63680d144a4c26f2902e8a122..7e2f8e58042ffe1b34348f9296c9802934bb2bfe 100644 --- a/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp +++ b/tests/automatic/mongo_db/insert_retrieve_dataset/insert_retrieve_dataset_mongodb.cpp @@ -17,8 +17,8 @@ void Assert(const Error& error, const std::string& expect) { } struct Args { - std::string keyword; - int file_id; + std::string keyword; + int file_id; }; Args GetArgs(int argc, char* argv[]) { @@ -62,7 +62,7 @@ int main(int argc, char* argv[]) { if (args.keyword == "OK") { // check retrieve asapo::MessageMeta fi_db; - err = db.GetDataSetById("data_test", fi.dataset_substream,fi.id, &fi_db); + err = db.GetDataSetById("data_test", fi.dataset_substream, fi.id, &fi_db); M_AssertTrue(fi_db == fi, "get record from db"); M_AssertEq(nullptr, err); err = db.GetDataSetById("data_test", 0, 0, &fi_db); @@ -84,9 +84,9 @@ int main(int argc, char* argv[]) { auto fi2 = fi; fi2.id = 123; - fi2.timestamp = std::chrono::system_clock::now()+std::chrono::minutes(1); + fi2.timestamp = std::chrono::system_clock::now() + std::chrono::minutes(1); fi2.name = asapo::kFinishStreamKeyword; - fi2.metadata=R"({"next_stream":"ns"})"; + fi2.metadata = R"({"next_stream":"ns"})"; db.Insert("data_test", fi2, false); err = db.GetLastStream(&info_last); M_AssertEq(nullptr, err); diff --git a/tests/automatic/producer/beamtime_metadata/beamtime_metadata.cpp b/tests/automatic/producer/beamtime_metadata/beamtime_metadata.cpp index dc1c1f1eff961eb3d87f7edbba81922fc1a2b074..65054a791bdf64f41473bae37a08d33b09e9052e 100644 --- a/tests/automatic/producer/beamtime_metadata/beamtime_metadata.cpp +++ b/tests/automatic/producer/beamtime_metadata/beamtime_metadata.cpp @@ -69,7 +69,7 @@ std::unique_ptr<asapo::Producer> CreateProducer(const Args& args) { args.mode == 0 ? asapo::RequestHandlerType::kTcp : asapo::RequestHandlerType::kFilesystem, asapo::SourceCredentials{asapo::SourceType::kProcessed, - args.beamtime_id, "", "", ""}, 60000, &err); + args.beamtime_id, "", "", ""}, 60000, &err); if (err) { std::cerr << "Cannot start producer. ProducerError: " << err << std::endl; exit(EXIT_FAILURE); diff --git a/tests/manual/performance_broker_receiver/getlast_broker.cpp b/tests/manual/performance_broker_receiver/getlast_broker.cpp index f6a3c1a9270c5ec2de4e63a8ecd8345a0e02fa42..56bcd29288453544ba08a69b1751cce9fd4e893f 100644 --- a/tests/manual/performance_broker_receiver/getlast_broker.cpp +++ b/tests/manual/performance_broker_receiver/getlast_broker.cpp @@ -61,9 +61,9 @@ std::vector<std::thread> StartThreads(const Args& params, asapo::MessageMeta fi; Error err; auto consumer = asapo::ConsumerFactory::CreateConsumer(params.server, params.file_path, true, - asapo::SourceCredentials{asapo::SourceType::kProcessed, - params.beamtime_id, "", "", - params.token}, &err); + asapo::SourceCredentials{asapo::SourceType::kProcessed, + params.beamtime_id, "", "", + params.token}, &err); consumer->SetTimeout((uint64_t) params.timeout_ms); asapo::MessageData data; diff --git a/tests/manual/producer_cpp/producer.cpp b/tests/manual/producer_cpp/producer.cpp index 03607b93839e1599617ad19286a76e593734c748..151b055db8b25d01c678bd47a05da9025b8a269b 100644 --- a/tests/manual/producer_cpp/producer.cpp +++ b/tests/manual/producer_cpp/producer.cpp @@ -20,13 +20,12 @@ void exit_if_error(std::string error_string, const asapo::Error& err) { } } -std::string format_string(uint32_t in, std::string format="%05d") -{ +std::string format_string(uint32_t in, std::string format = "%05d") { if(in > 99999) in = 0; char buf[6]; - snprintf(buf,sizeof(buf),format.c_str(),in); + snprintf(buf, sizeof(buf), format.c_str(), in); return std::string(buf); } @@ -41,7 +40,7 @@ int main(int argc, char* argv[]) { if(argc >= 2) submodule = atoi(argv[1]); - if(argc >=3) + if(argc >= 3) sleeptime = atoi(argv[2]); @@ -50,8 +49,8 @@ int main(int argc, char* argv[]) { auto endpoint = "localhost:8400"; // or your endpoint auto beamtime = "asapo_test"; - auto producer = asapo::Producer::Create(endpoint, 1,asapo::RequestHandlerType::kTcp, - asapo::SourceCredentials{asapo::SourceType::kProcessed,beamtime, "", "", ""}, 60000, &err); + auto producer = asapo::Producer::Create(endpoint, 1, asapo::RequestHandlerType::kTcp, + asapo::SourceCredentials{asapo::SourceType::kProcessed, beamtime, "", "", ""}, 60000, &err); exit_if_error("Cannot start producer", err); uint32_t eventid = 1; @@ -63,14 +62,12 @@ int main(int argc, char* argv[]) { // number of modules const uint32_t modules = 3; - while(true) - { - for(uint32_t part=1; part<=number_of_splitted_files; ++part) - { + while(true) { + for(uint32_t part = 1; part <= number_of_splitted_files; ++part) { std::string to_send = "processed/lambdatest_" - + format_string(start_number) // file start number (acquistion id) - + "_part" + format_string(part) // file part id (chunk id) - + "_m" + format_string(submodule, std::string("%02d")); + + format_string(start_number) // file start number (acquistion id) + + "_part" + format_string(part) // file part id (chunk id) + + "_m" + format_string(submodule, std::string("%02d")); auto send_size = to_send.size() + 1; auto buffer = asapo::MessageData(new uint8_t[send_size]); memcpy(buffer.get(), to_send.c_str(), send_size);