73 testFacility.runApplication();
75 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/initScriptOutput");
79 constexpr auto firstSnippet =
"starting device1 init";
80 constexpr auto secondSnippet =
"device1 init complete";
83 size_t secondSnippetPos;
85 (secondSnippetPos = std::string(initMessage).find(secondSnippet)) != std::string::npos),
88 BOOST_TEST(std::string(initMessage).find(firstSnippet) < secondSnippetPos);
89 std::cout << std::string(initMessage) << std::endl;
91 BOOST_CHECK(std::filesystem::exists(
"device1Init.complete"));
97 testFacility.runApplication();
99 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/initScriptOutput");
101 constexpr auto scriptOutputSnippet =
"device1 init complete";
102 constexpr auto successSnippet =
"SUCCESS";
105 size_t successSnippetPos;
107 (successSnippetPos = std::string(initMessage).find(successSnippet)) != std::string::npos),
110 BOOST_TEST(std::string(initMessage).find(scriptOutputSnippet) < successSnippetPos);
118 std::ofstream blockFile;
119 blockFile.open(
"blockDevice1Init", std::ios::out);
121 testFacility.runApplication();
123 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/initScriptOutput");
125 constexpr auto firstSnippet =
"starting device1 init";
126 constexpr auto secondSnippet =
"device1 init complete";
129 CHECK_TIMEOUT((initMessage.readLatest(), std::string(initMessage).find(firstSnippet) != std::string::npos), 30000);
130 BOOST_TEST(std::string(initMessage).find(secondSnippet) == std::string::npos);
131 BOOST_CHECK(!std::filesystem::exists(
"device1Init.complete"));
134 (void)std::filesystem::remove(
"blockDevice1Init");
137 size_t secondSnippetPos;
139 (secondSnippetPos = std::string(initMessage).find(secondSnippet)) != std::string::npos),
142 BOOST_TEST(std::string(initMessage).find(firstSnippet) < secondSnippetPos);
144 BOOST_CHECK(std::filesystem::exists(
"device1Init.complete"));
150 testFacility.runApplication();
152 constexpr auto script1Snippet =
"device1 init complete";
153 constexpr auto script2Snippet =
"just a second script";
154 constexpr auto successSnippet =
"SUCCESS";
157 auto initMessage1 = testFacility.getScalar<std::string>(
"/Devices/Dummy0/initScriptOutput");
159 (initMessage1.readLatest(), std::string(initMessage1).find(successSnippet) != std::string::npos), 30000);
160 BOOST_TEST(std::string(initMessage1).find(script1Snippet) != std::string::npos);
161 BOOST_TEST(std::string(initMessage1).find(script2Snippet) == std::string::npos);
164 auto initMessage2 = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
166 (initMessage2.readLatest(), std::string(initMessage2).find(successSnippet) != std::string::npos), 30000);
167 BOOST_TEST(std::string(initMessage2).find(script1Snippet) == std::string::npos);
168 BOOST_TEST(std::string(initMessage2).find(script2Snippet) != std::string::npos);
174 std::ofstream produceErrorFile;
175 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
176 produceErrorFile << 0 << std::flush;
178 testFacility.runApplication();
180 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
183 for(
int i = 0; i < 3; ++i) {
184 produceErrorFile.seekp(0);
185 produceErrorFile << i << std::flush;
186 std::string expectedSnippet =
"Simulating error in second script: " + std::to_string(i);
188 (initMessage.readLatest(), std::string(initMessage).find(expectedSnippet) != std::string::npos), 20000);
191 BOOST_TEST(std::string(initMessage).find(
"script: 0") == std::string::npos);
194 BOOST_TEST(std::string(initMessage).find(
"script: 1") == std::string::npos);
199 (void)std::filesystem::remove(
"produceDevice2InitError");
200 CHECK_TIMEOUT(testFacility.readScalar<int32_t>(
"/Devices/Dummy0/status") == 0, 30000);
206 std::ofstream produceErrorFile;
207 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
209 testFacility.runApplication();
211 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
213 std::string scriptSnippet =
"Simulating error in second script:";
214 std::string failSnippet =
"FAILED";
216 size_t failSnippedPos;
218 (initMessage.readLatest(), (failSnippedPos = std::string(initMessage).find(failSnippet)) != std::string::npos),
220 BOOST_TEST(std::string(initMessage).find(scriptSnippet) < failSnippedPos);
223 (void)std::filesystem::remove(
"produceDevice2InitError");
224 CHECK_TIMEOUT(testFacility.readScalar<int32_t>(
"/Devices/Dummy0/status") == 0, 30000);
230 std::ofstream produceErrorFile;
231 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
233 testFacility.runApplication();
235 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
236 std::string failSnippet =
"FAILED";
237 std::string successSnippet =
"SUCCESS";
240 CHECK_TIMEOUT((initMessage.readLatest(), std::string(initMessage).find(failSnippet) != std::string::npos), 20000);
243 (void)std::filesystem::remove(
"produceDevice2InitError");
247 (initMessage.readLatest(), std::string(initMessage).find(successSnippet) != std::string::npos), 20000);
250 BOOST_TEST(std::string(initMessage).find(failSnippet) == std::string::npos);
256 std::ofstream produceErrorFile;
257 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
258 produceErrorFile << 1 << std::flush;
260 testFacility.runApplication();
262 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
264 auto startTime = std::chrono::steady_clock::now();
267 for(
int i = 0; i < 3; ++i) {
268 produceErrorFile.seekp(0);
269 produceErrorFile << i << std::flush;
270 std::string expectedSnippet =
"Simulating error in second script: " + std::to_string(i);
272 (initMessage.readLatest(), std::string(initMessage).find(expectedSnippet) != std::string::npos), 20000);
276 (void)std::filesystem::remove(
"produceDevice2InitError");
277 CHECK_TIMEOUT(testFacility.readScalar<int32_t>(
"/Devices/Dummy0/status") == 0, 30000);
280 auto stopTime = std::chrono::steady_clock::now();
281 BOOST_CHECK(std::chrono::duration_cast<std::chrono::seconds>(stopTime - startTime).count() >= 3);