27#include <kcenon/common/di/service_container.h>
74 std::lock_guard<std::mutex> lock(
mutex_);
78 return kcenon::common::make_error<std::monostate>(
79 -1,
"Dataset missing SOP Instance UID",
"MockStorage");
89 return storage::VoidResult::ok({});
93 retrieve(std::string_view sop_instance_uid)
override {
94 std::lock_guard<std::mutex> lock(
mutex_);
96 auto it =
datasets_.find(std::string(sop_instance_uid));
98 return kcenon::common::make_error<core::dicom_dataset>(
99 -1,
"Instance not found",
"MockStorage");
105 [[nodiscard]] storage::VoidResult
remove(std::string_view sop_instance_uid)
override {
106 std::lock_guard<std::mutex> lock(
mutex_);
107 datasets_.erase(std::string(sop_instance_uid));
108 return storage::VoidResult::ok({});
111 [[nodiscard]]
bool exists(std::string_view sop_instance_uid)
const override {
112 std::lock_guard<std::mutex> lock(
mutex_);
118 std::lock_guard<std::mutex> lock(
mutex_);
120 std::vector<core::dicom_dataset> results;
122 results.push_back(dataset);
128 std::lock_guard<std::mutex> lock(
mutex_);
131 stats.total_instances =
datasets_.size();
136 return storage::VoidResult::ok({});
145 std::lock_guard<std::mutex> lock(
mutex_);
151 std::lock_guard<std::mutex> lock(
mutex_);
157 std::lock_guard<std::mutex> lock(
mutex_);
194 std::lock_guard<std::mutex> lock(
mutex_);
203 std::lock_guard<std::mutex> lock(
mutex_);
215 connect(
const std::string& host, uint16_t port,
216 std::chrono::milliseconds )
override {
229 std::lock_guard<std::mutex> lock(
mutex_);
235 std::lock_guard<std::mutex> lock(
mutex_);
241 std::lock_guard<std::mutex> lock(
mutex_);
247 std::lock_guard<std::mutex> lock(
mutex_);
322 [[nodiscard]] std::shared_ptr<kcenon::common::di::service_container>
build() {
323 auto container = std::make_shared<kcenon::common::di::service_container>();
339 [[nodiscard]] std::shared_ptr<MockStorage>
storage()
const {
346 [[nodiscard]] std::shared_ptr<MockNetwork>
network()
const {
364[[nodiscard]]
inline std::shared_ptr<kcenon::common::di::service_container>
379 kcenon::common::di::IServiceContainer& container,
380 std::shared_ptr<MockStorage> mock) {
391 kcenon::common::di::IServiceContainer& container,
392 std::shared_ptr<MockNetwork> mock) {
auto get_string(dicom_tag tag, std::string_view default_value="") const -> std::string
Get the string value of an element.
Network service interface for DICOM communication.
Mock network service for testing.
std::vector< std::pair< std::string, uint16_t > > connection_attempts_
integration::Result< integration::network_adapter::session_ptr > connect(const std::string &host, uint16_t port, std::chrono::milliseconds) override
Connect to a remote DICOM peer (simplified)
std::vector< network::server_config > server_configs_
std::size_t server_creation_count() const
Get server creation count.
void set_fail_connections(bool fail)
Configure connections to fail.
~MockNetwork() override=default
std::unique_ptr< network::dicom_server > create_server(const network::server_config &config, const integration::tls_config &) override
Create a DICOM server.
void clear()
Clear call history.
std::size_t connection_attempt_count() const
Get connection attempt count.
integration::Result< integration::network_adapter::session_ptr > connect(const integration::connection_config &config) override
Connect to a remote DICOM peer.
storage::Result< core::dicom_dataset > retrieve(std::string_view sop_instance_uid) override
Retrieve a DICOM dataset by SOP Instance UID.
storage::VoidResult store(const core::dicom_dataset &dataset) override
Store a DICOM dataset.
void on_store(std::function< void(const core::dicom_dataset &)> callback)
Set callback for store operations (for assertions)
std::vector< std::string > store_calls_
bool exists(std::string_view sop_instance_uid) const override
Check if a DICOM instance exists.
storage::Result< std::vector< core::dicom_dataset > > find(const core::dicom_dataset &) override
Find DICOM datasets matching query criteria.
std::size_t store_count() const
Get the number of store() calls.
void clear()
Clear all stored data and call history.
std::function< void(const core::dicom_dataset &)> on_store_
storage::storage_statistics get_statistics() const override
Get storage statistics.
std::map< std::string, core::dicom_dataset > datasets_
storage::VoidResult verify_integrity() override
Verify storage integrity.
storage::VoidResult remove(std::string_view sop_instance_uid) override
Remove a DICOM dataset by SOP Instance UID.
~MockStorage() override=default
std::vector< std::string > stored_uids() const
Get all stored UIDs in order.
std::shared_ptr< kcenon::common::di::service_container > build()
Build the configured container.
TestContainerBuilder & with_mock_storage()
Create and use a new mock storage.
std::shared_ptr< MockNetwork > mock_network_
TestContainerBuilder & with_network(std::shared_ptr< MockNetwork > network)
Use a specific mock network instance.
TestContainerBuilder & with_mock_network()
Create and use a new mock network.
TestContainerBuilder()=default
std::shared_ptr< MockStorage > mock_storage_
std::shared_ptr< MockNetwork > network() const
Get the mock network instance (for test assertions)
TestContainerBuilder & with_storage(std::shared_ptr< MockStorage > storage)
Use a specific mock storage instance.
std::shared_ptr< MockStorage > storage() const
Get the mock storage instance (for test assertions)
Simple result type for error handling when common_system is unavailable.
std::shared_ptr< dicom_session > session_ptr
Session pointer type.
DICOM Dataset - ordered collection of Data Elements.
Compile-time constants for commonly used DICOM tags.
void register_mock_network(kcenon::common::di::IServiceContainer &container, std::shared_ptr< MockNetwork > mock)
Register mock network with a container.
std::shared_ptr< kcenon::common::di::service_container > create_test_container()
Create a test container with all mock services.
void register_mock_storage(kcenon::common::di::IServiceContainer &container, std::shared_ptr< MockStorage > mock)
Register mock storage with a container.
Service interface aliases for dependency injection.
ServiceContainer registration module for PACS services.
Configuration for client connections.
std::string host
Remote host address.
uint16_t port
Remote port.
Simple error info for fallback when common_system is unavailable.
Configuration for TLS/SSL secure transport.
Storage statistics structure.