mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Integration of unit test with CI (#3993)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
6f01b691a8
commit
caea4865bf
|
@ -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,
|
||||
|
|
10
src/objects/zcl_abapgit_object_tabl.clas.testclasses.abap
Normal file
10
src/objects/zcl_abapgit_object_tabl.clas.testclasses.abap
Normal 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.
|
|
@ -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>
|
||||
|
|
144
src/objects/zcl_abapgit_objects_ci_tests.clas.abap
Normal file
144
src/objects/zcl_abapgit_objects_ci_tests.clas.abap
Normal 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.
|
19
src/objects/zcl_abapgit_objects_ci_tests.clas.xml
Normal file
19
src/objects/zcl_abapgit_objects_ci_tests.clas.xml
Normal 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>
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user