def test_sapservices_updated_already_update(self):
        '''
        Test sapservices_updated when the sapservice file is already updated
        '''

        ret = {
            'name': 'ascs',
            'changes': {},
            'result': True,
            'comment': 'sapservices file is already updated for instance ascs'
        }

        mock_retcode = MagicMock(return_value=0)
        with patch.dict(netweavermod.__salt__, {'cmd.retcode': mock_retcode}):
            assert netweavermod.sapservices_updated('ascs', 'prd', 00,
                                                    'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ERS.*\'', python_shell=True)

        ret = {
            'name': 'ers',
            'changes': {},
            'result': True,
            'comment': 'sapservices file is already updated for instance ers'
        }

        mock_retcode = MagicMock(return_value=0)
        with patch.dict(netweavermod.__salt__, {'cmd.retcode': mock_retcode}):
            assert netweavermod.sapservices_updated('ers', 'prd', 00,
                                                    'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ASCS.*\'', python_shell=True)
    def test_sapservices_updated_error(self):
        '''
        Test sapservices_updated when the there is an execution error
        '''

        ret = {
            'name': 'ascs',
            'changes': {},
            'result': False,
            'comment': 'error'
        }

        mock_retcode = MagicMock(return_value=1)
        mock_is_installed = MagicMock(
            side_effect=exceptions.CommandExecutionError('error'))
        with patch.dict(
                netweavermod.__salt__, {
                    'netweaver.is_instance_installed': mock_is_installed,
                    'cmd.retcode': mock_retcode
                }):
            assert netweavermod.sapservices_updated('ascs', 'prd', 00,
                                                    'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ERS.*\'', python_shell=True)
        mock_is_installed.assert_called_once_with(sap_instance='ENQREP',
                                                  sid='prd',
                                                  inst=00,
                                                  password='******')
    def test_sapservices_updated_no_data(self):
        '''
        Test sapservices_updated when the instance is not found
        '''

        ret = {
            'name':
            'ascs',
            'changes': {},
            'result':
            False,
            'comment':
            'the required sap instances to make these changes are not installed or running'
        }

        mock_retcode = MagicMock(return_value=1)
        mock_is_installed = MagicMock(return_value=False)
        with patch.dict(
                netweavermod.__salt__, {
                    'netweaver.is_instance_installed': mock_is_installed,
                    'cmd.retcode': mock_retcode
                }):
            assert netweavermod.sapservices_updated('ascs', 'prd', 00,
                                                    'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ERS.*\'', python_shell=True)
        mock_is_installed.assert_called_once_with(sap_instance='ENQREP',
                                                  sid='prd',
                                                  inst=00,
                                                  password='******')
    def test_sapservices_updated_invalid_instance(self):
        '''
        Test sapservices_updated when the instance is invalid
        '''

        ret = {
            'name':
            'other',
            'changes': {},
            'result':
            False,
            'comment':
            'invalid sap_instance. Only \'ascs\' and \'ers\' are valid options'
        }

        assert netweavermod.sapservices_updated('other', 'prd', 00,
                                                'pass') == ret
    def test_sapservices_updated_test(self):
        '''
        Test sapservices_updated using test mode
        '''

        ret = {
            'name': 'ascs',
            'changes': {
                'sap_instance': 'ascs'
            },
            'result': None,
            'comment': 'sapservices of the instance ascs would be updated'
        }

        mock_retcode = MagicMock(return_value=1)
        with patch.dict(netweavermod.__salt__, {'cmd.retcode': mock_retcode}):
            with patch.dict(netweavermod.__opts__, {'test': True}):
                assert netweavermod.sapservices_updated(
                    'ascs', 'prd', 00, 'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ERS.*\'', python_shell=True)
    def test_sapservices_updated_correct(self):
        '''
        Test sapservices_updated when it is done correctly
        '''

        new_profile = 'LD_LIBRARY_PATH=/usr/sap/PRD/ERS10/exe:$LD_LIBRARY_PATH; '\
        'export LD_LIBRARY_PATH; /usr/sap/PRD/ERS10/exe/sapstartsrv '\
        'pf=/usr/sap/PRD/SYS/profile/PRD_ERS10_virtual '\
        '-D -u prdadm'

        ret = {
            'name': 'ascs',
            'changes': {
                'sap_instance': 'ascs',
                'profile': new_profile
            },
            'result': True,
            'comment': '/usr/sap/sapservices file updated properly'
        }

        mock_retcode = MagicMock(return_value=1)
        mock_is_installed = MagicMock(return_value={
            'hostname': 'virtual',
            'instance': 10
        })
        mock_append = MagicMock()
        with patch.dict(
                netweavermod.__salt__, {
                    'netweaver.is_instance_installed': mock_is_installed,
                    'cmd.retcode': mock_retcode
                }):
            with patch.dict(netweavermod.__states__,
                            {'file.append': mock_append}):
                assert netweavermod.sapservices_updated(
                    'ascs', 'prd', 00, 'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ERS.*\'', python_shell=True)
        mock_is_installed.assert_called_once_with(sap_instance='ENQREP',
                                                  sid='prd',
                                                  inst=00,
                                                  password='******')
        mock_append.assert_called_once_with(name='/usr/sap/sapservices',
                                            text=new_profile)

        new_profile = 'LD_LIBRARY_PATH=/usr/sap/PRD/ASCS00/exe:$LD_LIBRARY_PATH; '\
        'export LD_LIBRARY_PATH; /usr/sap/PRD/ASCS00/exe/sapstartsrv '\
        'pf=/usr/sap/PRD/SYS/profile/PRD_ASCS00_virtual '\
        '-D -u prdadm'

        ret = {
            'name': 'ers',
            'changes': {
                'sap_instance': 'ers',
                'profile': new_profile
            },
            'result': True,
            'comment': '/usr/sap/sapservices file updated properly'
        }

        mock_retcode = MagicMock(return_value=1)
        mock_is_installed = MagicMock(return_value={
            'hostname': 'virtual',
            'instance': 00
        })
        mock_append = MagicMock()
        with patch.dict(
                netweavermod.__salt__, {
                    'netweaver.is_instance_installed': mock_is_installed,
                    'cmd.retcode': mock_retcode
                }):
            with patch.dict(netweavermod.__states__,
                            {'file.append': mock_append}):
                assert netweavermod.sapservices_updated(
                    'ers', 'prd', 10, 'pass') == ret

        mock_retcode.assert_called_once_with(
            'cat /usr/sap/sapservices | grep \'.*ASCS.*\'', python_shell=True)
        mock_is_installed.assert_called_once_with(sap_instance='MESSAGESERVER',
                                                  sid='prd',
                                                  inst=10,
                                                  password='******')
        mock_append.assert_called_once_with(name='/usr/sap/sapservices',
                                            text=new_profile)