Exemplo n.º 1
0
    def test_acoverage_package_with_results_jacoco(self):
        self.connection.set_responses(
            Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_STATEMENTS_RESULTS_XML, headers={}),
        )

        with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
            exit_code = self.execute_run(
                'package', 'ypackage', '--coverage-output', 'jacoco', '--result', ResultOptions.ONLY_COVERAGE.value
            )

        self.assertEqual(exit_code, None)
        self.assertEqual(len(self.connection.execs), 3)
        self.assertEqual(mock_stdout.getvalue(),
'''<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd">
<report name="ypackage">
   <package name="TEST_CHECK_LIST">
      <class name="FOO" sourcefilename="FOO">
         <method name="METHOD_A" line="52">
            <counter type="BRANCH" missed="2" covered="3"/>
            <counter type="METHOD" missed="0" covered="1"/>
            <counter type="INSTRUCTION" missed="0" covered="5"/>
         </method>
         <method name="METHOD_B" line="199">
            <counter type="BRANCH" missed="1" covered="1"/>
            <counter type="METHOD" missed="0" covered="1"/>
            <counter type="INSTRUCTION" missed="2" covered="6"/>
         </method>
         <counter type="BRANCH" missed="7" covered="22"/>
         <counter type="METHOD" missed="0" covered="8"/>
         <counter type="INSTRUCTION" missed="3" covered="60"/>
      </class>
      <sourcefile name="FOO">
         <line nr="53" mi="0" ci="1"/>
         <line nr="54" mi="0" ci="1"/>
         <line nr="55" mi="0" ci="1"/>
         <line nr="56" mi="0" ci="1"/>
         <line nr="59" mi="0" ci="1"/>
         <line nr="209" mi="0" ci="1"/>
         <line nr="212" mi="0" ci="1"/>
         <line nr="215" mi="0" ci="1"/>
         <line nr="216" mi="0" ci="1"/>
         <line nr="219" mi="0" ci="1"/>
         <line nr="220" mi="0" ci="1"/>
         <line nr="224" mi="1" ci="0"/>
         <line nr="225" mi="1" ci="0"/>
      </sourcefile>
      <class name="BAR" sourcefilename="BAR">
         <counter type="BRANCH" missed="0" covered="0"/>
         <counter type="METHOD" missed="0" covered="0"/>
         <counter type="INSTRUCTION" missed="0" covered="0"/>
      </class>
      <counter type="BRANCH" missed="105" covered="29"/>
      <counter type="METHOD" missed="42" covered="10"/>
      <counter type="INSTRUCTION" missed="235" covered="96"/>
   </package>
</report>
''')
Exemplo n.º 2
0
    def test_dump_profiles_filtered(self):
        conn = Connection([
            Response(status_code=200, text=ADT_XML_PROFILES_TABLE),
            Response(status_code=200, text=ADT_XML_PROFILES_TRAN_TABLE),
            Response(status_code=200, text=ADT_XML_PROFILES_CHECKS_TABLE)
        ])

        dump = sap.adt.atc.dump_profiles(conn, ['PROFILE1'])

        self.assertDictEqual(
            dump, {
                'profiles': {
                    'PROFILE1': {
                        'changed': '20080415161735',
                        'changed_by': 'CHGUSER1',
                        'created': '20010309180000',
                        'created_by': 'CREUSER1',
                        'checks': {
                            'CHECK1_1': {
                                'sequence_number': '00000001',
                                'since': '00000091',
                                'note': 'Note PRF1 CHK1'
                            },
                            'CHECK1_2': {
                                'sequence_number': '00000002',
                                'since': '00000092',
                                'note': 'Note PRF1 CHK2'
                            }
                        },
                        'trans': {
                            'E': 'Standard Check Profile1 CheckMan 6.20'
                        }
                    }
                }
            })
