コード例 #1
0
    def test_activate_objects_with_ignored_error(self):
        connection = MagicMock()

        args = self.parse_args('activate', '--ignore-errors', 'myname', 'anothername')

        message_builder = MessageBuilder()

        response_iter = iter([(message_builder.build_results_without_messages(), None),
                              (message_builder.build_results_with_errors(), None)])

        with patch('sap.adt.wb.try_activate') as fake_activate, \
             patch_get_print_console_with_buffer() as fake_console:
            fake_activate.side_effect = lambda x: next(response_iter)

            exit_code = args.execute(connection, args)
            self.assertEqual(exit_code, 1)

        self.assertEqual(fake_console.return_value.std_output.getvalue(), f'''Activating 2 objects:
* myname (1/2)
* anothername (2/2)
{message_builder.error_message[1]}Activation has finished
Warnings: 0
Errors: 1
Inactive objects:
  FAKE anothername
''')
コード例 #2
0
    def test_write_object_text_name_from_files_activate(self, fake_activate):
        connection = MagicMock()

        args = self.parse_args('write', '-', 'z_one.abap', 'z_one.incl.abap',
                               'z_two.abap', '--corrnr', '123456',
                               '--activate')

        fake_activate.return_value = (sap.adt.wb.CheckResults(), None)

        with patch('sap.cli.object.open', mock_open(read_data='source code')) as fake_open, \
             patch_get_print_console_with_buffer() as fake_console:
            args.execute(connection, args)

        self.assertEqual(fake_activate.call_args_list, [
            call(self.group.new_object_mock),
            call(self.group.new_object_mock)
        ])
        self.assertEqual(
            fake_console.return_value.std_output.getvalue(), '''Writing:
* str(z_one)
* str(z_one)
* str(z_two)
Activating 2 objects:
* z_one (1/2)
* z_two (2/2)
Activation has finished
Warnings: 0
Errors: 0
''')
コード例 #3
0
    def test_activate_objects(self):
        connection = MagicMock()

        args = self.parse_args('activate', 'myname', 'anothername')

        with patch('sap.adt.wb.try_activate') as fake_activate, \
             patch_get_print_console_with_buffer() as fake_console:
            fake_activate.return_value = (sap.adt.wb.CheckResults(), None)

            exit_code = args.execute(connection, args)
            self.assertEqual(exit_code, 0)

        self.assertEqual(fake_activate.call_args_list, [call(self.group.new_object_mock),
                                                        call(self.group.new_object_mock)])

        self.assertEqual(self.group.instace_mock.call_args_list, [call(connection, 'myname', args, metadata=None),
                                                                  call(connection, 'anothername', args, metadata=None)])


        self.assertEqual(fake_console.return_value.std_output.getvalue(), '''Activating 2 objects:
* myname (1/2)
* anothername (2/2)
Activation has finished
Warnings: 0
Errors: 0
''')
コード例 #4
0
    def test_handle_results_with_errors_no_continue(self):
        with self.assertRaises(sap.cli.wb.StopObjectActivation) as caught, \
             patch_get_print_console_with_buffer() as fake_console:
            self.worker.handle_results(
                'CL_NO_MESSAGES', self.activated_object,
                self.message_builder.build_results_with_errors(), self.stats)

        self.assert_error_message_output(fake_console)
        self.assert_error_stats(caught.exception.stats)
コード例 #5
0
    def test_handle_message(self):
        message, lines = self.message_builder.build_warning()

        with patch_get_print_console_with_buffer() as fake_console:
            self.worker.handle_message(message)

        self.assertEqual(fake_console.return_value.err_output.getvalue(), '')
        self.assertEqual(fake_console.return_value.std_output.getvalue(),
                         lines)
コード例 #6
0
    def test_handle_results_with_warnings(self):
        with patch_get_print_console_with_buffer() as fake_console:
            stats = self.worker.handle_results(
                'CL_NO_MESSAGES', self.activated_object,
                self.message_builder.build_results_with_warnings(), self.stats)

        self.assert_warning_message_output(fake_console)
        self.assert_warning_stats(self.stats)
        self.assertEqual(self.stats.errors, 0)
コード例 #7
0
    def test_handle_results_with_errors_continue(self):
        self.worker.continue_on_errors = True

        with patch_get_print_console_with_buffer() as fake_console:
            stats = self.worker.handle_results(
                'CL_NO_MESSAGES', self.activated_object,
                self.message_builder.build_results_with_errors(), self.stats)

        self.assert_error_message_output(fake_console)
        self.assert_error_stats(self.stats)
コード例 #8
0
    def test_handle_results_without_messages(self):
        with patch_get_print_console_with_buffer() as fake_console:
            self.worker.handle_results(
                'CL_NO_MESSAGES', self.activated_object,
                self.message_builder.build_results_without_messages(),
                self.stats)

        self.assertEqual(fake_console.return_value.err_output.getvalue(), '')
        self.assertEqual(fake_console.return_value.std_output.getvalue(), '')

        self.assert_ok_stats(self.stats)
