RFR: 7903519 : jtreg/jtharness is missing features for basic crash testing

andrlos duke at openjdk.org
Mon Nov 11 18:22:08 UTC 2024


On Wed, 6 Nov 2024 12:37:15 GMT, Christian Stein <cstein at openjdk.org> wrote:

>> provides SPI for enabling external status transformations of failed tests
>> 
>> this is a continuation of efforts after https://github.com/openjdk/jtharness/pull/59 
>> 
>> Requires newest jtharness build (not even tagged yet) that includes above mentioned change to be compiled succesfully
>> 
>> The main idea is to provide a unified StatusTransformer interface, that can be externally implemented by users and added to a classpath in a separate jar to allow modifications of test execution status based on some elementary analysis. This can be easily used for crashtesting (filtering out only tests with jvm crashes).
>
> A test status listener (in the sense of JUnit's [TestWatcher](https://junit.org/junit5/docs/current/user-guide/#extensions-test-result-processing)) would be okay-ish, but a general test status transforming SPI is too intrusive and intransparent ... and also exposing an internal field of `jtharness`'s `Script` class.
> 
> In the light of the above, I tend to close this PR.
> 
> What would an implementation handling "crashtesting" look like? Do you have a draft for it?

@sormuras 	feast your eyes on the code below :D


public class CrashOnlyStatusTransformer implements StatusTransformer {
        @Override
        public Status transform(Status originalStatus, TestDescription td) {
            Status newStatus = originalStatus;
            if(originalStatus.getType() == Status.FAILED && ! this.didCrash(td)){
                newStatus = new Status(Status.PASSED, "Just a regular failure.");
            }
            return newStatus;
        }

        private boolean didCrash(TestDescription td){
            Pattern pattern = Pattern.compile("^hs_err_pid(\\d+)\.log");
            List<String> hs_errs = Arrays.stream(td.getDir().list()).filter(pattern.asPredicate()).collect(Collectors.toList());
            return !hs_errs.isEmpty();
    }
}


this is an approach that we use for crashtesting with debug jdk builds to separate crashes from regular failures

-------------

PR Comment: https://git.openjdk.org/jtreg/pull/235#issuecomment-2468779383


More information about the jtreg-dev mailing list