Exemplo n.º 3
0
    def test_dump_profiles_filtered_with_checkman(self):
        conn = Connection([
            Response(status_code=200, text=ADT_XML_PROFILES_TABLE),
            Response(status_code=200, text=ADT_XML_PROFILES_TRAN_TABLE),
            Response(status_code=200, text=ADT_XML_PROFILES_CHECKS_TABLE),
            Response(status_code=200, text=ADT_XML_PROFILES_CHKMSG_LOCAL_TABLE)
        ])

        self.maxDiff = None

        dump = sap.adt.atc.dump_profiles(conn, ['PROFILE1'], True)

        self.assertDictEqual(
            dump, {
                'profiles': {
                    'PROFILE1': {
                        'changed': '20080415161735',
                        'changed_by': 'CHGUSER1',
                        'created': '20010309180000',
                        'created_by': 'CREUSER1',
                        'checks': {
                            'CHECK1_1': {
                                'sequence_number': '00000001',
                                'since': '00000091',
                                'note': 'Note PRF1 CHK1'
                            },
                            'CHECK1_2': {
                                'sequence_number': '00000002',
                                'since': '00000092',
                                'note': 'Note PRF1 CHK2'
                            }
                        },
                        'trans': {
                            'E': 'Standard Check Profile1 CheckMan 6.20'
                        }
                    }
                },
                'checkman_messages_local': [{
                    'check_id': 'CHECK1_1',
                    'check_message_id': '0001',
                    'check_view': '',
                    'deactivated': '',
                    'local_prio': '2',
                    'valid_id': '',
                    'valid_to': '20250802'
                }, {
                    'check_id': 'CHECK1_2',
                    'check_message_id': 'EHPW',
                    'check_view': '',
                    'deactivated': 'X',
                    'local_prio': '4',
                    'valid_id': 'Requested by Bob and Alice',
                    'valid_to': '20250802'
                }]
            })
Exemplo n.º 4
0
    def test_execute_session_new(self, fake_retrieve, fake_accepts):
        dummy_conn = Connection(responses=[
            Response(status_code=200, headers={'x-csrf-token': 'first'}),
            Response(status_code=200, headers={'x-csrf-token': 'second'}),
            Response(status_code=200, text='success')
        ])

        fake_retrieve.side_effect = dummy_conn._retrieve

        resp = self.connection.execute('GET', 'test')

        self.assertEqual(resp.text, 'success')
Exemplo n.º 5
0
    def test_release_transport_recursive(self):
        self.connection.set_responses(
            Response(status_code=200, text=TASK_RELEASE_OK_RESPONSE),
            Response(status_code=200, text=TASK_RELEASE_OK_RESPONSE),
            Response(status_code=200, text=TRASNPORT_RELEASE_OK_RESPONSE))

        self.transport.release(recursive=True)

        self.assertEqual(self.connection.execs, [
            self.request_for_cts_task(self.task_1),
            self.request_for_cts_task(self.task_2),
            self.request_for_cts_task(self.transport)
        ])
Exemplo n.º 6
0
    def test_coverage_filepath(self):
        self.connection.set_responses(
            Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_STATEMENTS_RESULTS_XML, headers={}),
        )

        coverage_filepath = 'path/to/coverage'
        with patch('sap.cli.aunit.open', mock_open()) as mock_file:
            exit_code = self.execute_run(
                'package', 'ypackage', '--output', 'raw', '--coverage-output', 'raw', '--result', ResultOptions.ONLY_COVERAGE.value,
                '--coverage-filepath', coverage_filepath
            )

        mock_file.assert_called_with(coverage_filepath, 'w+')
