meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sap_hybris_commerce:development_process:systemsetup_annotation_when_methods_run [2020/04/10 10:08] – Class name Antonio Robirosasap_hybris_commerce:development_process:systemsetup_annotation_when_methods_run [2020/04/10 14:03] (current) – Document the hybris classes Antonio Robirosa
Line 3: Line 3:
 The SystemSetup annotation is used to run import data, synchronize catalogues, migrate CMS components and execute Java code during **every** project or essential data creation step. The SystemSetup annotation is used to run import data, synchronize catalogues, migrate CMS components and execute Java code during **every** project or essential data creation step.
  
-**In past versions the essential and project data steps weren't run during the initialization of the junit tenant.** This prevented the import of test data for the integration tests if you weren't using the [[https://github.com/arobirosa/areco-deployment-script-manager|Areco deployment script manager]] as patch system. To get an updated picture of the current situation, I ran a test on the latest SAP hybris versions and here are the results:+**In all hybris version up to 1905 the essential and project data steps aren't run during the initialization of the junit tenant.** This prevents the import of common test data for complex integration tests if you weren't using the [[https://github.com/arobirosa/areco-deployment-script-manager|Areco deployment script manager]] as patch system. To get an updated picture of the current situation, I ran a test on the latest SAP hybris version 1905 and here are the results are the same as with old versions:
  
-^SystemSetup.Process^INIT^^^UPDATE^^^ALL^^^ +^SystemSetup.Process^INIT^^^UPDATE^^^ALL^^^.^ 
-^^SystemSetup.Type^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^ +^SystemSetup.Type^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^ESSENTIAL^PROJECT^ALL^What Hybris impexes are imported?
-^ant initialize -Dtenant=master^ +^ant initialize -Dtenant=master|Called once with process INIT and type ESSENTIAL|Called once with process INIT and type PROJECT|Called twice with process INIT and type ESSENTIAL \\ and with process INIT and type PROJECT|No call|||Called once with process INIT and type ESSENTIAL|Called once with process INIT and type PROJECT|Called twice with process INIT and type ESSENTIAL \\ and with process INIT and type PROJECT|Project and essential scripts| 
-^ant initialize -Dtenant=junit^ +^ant initialize -Dtenant=junit|:!: No call|||||||||:!: None| 
-^ant yunitinit^ +^ant yunitinit|:!: No call|||||||||:!: None| 
-^ant updatesystem -Dtenant=master((with a JSON configuration to run the project data))^ +^ant updatesystem -Dtenant=master((with a JSON configuration to run the project data))|No call|||Called once with process UPDATE and type ESSENTIAL|Called once with process UPDATE and type PROJECT|Called twice with  process UPDATE and type ESSENTIAL and with process UPDATE and type PROJECT|Called once with process UPDATE and type ESSENTIAL|Called once with process UPDATE and type PROJECT|Called twice with process INIT and type ESSENTIAL and with process INIT and type PROJECT|Project and essential scripts| 
-^ant updatesystem -Dtenant=junit((with a JSON configuration to run the project data))+^ant updatesystem -Dtenant=junit((with a JSON configuration to run the project data))|:!: No call|||||||||:!: None| 
-^On HAC, initialize of the master tenant^ +^ant yunitupdate|:!: No call|||||||||:!: None|
-^On HAC, initialize of the master yunit^ +
-^On HAC, update running system of the master tenant^ +
-^On HAC, update running system of the master yunit^+
  
-===== Test description =====+When @SystemSetup(extension ArecosystemsetuptestConstants.EXTENSIONNAME), the field hybrisContext.getExtensionName() always contains the name of the current extension. \\ 
 +When @SystemSetup(extension "ALL_EXTENSIONS") is used, the methods annotated with @SystemSetup are called as above once or twice **per each hybris and custom extension**. Each time the field hybrisContext.getExtensionName() contains the name of a different extension.
  
-The class used for the test is annotated at class level with: +<WRAP center round important 60%> 
-<code> +Because the majority of the SAP hybris projects use Jenkins and **ant targets** to deploy, update system and initialization using HAC wasn't tested. 
-@SystemSetup(extension = "ALL_EXTENSIONS")+</WRAP> 
 +===== Cause of this behaviour ===== 
 + 
 +The method de.hybris.ant.taskdefs.InitPlatformAntPerformableImpl#performImpl checks if the current tenant is named **junit** and runs an initialization without essential and project data. This also happens with the update system. Please see the code of UpdatePlatformAntPerformableImpl. 
 + 
 +===== Test description ===== 
 +I created a new extension based on the templa yempty and added the property **initialpassword.admin=nimda** to the local.properies. Then I created a {{ :sap_hybris_commerce:development_process:systemsetupannotationcallstest.java | class for the test}} and annotated at class level with: 
 +<code java
 +@SystemSetup(extension = ArecosystemsetuptestConstants.EXTENSIONNAME)
 public class SystemSetupAnnotationCallsTest { public class SystemSetupAnnotationCallsTest {
 </code> </code>
 Each method contains the following code for all possible combinations of process and type: Each method contains the following code for all possible combinations of process and type:
-<code>+<code java>
 @SystemSetup(process = SystemSetup.Process.UPDATE, type = SystemSetup.Type.ESSENTIAL) @SystemSetup(process = SystemSetup.Process.UPDATE, type = SystemSetup.Type.ESSENTIAL)
-        public void logUpdateEssential(final SystemSetupContext hybrisContext) { +public void logUpdateEssential(final SystemSetupContext hybrisContext) { 
-                LOG.error(String.format("Called Update Essential with extension %s, process %s and type %s", hybrisContext.getExtensionName(), hybrisContext.getProcess(), hybrisContext.getType())); +  LOG.error(String.format("Called Update Essential with extension %s, process %s and type %s", hybrisContext.getExtensionName(), hybrisContext.getProcess(), hybrisContext.getType())); 
-        }+}
 </code> </code>
-ran all ant commands and process on HAC and I analysed the log afterwards: +<WRAP center round important 60%> 
-<code> +To make hybris call the methods, had to create a bean definition in the spring application context. Autowiring without the XML bean definition wasn't working. 
-ant clean all initialize -Dtenant=master | tee initializeMaster.log | grep SystemSetupAnnotationCallsTest+</WRAP> 
 +<code xml
 +    <bean id="systemSetupAnnotationCallsTest" class="org.areco.ecommerce.tests.systemsetup.setup.SystemSetupAnnotationCallsTest" />
 </code> </code>
 +
 +
 +I created a JSON configuration for the update running system which runs the create project data step: {{ :sap_hybris_commerce:development_process:updatesystemconfigfile.json | updatesystemconfigfile.json}} \\
 +I ran the following commands and I analysed the log afterwards:
 +<code bash>
 +rm -rf hybris/data/
 +ant clean all
 +ant initialize -Dtenant=master | tee initializeMaster.log | grep SystemSetupAnnotationCallsTest
 +ant initialize -Dtenant=junit | tee initializeJunit.log | grep SystemSetupAnnotationCallsTest
 +ant yunitinit | tee yunitinit.log | grep SystemSetupAnnotationCallsTest
 +ant updatesystem -Dtenant=master -DconfigFile=/home/arobirosa/no_backup/areco/arecodeploymentscriptsmanager-1905/hybris/bin/custom/arecosystemsetuptest/resources/updateSystemConfigFile.json | tee updateMaster.log | grep SystemSetupAnnotationCallsTest
 +ant updatesystem -Dtenant=yunit -DconfigFile=/home/arobirosa/no_backup/areco/arecodeploymentscriptsmanager-1905/hybris/bin/custom/arecosystemsetuptest/resources/updateSystemConfigFile.json | tee updateJunit.log | grep SystemSetupAnnotationCallsTest
 +ant yunitupdate -DconfigFile=/home/arobirosa/no_backup/areco/arecodeploymentscriptsmanager-1905/hybris/bin/custom/arecosystemsetuptest/resources/updateSystemConfigFile.json | tee yunitUpdate.log | grep SystemSetupAnnotationCallsTest
 +</code>
 +
 +Source code: {{ :sap_hybris_commerce:development_process:systemsetupannotationcallstest.java | SystemSetupAnnotationCallsTest.java}} {{ :sap_hybris_commerce:development_process:updatesystemconfigfile.json | updatesystemconfigfile.json}}
  
 -- Based on SAP hybris 1905 -- Based on SAP hybris 1905