TEST_F(AnalysisDriverFixture,RuntimeBehavior_StopAndRestartDakotaAnalysis) { // RETRIEVE PROBLEM Problem problem = retrieveProblem("SimpleHistogramBinUQ",true,false); // DEFINE SEED Model model = model::exampleModel(); openstudio::path p = toPath("./example.osm"); model.save(p,true); FileReference seedModel(p); // CREATE ANALYSIS SamplingAlgorithmOptions algOptions; algOptions.setSamples(10); Analysis analysis("Stop and Restart Dakota Analysis", problem, SamplingAlgorithm(algOptions), seedModel); // RUN ANALYSIS if (!dakotaExePath().empty()) { ProjectDatabase database = getCleanDatabase("StopAndRestartDakotaAnalysis"); AnalysisDriver analysisDriver(database); AnalysisRunOptions runOptions = standardRunOptions(analysisDriver.database().path().parent_path()); StopWatcher watcher(analysisDriver); watcher.watch(analysis.uuid()); CurrentAnalysis currentAnalysis = analysisDriver.run(analysis,runOptions); analysisDriver.waitForFinished(); EXPECT_FALSE(analysisDriver.isRunning()); // check conditions afterward boost::optional<runmanager::JobErrors> jobErrors = currentAnalysis.dakotaJobErrors(); ASSERT_TRUE(jobErrors); EXPECT_FALSE(jobErrors->errors().empty()); EXPECT_FALSE(currentAnalysis.analysis().dataPoints().empty()); EXPECT_FALSE(currentAnalysis.analysis().dataPointsToQueue().empty()); EXPECT_FALSE(currentAnalysis.analysis().completeDataPoints().empty()); EXPECT_FALSE(currentAnalysis.analysis().successfulDataPoints().empty()); EXPECT_TRUE(currentAnalysis.analysis().failedDataPoints().empty()); EXPECT_FALSE(currentAnalysis.analysis().algorithm()->isComplete()); EXPECT_FALSE(currentAnalysis.analysis().algorithm()->failed()); EXPECT_EQ(0u,analysisDriver.currentAnalyses().size()); LOG(Debug,"After initial stop, there are " << currentAnalysis.analysis().dataPoints().size() << " data points, of which " << currentAnalysis.analysis().completeDataPoints().size() << " are complete."); // try to restart from database contents Analysis analysis = AnalysisRecord::getAnalysisRecords(database)[0].analysis(); ASSERT_TRUE(analysis.algorithm()); EXPECT_FALSE(analysis.algorithm()->isComplete()); EXPECT_FALSE(analysis.algorithm()->failed()); currentAnalysis = analysisDriver.run(analysis,runOptions); analysisDriver.waitForFinished(); EXPECT_EQ(10u,analysis.dataPoints().size()); EXPECT_EQ(0u,analysis.dataPointsToQueue().size()); EXPECT_EQ(10u,analysis.completeDataPoints().size()); EXPECT_EQ(10u,analysis.successfulDataPoints().size()); EXPECT_EQ(0u,analysis.failedDataPoints().size()); } }