11package org .jenkinsci .plugins .workflow .cps ;
22
3+ import hudson .Functions ;
4+ import java .util .logging .Level ;
35import org .jenkinsci .plugins .workflow .job .WorkflowJob ;
6+ import org .jenkinsci .plugins .workflow .job .WorkflowRun ;
7+ import org .junit .Assume ;
48import org .junit .Rule ;
59import org .junit .Test ;
610import org .jvnet .hudson .test .JenkinsRule ;
@@ -21,4 +25,28 @@ private static void doesItSmoke(JenkinsRule r) throws Exception {
2125 p .setDefinition (new CpsFlowDefinition ("print Jenkins.get().getRootDir().toString()" , false ));
2226 r .assertBuildStatusSuccess (p .scheduleBuild2 (0 ));
2327 }
28+
29+ @ Test
30+ public void flushLogsOnShutdown () throws Throwable {
31+ Assume .assumeFalse ("RealJenkinsRule does not shut down Jenkins cleanly on Windows, see https://github.com/jenkinsci/jenkins-test-harness/pull/559" , Functions .isWindows ());
32+ rjr .withLogger (CpsFlowExecution .class , Level .FINER );
33+ rjr .then (CpsFlowDefinitionRJRTest ::flushLogsOnShutdownPreRestart );
34+ rjr .then (CpsFlowDefinitionRJRTest ::flushLogsOnShutdownPostRestart );
35+ }
36+
37+ private static void flushLogsOnShutdownPreRestart (JenkinsRule r ) throws Exception {
38+ WorkflowJob p = r .createProject (WorkflowJob .class , "p" );
39+ p .setDefinition (new CpsFlowDefinition ("sleep 10\n " , true ));
40+ WorkflowRun b = p .scheduleBuild2 (0 ).waitForStart ();
41+ r .waitForMessage ("Sleeping for 10 sec" , b );
42+ r .jenkins .doQuietDown ();
43+ }
44+
45+ private static void flushLogsOnShutdownPostRestart (JenkinsRule r ) throws Exception {
46+ WorkflowJob p = r .jenkins .getItemByFullName ("p" , WorkflowJob .class );
47+ WorkflowRun b = p .getLastBuild ();
48+ r .assertBuildStatusSuccess (r .waitForCompletion (b ));
49+ r .assertLogContains ("Resuming build at " , b );
50+ r .assertLogContains ("Pausing (Preparing for shutdown)" , b );
51+ }
2452}
0 commit comments