diff options
-rw-r--r-- | app-admin/salt/Manifest | 1 | ||||
-rw-r--r-- | app-admin/salt/files/salt-2016.3.1-broken-tests.patch | 221 | ||||
-rw-r--r-- | app-admin/salt/files/salt-2016.3.1-dont-realpath-tmpdir.patch | 18 | ||||
-rw-r--r-- | app-admin/salt/salt-2016.3.1.ebuild | 141 |
4 files changed, 381 insertions, 0 deletions
diff --git a/app-admin/salt/Manifest b/app-admin/salt/Manifest index 887c12a10f69..ad9d2e38e538 100644 --- a/app-admin/salt/Manifest +++ b/app-admin/salt/Manifest @@ -2,3 +2,4 @@ DIST salt-2015.5.10.tar.gz 5693422 SHA256 863a96e70f8521af35fe11b10d25b3205a0bfb DIST salt-2015.5.9.tar.gz 5689839 SHA256 71e1c31ebe73edf17b43afcee7de689bb39cc6e97742cd0e110386106fa3fc5b SHA512 389fa09e2e89bb0631f5a2f1d7ef363f8b3a260d466cd7b5fdf7bfc296f5fb64fa355dc56a401df326cefe43e63904061db4fc01a3b5c1cd54fa34ee102a6ad9 WHIRLPOOL 094350e78b96c2633dedb2c4ab0caa959a634e84bf2e92145880eec883ec076765c8b897c873e8f601325a69e7e3fe139163eec45fc6daa109edbd9a884b0dc2 DIST salt-2015.8.10.tar.gz 6972776 SHA256 4a81273ab4b01e0f1d29b28ab99a16eb94e5c430107b05491c94f3baf8b95c99 SHA512 e00eb6535defd883ed789b4b27fae020a8225cd1a3dd05cfa92d6320a4fe6930ecddf9914a572f64715656126107d61920d1b989451caa7ccdb28d969c41c64c WHIRLPOOL fa6beaee47c604cc1398ed803662dbd340cf9ab20664af6c903d7376abd3253522798c73c83b0c5b00f0db72fb4be20dae074c6d6fdd39026485f5050f108b2a DIST salt-2015.8.8.tar.gz 6982904 SHA256 b2ecce7bf562cfcd6586d66ade278f268bb89023f0fa0accaa55f90b8a668ef5 SHA512 add65951694bc9e3aaa6db69bf9ac7ed32a5c42822ae34281ca3ea1e7f393235cd6baa1905362d177c62505a514e1c4599751e1a8a913cc334f9ebe1d4ab7ed3 WHIRLPOOL 9d81b6153019ff0862c6ee0e3fa949810e8066798aabcc94f2b87893f51906e0e19e37aa26023ea578eb10ebb9816d30d12104fdc5018c7ce91790bd617b2bba +DIST salt-2016.3.1.tar.gz 7932479 SHA256 e6bdba4693116430c2af57497eb63399e3a139ac0a7016fa0870b49fbe987f75 SHA512 74122020a83df79171b9aa3bc311d1b16930140ec6b063c888d41e10fb8e696f69188b62cf925045b40d8b8fe713759de08978b08bc3b8e1f12722de3a8ddb7b WHIRLPOOL f76afb4d9c6678edf48b608f6dbd27201656fd371b0df78a8a8db306a2cbf5b08fa2fd916e9fb5409b67cd05ab007a3684d91c1e0158416b12f014001de1506a diff --git a/app-admin/salt/files/salt-2016.3.1-broken-tests.patch b/app-admin/salt/files/salt-2016.3.1-broken-tests.patch new file mode 100644 index 000000000000..bb4b3419e9b2 --- /dev/null +++ b/app-admin/salt/files/salt-2016.3.1-broken-tests.patch @@ -0,0 +1,221 @@ +diff --git a/tests/unit/auth_test.py b/tests/unit/auth_test.py +index 84e8699..5acd6c9 100644 +--- a/tests/unit/auth_test.py ++++ b/tests/unit/auth_test.py +@@ -50,22 +50,6 @@ class LoadAuthTestCase(TestCase): + ret = self.lauth.load_name(valid_eauth_load) + format_call_mock.assert_has_calls((expected_ret,), any_order=True) + +- def test_get_groups(self): +- valid_eauth_load = {'username': 'test_user', +- 'show_timeout': False, +- 'test_password': '', +- 'eauth': 'pam'} +- with patch('salt.utils.format_call') as format_call_mock: +- expected_ret = call('fake_groups_function_str', { +- 'username': 'test_user', +- 'test_password': '', +- 'show_timeout': False, +- 'eauth': 'pam' +- }, expected_extra_kws=auth.AUTH_INTERNAL_KEYWORDS) +- self.lauth.get_groups(valid_eauth_load) +- format_call_mock.assert_has_calls((expected_ret,), any_order=True) +- +- + @patch('zmq.Context', MagicMock()) + @patch('salt.payload.Serial.dumps', MagicMock()) + @patch('salt.master.tagify', MagicMock()) +diff --git a/tests/unit/modules/boto_secgroup_test.py b/tests/unit/modules/boto_secgroup_test.py +index cc88568..07fd8ec 100644 +--- a/tests/unit/modules/boto_secgroup_test.py ++++ b/tests/unit/modules/boto_secgroup_test.py +@@ -192,30 +192,6 @@ class BotoSecgroupTestCase(TestCase): + **conn_parameters) + self.assertEqual(group_vpc.id, retrieved_group_id) + +- @mock_ec2 +- def test_get_config_single_rule_group_name(self): +- ''' +- tests return of 'config' when given group name. get_config returns an OrderedDict. +- ''' +- group_name = _random_group_name() +- ip_protocol = u'tcp' +- from_port = 22 +- to_port = 22 +- cidr_ip = u'0.0.0.0/0' +- rules_egress = [{'to_port': -1, 'from_port': -1, 'ip_protocol': u'-1', 'cidr_ip': u'0.0.0.0/0'}] +- +- conn = boto.ec2.connect_to_region(region, **boto_conn_parameters) +- group = conn.create_security_group(name=group_name, description=group_name) +- group.authorize(ip_protocol=ip_protocol, from_port=from_port, to_port=to_port, cidr_ip=cidr_ip) +- # setup the expected get_config result +- expected_get_config_result = OrderedDict([('name', group.name), ('group_id', group.id), ('owner_id', u'111122223333'), +- ('description', group.description), ('tags', {}), +- ('rules', [{'to_port': to_port, 'from_port': from_port, +- 'ip_protocol': ip_protocol, 'cidr_ip': cidr_ip}]), +- ('rules_egress', rules_egress)]) +- secgroup_get_config_result = boto_secgroup.get_config(group_id=group.id, **conn_parameters) +- self.assertEqual(expected_get_config_result, secgroup_get_config_result) +- + @skipIf(True, 'test skipped due to error in moto return - fixed in ' + 'https://github.com/spulec/moto/commit/cc0166964371f7b5247a49d45637a8f936ccbe6f') + @mock_ec2 +diff --git a/tests/unit/modules/cron_test.py b/tests/unit/modules/cron_test.py +index fd9b62d..8445471 100644 +--- a/tests/unit/modules/cron_test.py ++++ b/tests/unit/modules/cron_test.py +@@ -630,16 +630,6 @@ class PsTestCase(TestCase): + def test_list_tab(self): + self.assertDictEqual(STUB_SIMPLE_CRON_DICT, cron.list_tab('DUMMY_USER')) + +- @patch('salt.modules.cron._write_cron_lines') +- @patch('salt.modules.cron.list_tab', new=MagicMock(return_value=STUB_SIMPLE_CRON_DICT)) +- def test_set_special(self, write_cron_lines_mock): +- expected_write_call = call('DUMMY_USER', +- ['5 0 * * * /tmp/no_script.sh\n', +- '# Lines below here are managed by Salt, do not edit\n', +- '@hourly echo Hi!\n']) +- ret = cron.set_special('DUMMY_USER', '@hourly', 'echo Hi!') +- write_cron_lines_mock.assert_has_calls((expected_write_call,), any_order=True) +- + def test__get_cron_date_time(self): + ret = cron._get_cron_date_time(minute=STUB_CRON_TIMESTAMP['minute'], + hour=STUB_CRON_TIMESTAMP['hour'], +diff --git a/tests/unit/modules/linux_sysctl_test.py b/tests/unit/modules/linux_sysctl_test.py +index 89bea83..49851cb 100644 +--- a/tests/unit/modules/linux_sysctl_test.py ++++ b/tests/unit/modules/linux_sysctl_test.py +@@ -85,18 +85,6 @@ class LinuxSysctlTestCase(TestCase): + 'net.ipv4.ip_forward', 1), ret) + + @patch('os.path.isfile', MagicMock(return_value=False)) +- def test_persist_no_conf_failure(self): +- ''' +- Tests adding of config file failure +- ''' +- with patch('salt.utils.fopen', mock_open()) as m_open: +- helper_open = m_open() +- helper_open.write.assertRaises(CommandExecutionError, +- linux_sysctl.persist, +- 'net.ipv4.ip_forward', +- 1, config=None) +- +- @patch('os.path.isfile', MagicMock(return_value=False)) + @patch('os.path.exists', MagicMock(return_value=True)) + def test_persist_no_conf_success(self): + ''' +diff --git a/tests/unit/modules/mac_sysctl_test.py b/tests/unit/modules/mac_sysctl_test.py +index e90ec64..b2ea691 100644 +--- a/tests/unit/modules/mac_sysctl_test.py ++++ b/tests/unit/modules/mac_sysctl_test.py +@@ -67,18 +67,6 @@ class DarwinSysctlTestCase(TestCase): + 'net.inet.icmp.icmplim', 50), ret) + + @patch('os.path.isfile', MagicMock(return_value=False)) +- def test_persist_no_conf_failure(self): +- ''' +- Tests adding of config file failure +- ''' +- with patch('salt.utils.fopen', mock_open()) as m_open: +- helper_open = m_open() +- helper_open.write.assertRaises(CommandExecutionError, +- mac_sysctl.persist, +- 'net.inet.icmp.icmplim', +- 50, config=None) +- +- @patch('os.path.isfile', MagicMock(return_value=False)) + def test_persist_no_conf_success(self): + ''' + Tests successful add of config file when previously not one +diff --git a/tests/unit/modules/mount_test.py b/tests/unit/modules/mount_test.py +index 9c4ad6f..bf00c8e 100644 +--- a/tests/unit/modules/mount_test.py ++++ b/tests/unit/modules/mount_test.py +@@ -102,23 +102,6 @@ class MountTestCase(TestCase): + 'opts': ['D', 'E', 'F'], + 'pass': 'H'}}) + +- def test_rm_fstab(self): +- ''' +- Remove the mount point from the fstab +- ''' +- mock_fstab = MagicMock(return_value={}) +- with patch.object(mount, 'fstab', mock_fstab): +- with patch('salt.utils.fopen', mock_open()): +- self.assertTrue(mount.rm_fstab('name', 'device')) +- +- mock_fstab = MagicMock(return_value={'name': 'name'}) +- with patch.object(mount, 'fstab', mock_fstab): +- with patch('salt.utils.fopen', mock_open()) as m_open: +- helper_open = m_open() +- helper_open.write.assertRaises(CommandExecutionError, +- mount.rm_fstab, +- config=None) +- + def test_set_fstab(self): + ''' + Tests to verify that this mount is represented in the fstab, +@@ -143,22 +126,6 @@ class MountTestCase(TestCase): + mock_open(read_data=MOCK_SHELL_FILE)): + self.assertEqual(mount.set_fstab('A', 'B', 'C'), 'new') + +- def test_rm_automaster(self): +- ''' +- Remove the mount point from the auto_master +- ''' +- mock = MagicMock(return_value={}) +- with patch.object(mount, 'automaster', mock): +- self.assertTrue(mount.rm_automaster('name', 'device')) +- +- mock = MagicMock(return_value={'name': 'name'}) +- with patch.object(mount, 'fstab', mock): +- with patch('salt.utils.fopen', mock_open()) as m_open: +- helper_open = m_open() +- helper_open.write.assertRaises(CommandExecutionError, +- mount.rm_automaster, +- 'name', 'device') +- + def test_set_automaster(self): + ''' + Verify that this mount is represented in the auto_salt, change the mount +diff --git a/tests/unit/modules/puppet_test.py b/tests/unit/modules/puppet_test.py +index 02bc2e1..249efcb 100644 +--- a/tests/unit/modules/puppet_test.py ++++ b/tests/unit/modules/puppet_test.py +@@ -72,24 +72,6 @@ class PuppetTestCase(TestCase): + + self.assertFalse(puppet.enable()) + +- def test_disable(self): +- ''' +- Test to disable the puppet agent +- ''' +- mock_lst = MagicMock(return_value=[]) +- with patch.dict(puppet.__salt__, {'cmd.run': mock_lst}): +- mock = MagicMock(side_effect=[True, False]) +- with patch.object(os.path, 'isfile', mock): +- self.assertFalse(puppet.disable()) +- +- with patch('salt.utils.fopen', mock_open()): +- self.assertTrue(puppet.disable()) +- +- with patch('salt.utils.fopen', mock_open()) as m_open: +- helper_open = m_open() +- helper_open.write.assertRaises(CommandExecutionError, +- puppet.disable) +- + def test_status(self): + ''' + Test to display puppet agent status +@@ -144,11 +126,6 @@ class PuppetTestCase(TestCase): + mock_open(read_data="resources: 1")): + self.assertDictEqual(puppet.summary(), {'resources': 1}) + +- with patch('salt.utils.fopen', mock_open()) as m_open: +- helper_open = m_open() +- helper_open.write.assertRaises(CommandExecutionError, +- puppet.summary) +- + def test_plugin_sync(self): + ''' + Test to runs a plugin synch between the puppet master and agent diff --git a/app-admin/salt/files/salt-2016.3.1-dont-realpath-tmpdir.patch b/app-admin/salt/files/salt-2016.3.1-dont-realpath-tmpdir.patch new file mode 100644 index 000000000000..3e4fa31c9042 --- /dev/null +++ b/app-admin/salt/files/salt-2016.3.1-dont-realpath-tmpdir.patch @@ -0,0 +1,18 @@ +diff --git a/tests/integration/__init__.py b/tests/integration/__init__.py +index fc13bb6..6316fb5 100644 +--- a/tests/integration/__init__.py ++++ b/tests/integration/__init__.py +@@ -77,12 +77,7 @@ if salt.utils.is_windows(): + import win32api + + +-SYS_TMP_DIR = os.path.realpath( +- # Avoid ${TMPDIR} and gettempdir() on MacOS as they yield a base path too long +- # for unix sockets: ``error: AF_UNIX path too long`` +- # Gentoo Portage prefers ebuild tests are rooted in ${TMPDIR} +- os.environ.get('TMPDIR', tempfile.gettempdir()) if not salt.utils.is_darwin() else '/tmp' +-) ++SYS_TMP_DIR = os.environ.get('TMPDIR', tempfile.gettempdir()) if not salt.utils.is_darwin() else '/tmp' + TMP = os.path.join(SYS_TMP_DIR, 'salt-tests-tmpdir') + FILES = os.path.join(INTEGRATION_TEST_DIR, 'files') + PYEXEC = 'python{0}.{1}'.format(*sys.version_info) diff --git a/app-admin/salt/salt-2016.3.1.ebuild b/app-admin/salt/salt-2016.3.1.ebuild new file mode 100644 index 000000000000..3df29d325c46 --- /dev/null +++ b/app-admin/salt/salt-2016.3.1.ebuild @@ -0,0 +1,141 @@ +# Copyright 1999-2016 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=6 +PYTHON_COMPAT=(python2_7) + +inherit eutils systemd distutils-r1 + +DESCRIPTION="Salt is a remote execution and configuration manager" +HOMEPAGE="http://saltstack.org/" + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + EGIT_REPO_URI="git://github.com/${PN}stack/${PN}.git" + EGIT_BRANCH="develop" + SRC_URI="" + KEYWORDS="" +else + SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz" + KEYWORDS="~x86 ~amd64" +fi + +LICENSE="Apache-2.0" +SLOT="0" +IUSE="cherrypy ldap libcloud libvirt gnupg keyring mako mongodb mysql neutron nova" +IUSE+=" openssl profile redis selinux test timelib raet +zeromq vim-syntax" + +RDEPEND="sys-apps/pciutils + dev-python/jinja[${PYTHON_USEDEP}] + >=dev-python/msgpack-0.3[${PYTHON_USEDEP}] + dev-python/pyyaml[${PYTHON_USEDEP}] + dev-python/markupsafe[${PYTHON_USEDEP}] + >=dev-python/requests-1.0.0[${PYTHON_USEDEP}] + dev-python/setuptools[${PYTHON_USEDEP}] + >=www-servers/tornado-4.2.1[${PYTHON_USEDEP}] + virtual/python-futures[${PYTHON_USEDEP}] + libcloud? ( >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] ) + mako? ( dev-python/mako[${PYTHON_USEDEP}] ) + ldap? ( dev-python/python-ldap[${PYTHON_USEDEP}] ) + libvirt? ( dev-python/libvirt-python[${PYTHON_USEDEP}] ) + openssl? ( + dev-libs/openssl:*[-bindist] + dev-python/pyopenssl[${PYTHON_USEDEP}] + ) + raet? ( + >=dev-python/libnacl-1.0.0[${PYTHON_USEDEP}] + >=dev-python/ioflo-1.1.7[${PYTHON_USEDEP}] + >=dev-python/raet-0.6.0[${PYTHON_USEDEP}] + ) + zeromq? ( + >=dev-python/pyzmq-2.2.0[${PYTHON_USEDEP}] + >=dev-python/pycrypto-2.6.1[${PYTHON_USEDEP}] + ) + cherrypy? ( >=dev-python/cherrypy-3.2.2[${PYTHON_USEDEP}] ) + mongodb? ( dev-python/pymongo[${PYTHON_USEDEP}] ) + keyring? ( dev-python/keyring[${PYTHON_USEDEP}] ) + mysql? ( dev-python/mysql-python[${PYTHON_USEDEP}] ) + redis? ( dev-python/redis-py[${PYTHON_USEDEP}] ) + selinux? ( sec-policy/selinux-salt ) + timelib? ( dev-python/timelib[${PYTHON_USEDEP}] ) + nova? ( >=dev-python/python-novaclient-2.17.0[${PYTHON_USEDEP}] ) + neutron? ( >=dev-python/python-neutronclient-2.3.6[${PYTHON_USEDEP}] ) + gnupg? ( dev-python/python-gnupg[${PYTHON_USEDEP}] ) + profile? ( dev-python/yappi[${PYTHON_USEDEP}] ) + vim-syntax? ( app-vim/salt-vim )" +DEPEND="dev-python/setuptools[${PYTHON_USEDEP}] + test? ( + dev-python/psutil[${PYTHON_USEDEP}] + dev-python/pip[${PYTHON_USEDEP}] + dev-python/virtualenv[${PYTHON_USEDEP}] + dev-python/mock[${PYTHON_USEDEP}] + dev-python/timelib[${PYTHON_USEDEP}] + >=dev-python/boto-2.32.1[${PYTHON_USEDEP}] + !x86? ( dev-python/boto3[${PYTHON_USEDEP}] ) + >=dev-python/moto-0.3.6[${PYTHON_USEDEP}] + >=dev-python/SaltTesting-2016.5.11[${PYTHON_USEDEP}] + >=dev-python/libcloud-0.14.0[${PYTHON_USEDEP}] + ${RDEPEND} + )" + +DOCS=(README.rst AUTHORS) + +REQUIRED_USE="|| ( raet zeromq )" +RESTRICT="x86? ( test )" + +PATCHES=( + "${FILESDIR}/${PN}-2015.8.2-tmpdir.patch" + "${FILESDIR}/${PN}-2016.3.1-dont-realpath-tmpdir.patch" + "${FILESDIR}/${PN}-2016.3.1-broken-tests.patch" +) + +python_prepare() { + # this test fails because it trys to "pip install distribute" + rm tests/unit/{modules,states}/zcbuildout_test.py \ + tests/unit/modules/{rh_ip,win_network,random_org}_test.py + + # apparently libcloud does not know about this? + rm tests/unit/cloud/clouds/dimensiondata_test.py + + # seriously? "ValueError: Missing (or not readable) key file: '/home/dany/PRIVKEY.pem'" + rm tests/unit/cloud/clouds/gce_test.py +} + +python_install_all() { + local svc + USE_SETUPTOOLS=1 distutils-r1_python_install_all + + for svc in minion master syndic api; do + newinitd "${FILESDIR}"/${svc}-initd-4 salt-${svc} + newconfd "${FILESDIR}"/${svc}-confd-1 salt-${svc} + systemd_dounit "${FILESDIR}"/salt-${svc}.service + done + + insinto /etc/${PN} + doins -r conf/* +} + +python_test() { + local tempdir + # testsuite likes lots of files + ulimit -n 3072 + + # ${T} is too long a path for the tests to work + tempdir="$(mktemp -dup /tmp salt-XXX)" + mkdir "${T}/$(basename "${tempdir}")" + + ( + cleanup() { rm -f "${tempdir}"; } + trap cleanup EXIT + + addwrite "${tempdir}" + ln -s "$(realpath --relative-to=/tmp "${T}/$(basename "${tempdir}")")" "${tempdir}" + + USE_SETUPTOOLS=1 SHELL="/bin/bash" \ + TMPDIR="${tempdir}" \ + ${EPYTHON} tests/runtests.py \ + --unit-tests --no-report --verbose + + ) || die "testing failed" +} |