Hello community,
here is the log from the commit of package python-shaptools for
openSUSE:Factory checked in at 2020-10-05 19:41:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-shaptools (Old)
and /work/SRC/openSUSE:Factory/.python-shaptools.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-shaptools"
Mon Oct 5 19:41:06 2020 rev:15 rq:839491 version:0.3.10+git.1601275579.c59c61d
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-shaptools/python-shaptools.changes
2020-09-22 21:09:40.579850365 +0200
+++
/work/SRC/openSUSE:Factory/.python-shaptools.new.4249/python-shaptools.changes
2020-10-05 19:42:59.405778441 +0200
@@ -1,0 +2,6 @@
+Thu Sep 24 12:16:46 UTC 2020 - Xabier Arbulu <[email protected]>
+
+- Add new functionalities to know the currently installed ENSA
+ version for Netweaver (only for ASCS and ERS instances)
+
+-------------------------------------------------------------------
Old:
----
python-shaptools-0.3.10+git.1600699158.46fca28.tar.gz
New:
----
python-shaptools-0.3.10+git.1601275579.c59c61d.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-shaptools.spec ++++++
--- /var/tmp/diff_new_pack.MDUI8U/_old 2020-10-05 19:42:59.909778933 +0200
+++ /var/tmp/diff_new_pack.MDUI8U/_new 2020-10-05 19:42:59.909778933 +0200
@@ -22,7 +22,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-shaptools
-Version: 0.3.10+git.1600699158.46fca28
+Version: 0.3.10+git.1601275579.c59c61d
Release: 0
Summary: Python tools to interact with SAP HANA utilities
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.MDUI8U/_old 2020-10-05 19:42:59.945778969 +0200
+++ /var/tmp/diff_new_pack.MDUI8U/_new 2020-10-05 19:42:59.945778969 +0200
@@ -5,7 +5,7 @@
<param name="exclude">.git</param>
<param name="filename">python-shaptools</param>
<param name="versionformat">@PARENT_TAG@+git.%ct.%h</param>
- <param name="revision">46fca286447ff1ec41837553dd7a4e3b14be69ec</param>
+ <param name="revision">c59c61d70ef540be0b9fd54631e4a21e8b69db66</param>
</service>
<service name="recompress" mode="disabled">
++++++ python-shaptools-0.3.10+git.1600699158.46fca28.tar.gz ->
python-shaptools-0.3.10+git.1601275579.c59c61d.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-shaptools-0.3.10+git.1600699158.46fca28/python-shaptools.changes
new/python-shaptools-0.3.10+git.1601275579.c59c61d/python-shaptools.changes
--- old/python-shaptools-0.3.10+git.1600699158.46fca28/python-shaptools.changes
2020-09-21 16:39:18.000000000 +0200
+++ new/python-shaptools-0.3.10+git.1601275579.c59c61d/python-shaptools.changes
2020-09-28 08:46:19.000000000 +0200
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Thu Sep 24 12:16:46 UTC 2020 - Xabier Arbulu <[email protected]>
+
+- Add new functionalities to know the currently installed ENSA
+ version for Netweaver (only for ASCS and ERS instances)
+
+-------------------------------------------------------------------
Thu Sep 3 06:44:31 UTC 2020 - Xabier Arbulu <[email protected]>
- Create version 0.3.10
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-shaptools-0.3.10+git.1600699158.46fca28/shaptools/netweaver.py
new/python-shaptools-0.3.10+git.1601275579.c59c61d/shaptools/netweaver.py
--- old/python-shaptools-0.3.10+git.1600699158.46fca28/shaptools/netweaver.py
2020-09-21 16:39:18.000000000 +0200
+++ new/python-shaptools-0.3.10+git.1601275579.c59c61d/shaptools/netweaver.py
2020-09-28 08:46:19.000000000 +0200
@@ -116,16 +116,20 @@
Check if ASCS instance is installed
"""
msg_server = shell.find_pattern(r'msg_server, MessageServer,.*',
processes.output)
- enserver = shell.find_pattern(r'enserver, EnqueueServer,.*',
processes.output)
- return bool(msg_server and enserver)
+ enserver_ensa1 = shell.find_pattern(r'enserver, EnqueueServer,.*',
processes.output)
+ enq_server_ensa2 = shell.find_pattern(r'enq_server, Enqueue Server
2,.*', processes.output)
+ return bool(msg_server and (enserver_ensa1 or enq_server_ensa2))
@staticmethod
def _is_ers_installed(processes):
"""
Check if ERS instance is installed
"""
- enrepserver = shell.find_pattern(r'enrepserver, EnqueueReplicator,.*',
processes.output)
- return bool(enrepserver)
+ enrepserver_ensa1 = shell.find_pattern(
+ r'enrepserver, EnqueueReplicator,.*', processes.output)
+ enq_replicator_ensa2 = shell.find_pattern(
+ r'enq_replicator, Enqueue Replicator 2,.*', processes.output)
+ return bool(enrepserver_ensa1 or enq_replicator_ensa2)
@staticmethod
def _is_app_server_installed(processes):
@@ -166,6 +170,49 @@
return state
@staticmethod
+ def _get_ascs_ensa_version(processes):
+ """
+ Get ASCS ENSA version
+ """
+ if shell.find_pattern(r'enserver, EnqueueServer,.*', processes.output):
+ return 1
+ elif shell.find_pattern(r'enq_server, Enqueue Server 2,.*',
processes.output):
+ return 2
+ raise ValueError('ASCS not installed or found')
+
+ @staticmethod
+ def _get_ers_ensa_version(processes):
+ """
+ Get ERS ENSA version
+ """
+ if shell.find_pattern(r'enrepserver, EnqueueReplicator,.*',
processes.output):
+ return 1
+ elif shell.find_pattern(r'enq_replicator, Enqueue Replicator 2,.*',
processes.output):
+ return 2
+ raise ValueError('ERS not installed or found')
+
+ def get_ensa_version(self, sap_instance):
+ """
+ Get currently installed ENSA version
+
+ Args:
+ sap_instance (str): SAP instance type. Available options: ascs, ers
+
+ Returns:
+ int: Returns the ENSA version number
+
+ Raises:
+ ValueError: ENSA system is not installed or found properly
+ """
+
+ processes = self.get_process_list(exception=True)
+ if sap_instance == 'ascs':
+ return self._get_ascs_ensa_version(processes)
+ elif sap_instance == 'ers':
+ return self._get_ers_ensa_version(processes)
+ raise ValueError('provided sap instance type is not valid:
{}'.format(sap_instance))
+
+ @staticmethod
def _remove_old_files(cwd, root_user, password, remote_host):
"""
Remove old files from SAP installation cwd folder. Only start_dir.cd
must remain
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/python-shaptools-0.3.10+git.1600699158.46fca28/tests/netweaver_test.py
new/python-shaptools-0.3.10+git.1601275579.c59c61d/tests/netweaver_test.py
--- old/python-shaptools-0.3.10+git.1600699158.46fca28/tests/netweaver_test.py
2020-09-21 16:39:18.000000000 +0200
+++ new/python-shaptools-0.3.10+git.1601275579.c59c61d/tests/netweaver_test.py
2020-09-28 08:46:19.000000000 +0200
@@ -156,7 +156,7 @@
def test_is_ascs_installed(self, mock_find_pattern):
mock_process = mock.Mock(output='output')
- mock_find_pattern.side_effect = ['found', 'found']
+ mock_find_pattern.side_effect = ['found', 'found', '']
self.assertTrue(self._netweaver._is_ascs_installed(mock_process))
@@ -166,33 +166,60 @@
])
mock_find_pattern.reset_mock()
- mock_find_pattern.side_effect = ['found', '']
+
+ mock_find_pattern.side_effect = ['found', '', 'found']
+
+ self.assertTrue(self._netweaver._is_ascs_installed(mock_process))
+
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'msg_server, MessageServer,.*', 'output'),
+ mock.call(r'enserver, EnqueueServer,.*', 'output'),
+ mock.call(r'enq_server, Enqueue Server 2,.*', 'output')
+ ])
+
+ mock_find_pattern.reset_mock()
+ mock_find_pattern.side_effect = ['found', '', '']
self.assertFalse(self._netweaver._is_ascs_installed(mock_process))
mock_find_pattern.assert_has_calls([
mock.call(r'msg_server, MessageServer,.*', 'output'),
- mock.call(r'enserver, EnqueueServer,.*', 'output')
+ mock.call(r'enserver, EnqueueServer,.*', 'output'),
+ mock.call(r'enq_server, Enqueue Server 2,.*', 'output')
])
@mock.patch('shaptools.shell.find_pattern')
def test_is_ers_installed(self, mock_find_pattern):
mock_process = mock.Mock(output='output')
- mock_find_pattern.side_effect = ['found']
+ mock_find_pattern.side_effect = ['found', '']
self.assertTrue(self._netweaver._is_ers_installed(mock_process))
- mock_find_pattern.assert_called_once_with(
- r'enrepserver, EnqueueReplicator,.*', 'output')
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enrepserver, EnqueueReplicator,.*', 'output'),
+ mock.call(r'enq_replicator, Enqueue Replicator 2,.*', 'output'),
+ ])
+
+ mock_find_pattern.reset_mock()
+ mock_find_pattern.side_effect = ['', 'found']
+
+ self.assertTrue(self._netweaver._is_ers_installed(mock_process))
+
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enrepserver, EnqueueReplicator,.*', 'output'),
+ mock.call(r'enq_replicator, Enqueue Replicator 2,.*', 'output'),
+ ])
mock_find_pattern.reset_mock()
- mock_find_pattern.side_effect = ['']
+ mock_find_pattern.side_effect = ['', '']
self.assertFalse(self._netweaver._is_ers_installed(mock_process))
- mock_find_pattern.assert_called_once_with(
- r'enrepserver, EnqueueReplicator,.*', 'output')
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enrepserver, EnqueueReplicator,.*', 'output'),
+ mock.call(r'enq_replicator, Enqueue Replicator 2,.*', 'output'),
+ ])
@mock.patch('shaptools.shell.find_pattern')
def test_is_app_server_installed(self, mock_find_pattern):
@@ -303,6 +330,91 @@
self._netweaver.get_process_list.assert_called_once_with(False)
self._netweaver._is_app_server_installed.assert_called_once_with(processes_mock)
+ @mock.patch('shaptools.shell.find_pattern')
+ def test_get_ascs_ensa_version_ensa1(self, mock_find_pattern):
+ processes = mock.Mock(output='output')
+ mock_find_pattern.side_effect = [True, False]
+ version = self._netweaver._get_ascs_ensa_version(processes)
+ self.assertTrue(version, 1)
+ mock_find_pattern.assert_called_once_with(r'enserver,
EnqueueServer,.*', 'output')
+
+ @mock.patch('shaptools.shell.find_pattern')
+ def test_get_ascs_ensa_version_ensa2(self, mock_find_pattern):
+ processes = mock.Mock(output='output')
+ mock_find_pattern.side_effect = [False, True]
+ version = self._netweaver._get_ascs_ensa_version(processes)
+ self.assertTrue(version, 2)
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enserver, EnqueueServer,.*', 'output'),
+ mock.call(r'enq_server, Enqueue Server 2,.*', 'output')
+ ])
+
+ @mock.patch('shaptools.shell.find_pattern')
+ def test_get_ascs_ensa_version_error(self, mock_find_pattern):
+ processes = mock.Mock(output='output')
+ mock_find_pattern.side_effect = [False, False]
+ with self.assertRaises(ValueError) as err:
+ self._netweaver._get_ascs_ensa_version(processes)
+ self.assertTrue('ASCS not installed or found' in str(err.exception))
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enserver, EnqueueServer,.*', 'output'),
+ mock.call(r'enq_server, Enqueue Server 2,.*', 'output')
+ ])
+
+ @mock.patch('shaptools.shell.find_pattern')
+ def test_get_ers_ensa_version_ensa1(self, mock_find_pattern):
+ processes = mock.Mock(output='output')
+ mock_find_pattern.side_effect = [True, False]
+ version = self._netweaver._get_ers_ensa_version(processes)
+ self.assertTrue(version, 1)
+ mock_find_pattern.assert_called_once_with(r'enrepserver,
EnqueueReplicator,.*', 'output')
+
+ @mock.patch('shaptools.shell.find_pattern')
+ def test_get_ers_ensa_version_ensa2(self, mock_find_pattern):
+ processes = mock.Mock(output='output')
+ mock_find_pattern.side_effect = [False, True]
+ version = self._netweaver._get_ers_ensa_version(processes)
+ self.assertTrue(version, 2)
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enrepserver, EnqueueReplicator,.*', 'output'),
+ mock.call(r'enq_replicator, Enqueue Replicator 2,.*', 'output')
+ ])
+
+ @mock.patch('shaptools.shell.find_pattern')
+ def test_get_ers_ensa_version_error(self, mock_find_pattern):
+ processes = mock.Mock(output='output')
+ mock_find_pattern.side_effect = [False, False]
+ with self.assertRaises(ValueError) as err:
+ self._netweaver._get_ers_ensa_version(processes)
+ self.assertTrue('ERS not installed or found' in str(err.exception))
+ mock_find_pattern.assert_has_calls([
+ mock.call(r'enrepserver, EnqueueReplicator,.*', 'output'),
+ mock.call(r'enq_replicator, Enqueue Replicator 2,.*', 'output')
+ ])
+
+ def test_get_ensa_version_ascs(self):
+ self._netweaver.get_process_list = mock.Mock(return_value='output')
+ self._netweaver._get_ascs_ensa_version = mock.Mock(return_value=1)
+ version = self._netweaver.get_ensa_version('ascs')
+ self.assertTrue(version, 1)
+
self._netweaver.get_process_list.assert_called_once_with(exception=True)
+
self._netweaver._get_ascs_ensa_version.assert_called_once_with('output')
+
+ def test_get_ensa_version_ers(self):
+ self._netweaver.get_process_list = mock.Mock(return_value='output')
+ self._netweaver._get_ers_ensa_version = mock.Mock(return_value=1)
+ version = self._netweaver.get_ensa_version('ers')
+ self.assertTrue(version, 1)
+
self._netweaver.get_process_list.assert_called_once_with(exception=True)
+ self._netweaver._get_ers_ensa_version.assert_called_once_with('output')
+
+ def test_get_ensa_version_error(self):
+ self._netweaver.get_process_list = mock.Mock(return_value='output')
+ with self.assertRaises(ValueError) as err:
+ self._netweaver.get_ensa_version('other')
+ self.assertTrue('provided sap instance type is not valid: other' in
str(err.exception))
+
self._netweaver.get_process_list.assert_called_once_with(exception=True)
+
@mock.patch('shaptools.shell.execute_cmd')
def test_remove_old_files(self, mock_execute_cmd):