@@ -527,6 +527,45 @@ public void testTriggeredBuildSelector() throws Exception {
527527 assertBuildStatus (Result .SUCCESS , p .scheduleBuild2 (0 , new UserCause ()).get ());
528528 }
529529
530+ public void testTriggeredBuildSelectorWithParentOfParent () throws Exception {
531+ FreeStyleProject grandparent = createArtifactProject (),
532+ parent = createFreeStyleProject (),
533+ p = createFreeStyleProject ();
534+ p .getBuildersList ().add (new CopyArtifact (grandparent .getName (), null ,
535+ new TriggeredBuildSelector (false ), "*.txt" , "" , false , false ));
536+ parent .getPublishersList ().add (new BuildTrigger (p .getFullName (), false ));
537+ grandparent .getPublishersList ().add (new BuildTrigger (parent .getFullName (), false ));
538+ hudson .rebuildDependencyGraph ();
539+ assertBuildStatusSuccess (grandparent .scheduleBuild2 (0 , new UserCause ()));
540+ // parent#1 was triggered
541+ FreeStyleBuild b = parent .getBuildByNumber (1 );
542+ for (int i = 0 ; b == null && i < 2000 ; i ++) { Thread .sleep (10 ); b = p .getBuildByNumber (1 ); }
543+ assertNotNull (b );
544+ while (b .isBuilding ()) Thread .sleep (10 );
545+ assertBuildStatusSuccess (b );
546+ // p#1 was triggered, now building.
547+ b = p .getBuildByNumber (1 );
548+ for (int i = 0 ; b == null && i < 2000 ; i ++) { Thread .sleep (10 ); b = p .getBuildByNumber (1 ); }
549+ assertNotNull (b );
550+ while (b .isBuilding ()) Thread .sleep (10 );
551+ assertBuildStatusSuccess (b );
552+ assertFile (true , "foo.txt" , b );
553+ assertFile (false , "subdir/subfoo.txt" , b );
554+ // Verify error if build not triggered by upstream job:
555+ assertBuildStatus (Result .FAILURE , p .scheduleBuild2 (0 , new UserCause ()).get ());
556+ // test fallback
557+
558+ //run a failing build to make sure the fallback selects the last successful build
559+ grandparent .getPublishersList ().clear ();
560+ grandparent .getBuildersList ().add (new FailureBuilder ());
561+ assertBuildStatus (Result .FAILURE , grandparent .scheduleBuild2 (0 , new UserCause ()).get ());
562+
563+ p .getBuildersList ().remove (CopyArtifact .class );
564+ p .getBuildersList ().add (new CopyArtifact (grandparent .getName (), null ,
565+ new TriggeredBuildSelector (true ), "*.txt" , "" , false , false ));
566+ assertBuildStatus (Result .SUCCESS , p .scheduleBuild2 (0 , new UserCause ()).get ());
567+ }
568+
530569 /**
531570 * When copying from a particular matrix configuration, the upstream project
532571 * is the matrix parent.
0 commit comments