Hello community, here is the log from the commit of package crmsh for openSUSE:Factory checked in at 2020-04-02 17:44:54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/crmsh (Old) and /work/SRC/openSUSE:Factory/.crmsh.new.3248 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "crmsh" Thu Apr 2 17:44:54 2020 rev:182 rq:790853 version:4.2.0+git.1585823626.1dd5ce1f Changes: -------- --- /work/SRC/openSUSE:Factory/crmsh/crmsh.changes 2020-03-31 17:16:49.691687913 +0200 +++ /work/SRC/openSUSE:Factory/.crmsh.new.3248/crmsh.changes 2020-04-02 17:45:17.457524679 +0200 @@ -1,0 +2,7 @@ +Thu Apr 02 10:44:30 UTC 2020 - [email protected] + +- Update to version 4.2.0+git.1585823626.1dd5ce1f: + * Low: corosync: Use with statement to open file + * Dev: unittest: change test_add_node_ucast to make whole test reentrant + +------------------------------------------------------------------- Old: ---- crmsh-4.2.0+git.1585643641.b911e2f1.tar.bz2 New: ---- crmsh-4.2.0+git.1585823626.1dd5ce1f.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ crmsh.spec ++++++ --- /var/tmp/diff_new_pack.pABwQn/_old 2020-04-02 17:45:18.445525873 +0200 +++ /var/tmp/diff_new_pack.pABwQn/_new 2020-04-02 17:45:18.449525877 +0200 @@ -36,7 +36,7 @@ Summary: High Availability cluster command-line interface License: GPL-2.0-or-later Group: %{pkg_group} -Version: 4.2.0+git.1585643641.b911e2f1 +Version: 4.2.0+git.1585823626.1dd5ce1f Release: 0 Url: http://crmsh.github.io Source0: %{name}-%{version}.tar.bz2 ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.pABwQn/_old 2020-04-02 17:45:18.481525916 +0200 +++ /var/tmp/diff_new_pack.pABwQn/_new 2020-04-02 17:45:18.481525916 +0200 @@ -5,4 +5,4 @@ <param name="url">https://github.com/liangxin1300/crmsh.git</param> <param name="changesrevision">d8dc51b4cb34964aa72e918999ebc7f03b48f3c9</param></service><service name="tar_scm"> <param name="url">https://github.com/ClusterLabs/crmsh.git</param> - <param name="changesrevision">b911e2f1e12dd566bb01d6ebe3173bab9d4bf7a9</param></service></servicedata> \ No newline at end of file + <param name="changesrevision">d696fa20dd2f583a4b465a9ad40da708f70d0eee</param></service></servicedata> \ No newline at end of file ++++++ crmsh-4.2.0+git.1585643641.b911e2f1.tar.bz2 -> crmsh-4.2.0+git.1585823626.1dd5ce1f.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.2.0+git.1585643641.b911e2f1/crmsh/corosync.py new/crmsh-4.2.0+git.1585823626.1dd5ce1f/crmsh/corosync.py --- old/crmsh-4.2.0+git.1585643641.b911e2f1/crmsh/corosync.py 2020-03-31 10:34:01.000000000 +0200 +++ new/crmsh-4.2.0+git.1585823626.1dd5ce1f/crmsh/corosync.py 2020-04-02 12:33:46.000000000 +0200 @@ -867,8 +867,8 @@ find_configured_ip(ip_list) - f = open(conf()).read() - p = Parser(f) + with open(conf()) as f: + p = Parser(f.read()) if node_id is None: node_id = get_free_nodeid(p) @@ -886,9 +886,8 @@ if p.get("quorum.device.model") == "net": p.set('quorum.two_node', '0') - f = open(conf(), 'w') - f.write(p.to_string()) - f.close() + with open(conf(), 'w') as f: + f.write(p.to_string()) def add_node(addr, name=None): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/crmsh-4.2.0+git.1585643641.b911e2f1/test/unittests/test_corosync.py new/crmsh-4.2.0+git.1585823626.1dd5ce1f/test/unittests/test_corosync.py --- old/crmsh-4.2.0+git.1585643641.b911e2f1/test/unittests/test_corosync.py 2020-03-31 10:34:01.000000000 +0200 +++ new/crmsh-4.2.0+git.1585823626.1dd5ce1f/test/unittests/test_corosync.py 2020-04-02 12:33:46.000000000 +0200 @@ -146,28 +146,68 @@ mock_open_file.assert_called_once_with(mock_conf.return_value) mock_isv6.assert_called_once_with("10.10.10.2") mock_ip_local.assert_called_once_with(False) - mock_search.assert_called_once_with("nodelist.node.ring[0-9]*_addr", "nodelist.node.ring0_addr") + # For some reason mock_search.assert_called_once_with does not work + mock_search.assert_has_calls([mock.call("nodelist.node.ring[0-9]*_addr", "nodelist.node.ring0_addr")]) - def test_add_node_ucast(self): - from crmsh.corosync import add_node_ucast, get_values + @mock.patch("crmsh.corosync.make_section") + @mock.patch("crmsh.corosync.get_values") + @mock.patch("crmsh.corosync.make_value") + @mock.patch("crmsh.corosync.get_free_nodeid") + @mock.patch("crmsh.corosync.Parser") + @mock.patch("builtins.open", create=True) + @mock.patch("crmsh.corosync.conf") + @mock.patch("crmsh.corosync.find_configured_ip") + def test_add_node_ucast(self, mock_find_ip, mock_conf, mock_open_file, mock_parser, + mock_free_id, mock_make_value, mock_get_values, mock_make_section): + mock_parser_inst = mock.Mock() + mock_conf.side_effect = ["corosync.conf", "corosync.conf"] + mock_open_read = mock.mock_open(read_data="read data") + mock_open_write = mock.mock_open() + mock_open_file.side_effect = [ + mock_open_read.return_value, + mock_open_write.return_value] + mock_parser.return_value = mock_parser_inst + mock_free_id.return_value = 2 + mock_make_value.side_effect = [["value1"], ["value2"]] + mock_get_values.return_value = [] + mock_make_section.side_effect = ["section1", "section2"] + mock_parser_inst.count.return_value = 2 + mock_parser_inst.get.return_value = "net" + mock_parser_inst.to_string.return_value = "string data" - os.environ["COROSYNC_MAIN_CONFIG_FILE"] = os.path.join(os.path.dirname(__file__), 'corosync.conf.2') + corosync.add_node_ucast(['10.10.10.1']) - exist_iplist = get_values('nodelist.node.ring0_addr') - try: - add_node_ucast(['10.10.10.11']) - except corosync.IPAlreadyConfiguredError: - self.fail("corosync.add_node_ucast raised ValueError unexpectedly!") - now_iplist = get_values('nodelist.node.ring0_addr') - self.assertEqual(len(exist_iplist) + 1, len(now_iplist)) - self.assertTrue('10.10.10.11' in get_values('nodelist.node.ring0_addr')) - - # bsc#1127095, 1127096; address 10.10.10.11 already exist - with self.assertRaises(corosync.IPAlreadyConfiguredError) as err: - add_node_ucast(['10.10.10.11']) - self.assertEqual("IP 10.10.10.11 was already configured", str(err.exception)) - now_iplist = get_values('nodelist.node.ring0_addr') - self.assertEqual(len(exist_iplist) + 1, len(now_iplist)) + mock_find_ip.assert_called_once_with(['10.10.10.1']) + mock_open_file.assert_has_calls([ + mock.call("corosync.conf"), + mock.call("corosync.conf", 'w') + ]) + file_handle = mock_open_read.return_value.__enter__.return_value + file_handle.read.assert_called_once_with() + mock_parser.assert_called_once_with("read data") + mock_free_id.assert_called_once_with(mock_parser_inst) + mock_make_value.assert_has_calls([ + mock.call('nodelist.node.ring0_addr', '10.10.10.1'), + mock.call('nodelist.node.nodeid', '2') + ]) + mock_get_values.assert_called_once_with("nodelist.node.ring0_addr") + mock_make_section.assert_has_calls([ + mock.call('nodelist', []), + mock.call('nodelist.node', ["value1", "value2"]) + ]) + mock_parser_inst.add.assert_has_calls([ + mock.call('', 'section1'), + mock.call('nodelist', 'section2') + ]) + mock_parser_inst.count.assert_called_once_with("nodelist.node") + mock_parser_inst.set.assert_has_calls([ + mock.call('quorum.two_node', '1'), + mock.call('quorum.two_node', '0') + ]) + mock_parser_inst.get.assert_called_once_with('quorum.device.model') + mock_parser_inst.to_string.assert_called_once_with() + file_handle = mock_open_write.return_value.__enter__.return_value + file_handle.write.assert_called_once_with("string data") def test_add_node_nodelist(self): from crmsh.corosync import make_section, make_value, get_free_nodeid