Exemplo n.º 7
0
    def test_fmod_chattr_rfc(self):
        connection = Connection([Response(text=GET_FUNCTION_MODULE_ADT_XML,
                                          status_code=200,
                                          headers={'Content-Type': 'application/vnd.sap.adt.functions.fmodules.v3+xml; charset=utf-8'}),
                                 LOCK_RESPONSE_OK,
                                 EMPTY_RESPONSE_OK,
                                 EMPTY_RESPONSE_OK])

        args = fm_parse_args('chattr', 'ZFG_HELLO_WORLD', 'Z_FN_HELLO_WORLD', '-t', 'rfc')
        args.execute(connection, args)

        self.assertEqual([(e.method, e.adt_uri) for e in connection.execs],
                          [('GET', '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'),
                           ('POST', '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'),
                           ('PUT', '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'),
                           ('POST', '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world')])

        put_req = connection.execs[2]

        self.assertEqual(sorted(put_req.headers.keys()), ['Content-Type'])
        self.assertEqual(put_req.headers['Content-Type'], 'application/vnd.sap.adt.functions.fmodules.v3+xml; charset=utf-8')

        self.assertEqual(sorted(put_req.params.keys()), ['lockHandle'])
        self.assertEqual(put_req.params['lockHandle'], 'win')

        self.maxDiff = None
        self.assertEqual(put_req.body.decode('utf-8'), PUT_FUNCITON_MODULE_ADT_XML)
Exemplo n.º 8
0
    def test_aunit_package_with_results_sonar(self):
        self.connection.set_responses(Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}))

        with patch('sys.stdout', new_callable=StringIO) as mock_stdout:
            exit_code = self.execute_run('package', 'ypackage', '--output', 'sonar', '--result', ResultOptions.ONLY_UNIT.value)

        self.assertEqual(exit_code, 3)
        self.assertEqual(len(self.connection.execs), 1)
        self.assertIn('packages/ypackage', self.connection.execs[0].body)

        self.maxDiff = None
        self.assertEqual(mock_stdout.getvalue(),
'''<?xml version="1.0" encoding="UTF-8" ?>
<testExecutions version="1">
  <file path="ypackage/ZCL_THEKING_MANUAL_HARDCORE=&gt;LTCL_TEST">
    <testCase name="DO_THE_FAIL" duration="33">
      <error message="Critical Assertion Error: 'I am supposed to fail'">
True expected
Test 'LTCL_TEST-&gt;DO_THE_FAIL' in Main Program 'ZCL_THEKING_MANUAL_HARDCORE===CP'.

Include: &lt;ZCL_THEKING_MANUAL_HARDCORE===CCAU&gt; Line: &lt;19&gt; (DO_THE_FAIL)
      </error>
    </testCase>
    <testCase name="DO_THE_WARN" duration="33">
      <skipped message="Warning: 'I am supposed to warn'">
True expected
Test 'LTCL_TEST-&gt;DO_THE_WARN' in Main Program 'ZCL_THEKING_MANUAL_HARDCORE===CP'.

Include: &lt;ZCL_THEKING_MANUAL_HARDCORE===CCAU&gt; Line: &lt;19&gt; (DO_THE_WARN)
      </skipped>
    </testCase>
    <testCase name="DO_THE_TEST" duration="0"/>
  </file>
  <file path="ypackage/ZCL_THEKING_MANUAL_HARDCORE=&gt;LTCL_TEST_HARDER">
    <testCase name="DO_THE_FAIL" duration="0">
      <error message="Critical Assertion Error: 'I am supposed to fail'">
True expected
Test 'LTCL_TEST_HARDER-&gt;DO_THE_FAIL' in Main Program 'ZCL_THEKING_MANUAL_HARDCORE===CP'.

Include: &lt;ZCL_THEKING_MANUAL_HARDCORE===CCAU&gt; Line: &lt;19&gt; (DO_THE_FAIL)
      </error>
    </testCase>
    <testCase name="DO_THE_TEST" duration="0"/>
  </file>
  <file path="ypackage/ZEXAMPLE_TESTS=&gt;LTCL_TEST">
    <testCase name="DO_THE_FAIL" duration="0">
      <error message="Critical Assertion Error: 'I am supposed to fail'">
True expected
Test 'LTCL_TEST-&gt;DO_THE_FAIL' in Main Program 'ZEXAMPLE_TESTS'.

Include: &lt;ZEXAMPLE_TESTS&gt; Line: &lt;24&gt; (DO_THE_FAIL)
Include: &lt;ZEXAMPLE_TESTS&gt; Line: &lt;25&gt; (PREPARE_THE_FAIL)
      </error>
      <error message="Error&lt;LOAD_PROGRAM_CLASS_MISMATCH&gt;">
      </error>
    </testCase>
    <testCase name="DO_THE_TEST" duration="0"/>
  </file>
</testExecutions>
''')
Exemplo n.º 9
0
    def test_lock_modify_invalid(self):
        response = Response(text='invalid',
                            status_code=200,
                            headers={'Content-Type': 'text/plain'})

        connection = Connection([response, response])

        victory = DummyADTObject(connection=connection)

        try:
            victory.lock()
            self.assertFail('Exception was expected')
        except SAPCliError as ex:
            self.assertEquals(
                str(ex),
                f'Object {victory.uri}: lock response does not have lock result\ninvalid'
            )

        try:
            victory.lock()
            self.assertFail('Exception was expected')
        except SAPCliError as ex:
            self.assertEquals(
                str(ex),
                f'Object {victory.uri}: lock response does not have lock result\ninvalid'
            )
