Integration of unit test with CI (#3993)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2020-10-27 03:15:52 -04:00 committed by GitHub
parent 6f01b691a8
commit caea4865bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 211 additions and 4 deletions

View File

@ -1,8 +1,15 @@
CLASS zcl_abapgit_object_tabl DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
CLASS zcl_abapgit_object_tabl DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
INTERFACES zif_abapgit_object .
ALIASES mo_files
FOR zif_abapgit_object~mo_files .
PROTECTED SECTION.
TYPES: BEGIN OF ty_segment_definition,
segmentheader TYPE edisegmhd,

View File

@ -0,0 +1,10 @@
CLASS ltcl_ci DEFINITION FOR TESTING RISK LEVEL CRITICAL DURATION MEDIUM.
PUBLIC SECTION.
METHODS run FOR TESTING.
ENDCLASS.
CLASS ltcl_ci IMPLEMENTATION.
METHOD run.
zcl_abapgit_objects_ci_tests=>run( 'TABL' ).
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>

View File

@ -0,0 +1,144 @@
CLASS zcl_abapgit_objects_ci_tests DEFINITION
PUBLIC
FINAL
CREATE PUBLIC
FOR TESTING
DURATION SHORT
RISK LEVEL CRITICAL .
PUBLIC SECTION.
CLASS-METHODS:
run
IMPORTING
!iv_object TYPE tadir-object.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECTS_CI_TESTS IMPLEMENTATION.
METHOD run.
DATA:
ls_repo TYPE zif_abapgit_exit=>ty_ci_repo,
lt_repos TYPE zif_abapgit_exit=>ty_ci_repos,
lo_ci_repos TYPE REF TO object,
ld_options TYPE REF TO data,
ld_results TYPE REF TO data,
lv_msg TYPE string,
lv_check TYPE string,
lx_error TYPE REF TO zcx_abapgit_exception.
FIELD-SYMBOLS:
<ls_options> TYPE any,
<lv_option> TYPE any,
<lt_repo_result> TYPE ANY TABLE,
<ls_repo_result> TYPE any,
<lv_result> TYPE any,
<lv_repo> TYPE any.
" Add the default test repo from https://github.com/abapGit-tests
ls_repo-name = iv_object.
ls_repo-clone_url = |https://github.com/abapGit-tests/{ iv_object }|.
APPEND ls_repo TO lt_repos.
" Get list of repos via exit
zcl_abapgit_exit=>get_instance( )->get_ci_tests(
EXPORTING
iv_object = iv_object
CHANGING
ct_ci_repos = lt_repos ).
IF lines( lt_repos ) = 0.
RETURN.
ENDIF.
" Objects will be created and deleted, do not run in customer system!
" These tests may fail if you are locking the entries (e.g. the ZABAPGIT transaction is open)
IF zcl_abapgit_persist_settings=>get_instance( )->read( )->get_run_critical_tests( ) = abap_false.
cl_abap_unit_assert=>fail(
msg = 'Cancelled. You can enable these tests in abapGit settings'
level = if_aunit_constants=>tolerable ).
ENDIF.
" Check if abapGit-CI is installed
SELECT SINGLE clsname FROM seoclass INTO lv_check WHERE clsname = 'ZCL_ABAPGIT_CI_REPOS'.
IF sy-subrc <> 0.
cl_abap_unit_assert=>fail(
msg = 'Cancelled. abapGit-CI is not installed (https://github.com/abapGit/CI)'
level = if_aunit_constants=>tolerable ).
ENDIF.
TRY.
" Prepare input for CI repo test
CREATE DATA ld_options TYPE ('ZIF_ABAPGIT_CI_DEFINITIONS=>TY_REPO_CHECK_OPTIONS').
ASSIGN ld_options->* TO <ls_options>.
ASSIGN COMPONENT 'CHECK_LOCAL' OF STRUCTURE <ls_options> TO <lv_option>.
ASSERT sy-subrc = 0.
<lv_option> = abap_true.
CREATE DATA ld_results TYPE ('ZIF_ABAPGIT_CI_DEFINITIONS=>TY_RESULT-REPO_RESULT_LIST').
ASSIGN ld_results->* TO <lt_repo_result>.
" Run CI repo tests
CREATE OBJECT lo_ci_repos TYPE ('ZCL_ABAPGIT_CI_REPOS').
CALL METHOD lo_ci_repos->('PROCESS_REPOS')
EXPORTING
it_repos = lt_repos
is_options = <ls_options>
RECEIVING
rt_result_list = <lt_repo_result>.
" Check results for individual repos
LOOP AT <lt_repo_result> ASSIGNING <ls_repo_result>.
ASSIGN COMPONENT 'NAME' OF STRUCTURE <ls_repo_result> TO <lv_repo>.
ASSERT sy-subrc = 0.
CLEAR lv_msg.
DO 7 TIMES.
CASE sy-index.
WHEN 1.
lv_check = 'CREATE_PACKAGE'.
WHEN 2.
lv_check = 'CLONE'.
WHEN 3.
lv_check = 'PULL'.
WHEN 4.
lv_check = 'SYNTAX_CHECK'.
WHEN 5.
lv_check = 'OBJECT_CHECK'.
WHEN 6.
lv_check = 'PURGE'.
WHEN 7.
lv_check = 'CHECK_LEFTOVERS'.
ENDCASE.
ASSIGN COMPONENT lv_check OF STRUCTURE <ls_repo_result> TO <lv_result>.
ASSERT sy-subrc = 0.
IF <lv_result> <> 'OK'.
IF lv_msg IS INITIAL.
lv_msg = |{ lv_check }:{ <lv_result> }|.
ELSE.
lv_msg = |{ lv_msg } { lv_check }:{ <lv_result> }|.
ENDIF.
ENDIF.
ENDDO.
cl_abap_unit_assert=>assert_equals(
exp = ''
act = lv_msg
msg = |{ <lv_repo> } { lv_msg }| ).
ENDLOOP.
CATCH zcx_abapgit_exception INTO lx_error.
cl_abap_unit_assert=>fail( msg = lx_error->get_text( ) ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECTS_CI_TESTS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>Test</DESCRIPT>
<CATEGORY>05</CATEGORY>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<DURATION_TYPE>12</DURATION_TYPE>
<RISK_LEVEL>33</RISK_LEVEL>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -15,7 +15,7 @@ ENDCLASS.
CLASS zcl_abapgit_exit IMPLEMENTATION.
CLASS ZCL_ABAPGIT_EXIT IMPLEMENTATION.
METHOD get_instance.
@ -138,6 +138,20 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_exit~get_ci_tests.
TRY.
gi_exit->get_ci_tests(
EXPORTING
iv_object = iv_object
CHANGING
ct_ci_repos = ct_ci_repos ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_exit~get_ssl_id.
TRY.

View File

@ -4,6 +4,13 @@ INTERFACE zif_abapgit_exit
TYPES:
ty_icm_sinfo2_tt TYPE STANDARD TABLE OF icm_sinfo2 WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_ci_repo,
name TYPE string,
clone_url TYPE string,
END OF ty_ci_repo .
TYPES:
ty_ci_repos TYPE TABLE OF ty_ci_repo .
METHODS change_local_host
CHANGING
@ -57,4 +64,9 @@ INTERFACE zif_abapgit_exit
IMPORTING
!is_step TYPE zif_abapgit_definitions=>ty_step_data
!ii_log TYPE REF TO zif_abapgit_log .
METHODS get_ci_tests
IMPORTING
!iv_object TYPE tadir-object
CHANGING
!ct_ci_repos TYPE ty_ci_repos .
ENDINTERFACE.