1 #pragma once
2 #include "handler_config.hpp"
3 #include "image_mock.hpp"
4 #include "triggerable_mock.hpp"
5 #include "version_handler.hpp"
6 
7 #include <string>
8 
9 namespace ipmi_flash
10 {
11 
createMockVersionConfig(const std::string & id,ImageHandlerMock ** im=nullptr,TriggerMock ** tm=nullptr)12 static HandlerConfig<VersionBlobHandler::ActionPack> createMockVersionConfig(
13     const std::string& id, ImageHandlerMock** im = nullptr,
14     TriggerMock** tm = nullptr)
15 {
16     HandlerConfig<VersionBlobHandler::ActionPack> ret;
17     ret.blobId = id;
18     auto handler = std::make_unique<testing::StrictMock<ImageHandlerMock>>();
19     if (im != nullptr)
20     {
21         *im = handler.get();
22     }
23     ret.handler = std::move(handler);
24     ret.actions = std::make_unique<VersionBlobHandler::ActionPack>();
25     auto trigger = std::make_unique<testing::StrictMock<TriggerMock>>();
26     if (tm != nullptr)
27     {
28         *tm = trigger.get();
29     }
30     ret.actions->onOpen = std::move(trigger);
31     return ret;
32 }
33 
34 template <typename C, typename Im = std::map<std::string, ImageHandlerMock*>,
35           typename Tm = std::map<std::string, TriggerMock*>>
36 static std::vector<HandlerConfig<VersionBlobHandler::ActionPack>>
createMockVersionConfigs(const C & ids,Im * im=nullptr,Tm * tm=nullptr)37     createMockVersionConfigs(const C& ids, Im* im = nullptr, Tm* tm = nullptr)
38 {
39     std::vector<HandlerConfig<VersionBlobHandler::ActionPack>> ret;
40     ret.reserve(ids.size());
41     std::for_each(ids.begin(), ids.end(), [im, tm, &ret](const auto& id) {
42         ret.emplace_back(
43             createMockVersionConfig(id, im == nullptr ? nullptr : &(*im)[id],
44                                     tm == nullptr ? nullptr : &(*tm)[id]));
45     });
46     return ret;
47 }
48 
49 } // namespace ipmi_flash
50