Exemplo n.º 10
0
    def test_aunit_package_with_results(self):
        self.connection.set_responses(Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}))

        with patch('sap.cli.aunit.print') as mock_print:
            exit_code = self.execute_run('package', 'ypackage', '--output', 'human', '--result', ResultOptions.ONLY_UNIT.value)

        self.assertEqual(exit_code, 3)
        self.assertEqual(len(self.connection.execs), 1)
        self.assertIn('packages/ypackage', self.connection.execs[0].body)

        self.assertEqual(mock_print.call_args_list[0], call('ZCL_THEKING_MANUAL_HARDCORE', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[1], call('  LTCL_TEST', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[2], call('    DO_THE_FAIL [ERR]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[3], call('    DO_THE_WARN [SKIP]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[4], call('    DO_THE_TEST [OK]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[5], call('  LTCL_TEST_HARDER', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[6], call('    DO_THE_FAIL [ERR]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[7], call('    DO_THE_TEST [OK]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[8], call('ZEXAMPLE_TESTS', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[9], call('  LTCL_TEST', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[10], call('    DO_THE_FAIL [ERR]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[11], call('    DO_THE_TEST [OK]', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[12], call('', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[13], call('ZCL_THEKING_MANUAL_HARDCORE=>LTCL_TEST=>DO_THE_FAIL', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[14], call('*  [critical] [failedAssertion] - Critical Assertion Error: \'I am supposed to fail\'', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[15], call('ZCL_THEKING_MANUAL_HARDCORE=>LTCL_TEST_HARDER=>DO_THE_FAIL', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[16], call('*  [critical] [failedAssertion] - Critical Assertion Error: \'I am supposed to fail\'', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[17], call('ZEXAMPLE_TESTS=>LTCL_TEST=>DO_THE_FAIL', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[18], call('*  [critical] [failedAssertion] - Critical Assertion Error: \'I am supposed to fail\'', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[19], call('*  [critical] [failedAssertion] - Error<LOAD_PROGRAM_CLASS_MISMATCH>', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[20], call('', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[21], call('Successful: 3', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[22], call('Warnings:   1', file=sys.stdout))
        self.assertEqual(mock_print.call_args_list[23], call('Errors:     3', file=sys.stdout))
Exemplo n.º 11
0
    def test_2_reportes_2_classes(self):
        connection = Connection([
            Response(
                status_code=200,
                content_type=
                'application/vnd.sap.adt.checkmessages+xml; charset=utf-8',
                text=ADT_XML_RUN_CHECK_2_REPORTERS)
        ])

        reporter = sap.adt.checks.Reporter('abapCheckRun')
        reporter.supported_types = '*'

        reports = sap.adt.checks.run_for_supported_objects(
            connection, reporter, [
                sap.adt.Class(connection, 'CL_FIRST'),
                sap.adt.Class(connection, 'CL_SECOND')
            ])

        self.assertEqual(connection.mock_methods(),
                         [('POST', '/sap/bc/adt/checkruns')])
        self.assertEqual(connection.execs[0].body, FIXTURE_TWO_CLASSES_REQUEST)

        self.assertEqual(['abapCheckRun', 'tableStatusCheck'],
                         [report.reporter for report in reports])
        self.assertEqual(['First', 'Second'],
                         [msg.short_text for msg in reports[0].messages])
        self.assertEqual(['Third', 'Fourth'],
                         [msg.short_text for msg in reports[1].messages])
Exemplo n.º 12
0
    def test_text_mixed_endings(self):
        connection = Connection([Response(status_code=200,
                                          text='first\nsecond\r\nthird\r\n')
        ])

        victory = DummyADTObject(connection=connection, name='SOFTWARE_ENGINEER')
        self.assertEqual(victory.text, 'first\nsecond\nthird\n')
Exemplo n.º 13
0
    def test_acoverage_package_with_results_raw(self, get_acoverage_statements):
        get_acoverage_statements.return_value = []

        self.connection.set_responses(
            Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_RESULTS_XML, headers={})
        )

        with patch('sap.cli.aunit.print') as mock_print:
            exit_code = self.execute_run(
                'package', 'ypackage', '--coverage-output', 'raw', '--result', ResultOptions.ONLY_COVERAGE.value
            )

        self.assertEqual(exit_code, None)
        self.assertEqual(len(self.connection.execs), 2)

        self.assertEqual(mock_print.call_args_list[0], call(ACOVERAGE_RESULTS_XML, file=sys.stdout))
Exemplo n.º 14
0
    def test_result_option_coverage(self):
        self.connection.set_responses(
            Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_RESULTS_XML, headers={}),
            Response(status_code=200, text=ACOVERAGE_STATEMENTS_RESULTS_XML, headers={}),
        )

        with patch('sap.cli.aunit.print') as mock_print:
            exit_code = self.execute_run(
                'package', 'ypackage', '--output', 'raw', '--coverage-output', 'raw', '--result', ResultOptions.ONLY_COVERAGE.value
            )

        self.assertEqual(exit_code, None)
        self.assertEqual(len(self.connection.execs), 3)

        self.assertEqual(len(mock_print.call_args_list), 1)
        self.assertEqual(mock_print.call_args_list[0], call(ACOVERAGE_RESULTS_XML, file=sys.stdout))
Exemplo n.º 15
0
    def test_execute_session_refetch_csfr(self, fake_retrieve, fake_accepts):
        dummy_conn = Connection(responses=[
            Response(status_code=200, headers={'x-csrf-token': 'first'}),
            Response(status_code=200, headers={'x-csrf-token': 'second'}),
            Response(
                text=
                '''<?xml version="1.0" encoding="utf-8"?><mock type=test/>''',
                status_code=403,
                content_type='application/xml'),
            Response(status_code=200, headers={'x-csrf-token': 'third'}),
            Response(status_code=200, text='success')
        ])

        fake_retrieve.side_effect = dummy_conn._retrieve

        resp = self.connection.execute('GET', 'test')
        self.assertEqual(resp.text, 'success')
Exemplo n.º 16
0
    def test_aunit_package(self):
        self.connection.set_responses(Response(status_code=200, text=AUNIT_NO_TEST_RESULTS_XML, headers={}))

        with patch('sap.cli.aunit.print') as mock_print:
            self.execute_run('package', 'ypackage', '--output', 'human', '--result', ResultOptions.ONLY_UNIT.value)

        self.assertEqual(len(self.connection.execs), 1)
        self.assertIn('packages/ypackage', self.connection.execs[0].body)
        self.assert_print_no_test_classes(mock_print)
Exemplo n.º 17
0
    def test_activate_fails(self):
        connection = Connection([Response(ACTIVATE_RESPONSE_FAILED, 200, {})])
        victory = DummyADTObject(connection=connection, name='activator')

        with self.assertRaises(SAPCliError) as cm:
            sap.adt.wb.activate(victory)

        self.maxDiff = None
        self.assertEqual(str(cm.exception), f'Could not activate: {ACTIVATE_RESPONSE_FAILED}')
Exemplo n.º 18
0
def sample_connection_ok(response=RESPONSE_BINDING_OK):
    connection = Connection([
        response,
        Response(
            status_code=200,
            content_type='application/vnd.sap.as+xml; charset=utf-8; dataname=com.sap.adt.StatusMessage',
            text=SAMPLE_ODATA_PUBLISH_SUCCESS_TEXT)
    ])
    return connection
Exemplo n.º 19
0
 def test_adt_wb_activate_object_ok_with_props(self):
     adt_object = self.create_fake_object(
         FIXTURES_EXP_FULL_ADT_URI, FIXTURES_EXP_OBJECT_NAME.lower(), [
             Response(status_code=200,
                      text=ACTIVATION_WITH_PROPERTIES_XML,
                      headers={})
         ])
     sap.adt.wb.activate(adt_object)
     self.assert_single_request(adt_object)
Exemplo n.º 20
0
    def do_check_command_release(self, request_type, number, response):
        connection = Connection([Response(response, 200, {})])

        sap.cli.cts.release(connection,
                            SimpleNamespace(type=request_type, number=number))

        self.assertEqual(
            [request.adt_uri for request in connection.execs],
            [f'/sap/bc/adt/cts/transportrequests/{number}/newreleasejobs'])
Exemplo n.º 21
0
    def test_release_task_error(self):
        self.connection.set_responses(
            Response(status_code=200, text=TASK_RELEASE_ERR_RESPONSE))

        with self.assertRaises(sap.adt.cts.CTSReleaseError) as caught:
            self.task_2.release()

        self.assertEqual(
            str(caught.exception),
            f'Failed to release WorkbenchTask {self.task_2.number}: Error')
Exemplo n.º 22
0
    def test_class_execute_output(self):
        expected = 'Output from executed class'
        conn = Connection([Response(text=expected, status_code=200, headers={'Content-Type': 'text/plain'})])

        args = parse_args(['execute', 'ZCL_HELLO_WORLD'])
        with patch('sap.cli.abapclass.print', newcallable=StringIO) as fake_print:
            args.execute(conn, args)

        self.assertEqual(len(conn.execs), 1)
        self.assertEqual(fake_print.mock_calls, [call(expected)])
Exemplo n.º 23
0
    def setUp(self):
        self.variant = 'ACT_VARIANT'
        self.worklist_id = 'WORKLIST_ID'

        self.request_create_worklist = Request(
            method='POST',
            adt_uri='/sap/bc/adt/atc/worklists',
            params={'checkVariant': self.variant},
            headers={'Accept': 'text/plain'},
            body=None)

        self.request_run_worklist = Request(
            method='POST',
            adt_uri='/sap/bc/adt/atc/runs',
            params={'worklistId': self.worklist_id},
            headers={
                'Accept': 'application/xml',
                'Content-Type': 'application/xml'
            },
            body=ADT_XML_ATC_RUN_REQUEST_PACKAGE)

        self.request_get_worklist = Request(
            method='GET',
            adt_uri=f'/sap/bc/adt/atc/worklists/{self.worklist_id}',
            params={'includeExemptedFindings': 'false'},
            headers={'Accept': 'application/atc.worklist.v1+xml'},
            body=None)

        self.conn = Connection([
            Response(status_code=200,
                     text=self.worklist_id,
                     headers={'Content-Type': 'text/plain'}),
            Response(status_code=200,
                     text=ADT_XML_ATC_RUN_RESPONSE_NO_OBJECTS,
                     headers={'Content-Type': 'application/xml'}),
            Response(
                status_code=200,
                text=ADT_XML_ATC_WORKLIST_EMPTY,
                headers={'Content-Type': 'application/atc.worklist.v1+xml'})
        ])

        self.checks_runner = sap.adt.atc.ChecksRunner(self.conn, self.variant)
Exemplo n.º 24
0
    def test_recursive_release(self, fake_fetch):
        self.connection.set_responses(
            Response(TRASNPORT_RELEASE_OK_RESPONSE, 200, {})
        )

        self.release(type='transport', number=TRANSPORT_NUMBER, recursive=True)
        self.assertConsoleContents(self.console, stdout=f'''Fetching details of {TRANSPORT_NUMBER} because of recursive execution
Releasing {TRANSPORT_NUMBER}
Transport request/task {TRANSPORT_NUMBER} was successfully released
''')
        fake_fetch.assert_called_once()
Exemplo n.º 25
0
    def test_release_task(self):
        self.connection.set_responses(
            Response(status_code=200, text=TASK_RELEASE_OK_RESPONSE))

        report = self.task_1.release()
        self.assertEqual(self.connection.execs,
                         [self.request_for_cts_task(self.task_1)])
        self.assertEqual(
            str(report),
            f'Transport request/task {TASK_NUMBER} was successfully released')
        self.assertTrue(report.release_was_successful)
Exemplo n.º 26
0
    def test_aunit_package_with_results_raw(self):
        self.connection.set_responses(Response(status_code=200, text=AUNIT_RESULTS_XML, headers={}))

        with patch('sap.cli.aunit.print') as mock_print:
            exit_code = self.execute_run('package', 'ypackage', '--output', 'raw', '--result', ResultOptions.ONLY_UNIT.value)

        self.assertEqual(exit_code, 3)
        self.assertEqual(len(self.connection.execs), 1)
        self.assertIn('packages/ypackage', self.connection.execs[0].body)

        self.assertEqual(mock_print.call_args_list[0][0], (AUNIT_RESULTS_XML,))
Exemplo n.º 27
0
    def test_fetch_response_customizing(self):
        conn = Connection([
            Response(status_code=200,
                     content_type=sap.adt.atc.CUSTOMIZING_MIME_TYPE_V1,
                     text=ADT_XML_ATC_CUSTOMIZING_ATTRIBUTES)
        ])

        customizing = sap.adt.atc.fetch_customizing(conn)
        self.assertEqual(customizing.system_check_variant, 'OPENABAPCHECKS')

        self.assertEqual(conn.execs, [ATC_CUSTOMIZIN_REQUEST])
Exemplo n.º 28
0
    def test_fetch_response_xml(self):
        conn = Connection([
            Response(status_code=200,
                     content_type='application/xml',
                     text=ADT_XML_ATC_CUSTOMIZING)
        ])

        customizing = sap.adt.atc.fetch_customizing(conn)
        self.assertEqual(customizing.system_check_variant, 'STANDARD')

        self.assertEqual(conn.execs, [ATC_CUSTOMIZIN_REQUEST])
Exemplo n.º 29
0
    def test_not_json_response(self):
        req = Request(method='GET',
                      adt_uri='/epic/success',
                      headers=None,
                      body=None,
                      params=None)
        res = Response(status_code=401, text='Not JSON')

        orig_error = UnauthorizedError(req, res, 'foo')
        new_error = sap.rest.gcts.exception_from_http_error(orig_error)

        self.assertEqual(new_error, orig_error)
Exemplo n.º 30
0
    def test_workbench_list_transport(self):
        connection = Connection([Response(SHORTENED_WORKBENCH_XML, 200, {})], user='******')

        with patch('sys.stdout', new_callable=StringIO) as fake_output:
            sap.cli.cts.print_list(connection, SimpleNamespace(type='transport', recursive=0, owner=None, number=None))

        self.assertEqual(
            [(request.adt_uri, request.params['user']) for request in connection.execs],
            [('/sap/bc/adt/cts/transportrequests', 'ANZEIGER')]
        )

        self.assertEqual(fake_output.getvalue(), f'{TRANSPORT_NUMBER} D FILAK Transport Description\n')