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);
163 auto initExitCode1 = testFacility.getScalar<
int>(
"/Devices/Dummy0/initScriptExitCode");
165 BOOST_TEST(!initExitCode1.readNonBlocking());
166 BOOST_TEST(initExitCode1 == 0);
169 auto initMessage2 = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
171 (initMessage2.readLatest(), std::string(initMessage2).find(successSnippet) != std::string::npos), 30000);
172 BOOST_TEST(std::string(initMessage2).find(script1Snippet) == std::string::npos);
173 BOOST_TEST(std::string(initMessage2).find(script2Snippet) != std::string::npos);
175 auto initExitCode2 = testFacility.getScalar<
int>(
"/Devices/Dummy0/secondInitScriptExitCode");
177 BOOST_TEST(!initExitCode2.readNonBlocking());
178 BOOST_TEST(initExitCode2 == 0);
184 std::ofstream produceErrorFile;
185 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
186 produceErrorFile << 0 << std::flush;
188 testFacility.runApplication();
190 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
191 auto initExitCode2 = testFacility.getScalar<
int>(
"/Devices/Dummy0/secondInitScriptExitCode");
194 for(
int i = 0; i < 3; ++i) {
195 produceErrorFile.seekp(0);
196 produceErrorFile << i << std::flush;
197 std::string expectedSnippet =
"Simulating error in second script: " + std::to_string(i);
199 (initMessage.readLatest(), std::string(initMessage).find(expectedSnippet) != std::string::npos), 20000);
202 BOOST_TEST(std::string(initMessage).find(
"script: 0") == std::string::npos);
205 BOOST_TEST(std::string(initMessage).find(
"script: 1") == std::string::npos);
209 BOOST_TEST(!initExitCode2.readNonBlocking());
210 BOOST_TEST(initExitCode2 == 42);
214 (void)std::filesystem::remove(
"produceDevice2InitError");
215 CHECK_TIMEOUT(testFacility.readScalar<int32_t>(
"/Devices/Dummy0/status") == 0, 30000);
218 BOOST_TEST(!initExitCode2.readNonBlocking());
219 BOOST_TEST(initExitCode2 == 0);
225 std::ofstream produceErrorFile;
226 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
228 testFacility.runApplication();
230 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
232 std::string scriptSnippet =
"Simulating error in second script:";
233 std::string failSnippet =
"FAILED";
235 size_t failSnippedPos;
237 (initMessage.readLatest(), (failSnippedPos = std::string(initMessage).find(failSnippet)) != std::string::npos),
239 BOOST_TEST(std::string(initMessage).find(scriptSnippet) < failSnippedPos);
242 (void)std::filesystem::remove(
"produceDevice2InitError");
243 CHECK_TIMEOUT(testFacility.readScalar<int32_t>(
"/Devices/Dummy0/status") == 0, 30000);
249 std::ofstream produceErrorFile;
250 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
252 testFacility.runApplication();
254 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
255 std::string failSnippet =
"FAILED";
256 std::string successSnippet =
"SUCCESS";
259 CHECK_TIMEOUT((initMessage.readLatest(), std::string(initMessage).find(failSnippet) != std::string::npos), 20000);
262 (void)std::filesystem::remove(
"produceDevice2InitError");
266 (initMessage.readLatest(), std::string(initMessage).find(successSnippet) != std::string::npos), 20000);
269 BOOST_TEST(std::string(initMessage).find(failSnippet) == std::string::npos);
275 std::ofstream produceErrorFile;
276 produceErrorFile.open(
"produceDevice2InitError", std::ios::out);
277 produceErrorFile << 1 << std::flush;
279 testFacility.runApplication();
281 auto initMessage = testFacility.getScalar<std::string>(
"/Devices/Dummy0/secondInitScriptOutput");
283 auto startTime = std::chrono::steady_clock::now();
286 for(
int i = 0; i < 3; ++i) {
287 produceErrorFile.seekp(0);
288 produceErrorFile << i << std::flush;
289 std::string expectedSnippet =
"Simulating error in second script: " + std::to_string(i);
291 (initMessage.readLatest(), std::string(initMessage).find(expectedSnippet) != std::string::npos), 20000);
295 (void)std::filesystem::remove(
"produceDevice2InitError");
296 CHECK_TIMEOUT(testFacility.readScalar<int32_t>(
"/Devices/Dummy0/status") == 0, 30000);
299 auto stopTime = std::chrono::steady_clock::now();
300 BOOST_CHECK(std::chrono::duration_cast<std::chrono::seconds>(stopTime - startTime).count() >= 3);