コード例 #9
0
    def test_begin(self):
        cases = [(None, 'Activating:\n'), (1, 'Activating:\n'),
                 (2, 'Activating 2 objects:\n')]

        for no, case in enumerate(cases):
            with patch_get_print_console_with_buffer() as fake_console:
                self.worker.begin(case[0])

            self.assertEqual(fake_console.return_value.err_output.getvalue(),
                             '', f'Case {no}')
            self.assertEqual(fake_console.return_value.std_output.getvalue(),
                             case[1], f'Case {no}')
コード例 #10
0
    def test_handle_results_with_warnings_and_stop(self):
        self.worker.warnings_as_errors = True

        with self.assertRaises(sap.cli.wb.StopObjectActivation) as caught, \
             patch_get_print_console_with_buffer() as fake_console:
            self.worker.handle_results(
                'CL_NO_MESSAGES', self.activated_object,
                self.message_builder.build_results_with_warnings(), self.stats)

        self.assert_warning_message_output(fake_console)
        self.assert_warning_stats(caught.exception.stats)
        self.assertEqual(caught.exception.stats.errors, 1)
コード例 #11
0
    def test_start_object(self):
        cases = [('CL_NONE', 1, None, '* CL_NONE\n'),
                 ('CL_ONE', 1, 1, '* CL_ONE\n'),
                 ('CL_TWO', 1, 2, '* CL_TWO (1/2)\n')]

        for no, case in enumerate(cases):
            with patch_get_print_console_with_buffer() as fake_console:
                self.worker.start_object(case[0], case[1], case[2])

            self.assertEqual(fake_console.return_value.err_output.getvalue(),
                             '', f'Case {no}')
            self.assertEqual(fake_console.return_value.std_output.getvalue(),
                             case[3], f'Case {no}')
コード例 #12
0
    def test_activate_sequentially(self):
        with patch('sap.adt.wb.try_activate') as fake_try_activate, \
             patch_get_print_console_with_buffer() as fake_console:

            fake_try_activate.return_value = (
                self.message_builder.build_results_without_messages(), None)
            items = (itm for itm in [('mock_obj_name', self.activated_object)])
            stats = self.worker.activate_sequentially(items, count=2)

        self.assertEqual(fake_console.return_value.err_output.getvalue(), '')
        self.assertEqual(fake_console.return_value.std_output.getvalue(),
                         '''Activating 2 objects:
* mock_obj_name (1/2)
''')

        self.assert_ok_stats(stats)
コード例 #13
0
    def test_cli_ddl_activate_defaults(self, fake_ddl, fake_activate):
        instances = []

        def add_instance(conn, name):
            ddl = Mock()
            ddl.name = name

            instances.append(ddl)
            return ddl

        fake_ddl.side_effect = add_instance

        fake_conn = Mock()

        fake_activate.return_value = (sap.adt.wb.CheckResults(), None)
        args = parse_args(['activate', 'myusers', 'mygroups'])
        with patch_get_print_console_with_buffer() as fake_get_console:
            args.execute(fake_conn, args)

        self.assertEqual(
            fake_ddl.mock_calls,
            [call(fake_conn, 'myusers'),
             call(fake_conn, 'mygroups')])

        self.assertEqual(instances[0].name, 'myusers')
        self.assertEqual(instances[1].name, 'mygroups')

        self.assertEqual(
            fake_activate.mock_calls,
            [call(instances[0]), call(instances[1])])

        self.assertEqual(fake_get_console.return_value.err_output.getvalue(),
                         '')
        self.assertEqual(
            fake_get_console.return_value.std_output.getvalue(),
            '''Activating 2 objects:
* myusers (1/2)
* mygroups (2/2)
Activation has finished
Warnings: 0
Errors: 0
''')
コード例 #14
0
    def test_inactiveobjects_list(self, fake_fetch):
        conn = Mock()

        ioc_list_builder = IOCObjectListBuilder()
        ioc_class = ioc_list_builder.add_class('CL_PARENT_CLASS')
        ioc_class_method = ioc_list_builder.add_class_method(ioc_class, 'RUN')
        ioc_list_builder.add_class('CL_ANOTHER_CLASS')

        child_of_child = sap.adt.wb.IOCEntry()
        child_of_child.object = sap.adt.wb.IOCEntryData()
        child_of_child.object.reference.name = 'FAKE'
        child_of_child.object.reference.typ = 'SAPCLI/PYTEST'
        child_of_child.object.reference.parent_uri = ioc_class_method.object.uri

        ioc_list_builder.objects.entries.append(child_of_child)

        # BEGIN: malicious re-add already added objects
        # needed to test all statements of the function inactiveobjects_list
        ioc_list_builder.objects.entries.append(ioc_class)
        ioc_list_builder.objects.entries.append(ioc_class_method)
        # END

        fake_fetch.return_value = ioc_list_builder.objects

        args = INACTIVEOBJECTS_PARSER.parse('list')

        std_output = StringIO()
        err_output = StringIO()

        with patch_get_print_console_with_buffer() as fake_get_console:
            args.execute(conn, args)

        self.assertEqual("",
                         fake_get_console.return_value.err_output.getvalue())
        self.assertEqual(
            fake_get_console.return_value.std_output.getvalue(),
            """CL_PARENT_CLASS (CLAS/OC)
 + CL_PARENT_CLASS===RUN (CLAS/OC/M)
CL_ANOTHER_CLASS (CLAS/OC)
FAKE (SAPCLI/PYTEST)
""")