RFR(M): JDK-8165805 - [TESTBUG] CDS needs to support JVMTI CFLH - test development

serguei.spitsyn at oracle.com serguei.spitsyn at oracle.com
Wed Sep 14 22:28:56 UTC 2016


Hi Misha,


Looks good in general.


Few comments.

http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformInterfaceAndImplementor.java.html
http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperAndSubClasses.java.html
http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformSuperSubTwoPckgs.java.html

   Perhaps, the java.instrument must be added to the list of @modules.


http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/myPkg1/SuperClazz.java.html

   13         System.out.println("parent-transform-check: this-should-be-transformed");


    Need to use the ParentCheckPattern and BeforePattern.



http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/myPkg2/SubClass.java.html

   18         System.out.println("child-transform-check: this-should-be-transformed");


    Need to use the ChildCheckPattern and BeforePattern.



http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/testlibrary/jvmti/TransformerAgent.java.html

   68             int nrOfReplacements = TransformUtil.replace(buffer, "this-should-be-transformed", "this-has-been--transformed");


    Need to use the BeforePattern and AfterPattern.


http://cr.openjdk.java.net/~mseledtsov/8165805.02/test/runtime/SharedArchiveFile/serviceability/transformRelatedClasses/TransformRelatedClasses.java.html

   96         // Test Table
   97         // testCaseId |  transformParent | tranformChild | isParentExpectedShared | isChildExpectedShared


     For clarity, the comment above should list the test cases in the same order as they are executed below.
     It seems, the test cases listed in the comment above do not match the test cases below.
     I see just 4 test cases below, not 5 as listed above. Perhaps, the testCaseId above is not a test case?
     Also, the base case below is not listed in the comment above.



   98         ArrayList<TestEntry> testTable = new ArrayList<>();
   99
  100         // base case - no tranformation - all expected to be shared
  101         testTable.add(new TestEntry(0, false, false, true, true));
  102
  103         // transform parent only - both parent and child should not be shared
  104         testTable.add(new TestEntry(1, true, false, false, false));
  105
  106         // transform parent and child - both parent and child should not be shared
  107         testTable.add(new TestEntry(2, true, true, false, false));
  108
  109         // transform child only - parent should still be shared, but not child
  110         testTable.add(new TestEntry(3, false, true, true, false));
  111
  112         // run the tests
  113         for (TestEntry entry : testTable) {
  114             test.runTest(entry);
  115         }

    Nit:
      Not sure why the testTable is needed as it could be simplified as below:

           // base case - no tranformation - all expected to be shared
           test.runTest(new TestEntry(0, false, false, true, true));
   
           // transform parent only - both parent and child should not be shared
           test.runTest(new TestEntry(1, true, false, false, false));
   
           // transform parent and child - both parent and child should not be shared
           test.runTest(new TestEntry(2, true, true, false, false));
   
           // transform child only - parent should still be shared, but not child
           test.runTest(new TestEntry(3, false, true, true, false));


Thanks,
Serguei




On 9/13/16 22:08, Mikhailo Seledtsov wrote:
> Thank you again for review. I have implemented all the review 
> recommendations.
> The update also contains new test case from Jiangli to test super/sub 
> class pair, where super and sub classes belong to different packages.
> Thank you Jiangli for the test case.
>
> Here is an updated webrev: 
> http://cr.openjdk.java.net/~mseledtsov/8165805.02/
>
> Thank you,
> Misha
>
> On 9/9/16, 7:31 PM, Mikhailo Seledtsov wrote:
>>     Please review the tests that accompany the changes for
>>     "JDK-8078644 - CDS needs to support JVMTI CFLH"
>>
>>     The tests include several test cases that are produced by 
>> combination
>>     of transforming related classes: super/sub class and 
>> interface/implementor.
>>     The classes reside in CDS archive. Tests check to ensure that 
>> correct
>>     transformation is performed, classes are loaded from the archive 
>> only when appropriate,
>>     and that test process using the archive completes w/o 
>> errors/crashes.
>>
>>
>>     Details:
>>
>>     The main class is TransformRelatedClasses.java; start review with 
>> this class.
>>     Other classes are:
>>       - TransformSuperAndSubClasses.java, 
>> TransformInterfaceAndImplementor.java
>>         the "actual tests", but really just test headers calling into 
>> TransformRelatedClasses.java
>>
>>       - TransformTestCommon.java - common methods for transformation 
>> tests
>>
>>       - TestEntry.java - an entry into combinatorial test table 
>> representing a single test case
>>
>>       - CDSTestUtils.java, TransformUtil.java - utility classes that 
>> are common  CDS
>>         tests
>>
>>       - TransformerAgent.java - agent that performs transformation 
>> (comes with .mf file)
>>
>>
>>     JBS: https://bugs.openjdk.java.net/browse/JDK-8165805
>>     Webrev: http://cr.openjdk.java.net/~mseledtsov/8165805.00/
>>     Testing:
>>         Ran these tests on a standard set of platforms thru automated 
>> test system.
>>
>> Thank you,
>> Misha
>>



More information about the hotspot-runtime-dev mailing list