/tests/unit/modules/debian_ip_test.py

https://gitlab.com/ricardo.hernandez/salt · Python · 280 lines · 165 code · 47 blank · 68 comment · 24 complexity · 644ec7e58c7ff857e7251e96d233b1d4 MD5 · raw file

  1. # -*- coding: utf-8 -*-
  2. '''
  3. :codeauthor: :email:`Jayesh Kariya <jayeshk@saltstack.com>`
  4. '''
  5. # Import Python libs
  6. from __future__ import absolute_import
  7. # Import Salt Testing Libs
  8. from salttesting import TestCase, skipIf
  9. from salttesting.mock import (
  10. MagicMock,
  11. patch,
  12. NO_MOCK,
  13. NO_MOCK_REASON
  14. )
  15. # Import Salt Libs
  16. from salt.modules import debian_ip
  17. # Import third party libs
  18. import jinja2.exceptions
  19. # Globals
  20. debian_ip.__grains__ = {}
  21. debian_ip.__salt__ = {}
  22. @skipIf(NO_MOCK, NO_MOCK_REASON)
  23. class DebianIpTestCase(TestCase):
  24. '''
  25. Test cases for salt.modules.debian_ip
  26. '''
  27. # 'build_bond' function tests: 3
  28. @patch('salt.modules.debian_ip._parse_settings_bond',
  29. MagicMock(return_value={}))
  30. @patch('salt.modules.debian_ip._write_file', MagicMock(return_value=True))
  31. def test_build_bond(self):
  32. '''
  33. Test if it create a bond script in /etc/modprobe.d with the passed
  34. settings and load the bonding kernel module.
  35. '''
  36. mock = MagicMock(return_value=1)
  37. with patch.dict(debian_ip.__grains__, {'osrelease': mock}):
  38. mock = MagicMock(return_value=True)
  39. with patch.dict(debian_ip.__salt__, {'kmod.load': mock,
  40. 'pkg.install': mock}):
  41. self.assertEqual(debian_ip.build_bond('bond0'), '')
  42. @patch('salt.modules.debian_ip._parse_settings_bond',
  43. MagicMock(return_value={}))
  44. def test_build_bond_exception(self):
  45. '''
  46. Test if it create a bond script in /etc/modprobe.d with the passed
  47. settings and load the bonding kernel module.
  48. '''
  49. mock = MagicMock(return_value=1)
  50. with patch.dict(debian_ip.__grains__, {'osrelease': mock}):
  51. mock = MagicMock(side_effect=
  52. jinja2.exceptions.TemplateNotFound('error'))
  53. with patch.object(jinja2.Environment, 'get_template', mock):
  54. self.assertEqual(debian_ip.build_bond('bond0'), '')
  55. @patch('salt.modules.debian_ip._parse_settings_bond',
  56. MagicMock(return_value={}))
  57. @patch('salt.modules.debian_ip._read_temp', MagicMock(return_value=True))
  58. def test_build_bond_data(self):
  59. '''
  60. Test if it create a bond script in /etc/modprobe.d with the passed
  61. settings and load the bonding kernel module.
  62. '''
  63. mock = MagicMock(return_value=1)
  64. with patch.dict(debian_ip.__grains__, {'osrelease': mock}):
  65. self.assertTrue(debian_ip.build_bond('bond0', test='True'))
  66. # 'build_interface' function tests: 1
  67. @patch('salt.modules.debian_ip._write_file_ifaces',
  68. MagicMock(return_value='salt'))
  69. def test_build_interface(self):
  70. '''
  71. Test if it builds an interface script for a network interface.
  72. '''
  73. self.assertEqual(debian_ip.build_interface('eth0', 'eth', 'enabled'),
  74. ['s\n', 'a\n', 'l\n', 't\n'])
  75. self.assertTrue(debian_ip.build_interface('eth0', 'eth', 'enabled',
  76. test='True'))
  77. with patch.object(debian_ip, '_parse_settings_eth',
  78. MagicMock(return_value={'routes': []})):
  79. self.assertRaises(AttributeError, debian_ip.build_interface,
  80. 'eth0', 'bridge', 'enabled')
  81. self.assertRaises(AttributeError, debian_ip.build_interface,
  82. 'eth0', 'slave', 'enabled')
  83. self.assertRaises(AttributeError, debian_ip.build_interface,
  84. 'eth0', 'bond', 'enabled')
  85. self.assertTrue(debian_ip.build_interface('eth0', 'eth', 'enabled',
  86. test='True'))
  87. # 'build_routes' function tests: 2
  88. @patch('salt.modules.debian_ip._parse_routes',
  89. MagicMock(return_value={'routes': []}))
  90. @patch('salt.modules.debian_ip._write_file_routes',
  91. MagicMock(return_value=True))
  92. @patch('salt.modules.debian_ip._read_file', MagicMock(return_value='salt'))
  93. def test_build_routes(self):
  94. '''
  95. Test if it add route scripts for a network interface using up commands.
  96. '''
  97. self.assertEqual(debian_ip.build_routes('eth0'), 'saltsalt')
  98. @patch('salt.modules.debian_ip._parse_routes',
  99. MagicMock(return_value={'routes': []}))
  100. def test_build_routes_exception(self):
  101. '''
  102. Test if it add route scripts for a network interface using up commands.
  103. '''
  104. self.assertTrue(debian_ip.build_routes('eth0', test='True'))
  105. mock = MagicMock(side_effect=jinja2.exceptions.TemplateNotFound('err'))
  106. with patch.object(jinja2.Environment, 'get_template', mock):
  107. self.assertEqual(debian_ip.build_routes('eth0'), '')
  108. # 'down' function tests: 1
  109. def test_down(self):
  110. '''
  111. Test if it shutdown a network interface
  112. '''
  113. self.assertEqual(debian_ip.down('eth0', 'slave'), None)
  114. mock = MagicMock(return_value='Salt')
  115. with patch.dict(debian_ip.__salt__, {'cmd.run': mock}):
  116. self.assertEqual(debian_ip.down('eth0', 'eth'), 'Salt')
  117. # 'get_bond' function tests: 1
  118. def test_get_bond(self):
  119. '''
  120. Test if it return the content of a bond script
  121. '''
  122. self.assertEqual(debian_ip.get_bond('bond0'), '')
  123. # 'get_interface' function tests: 1
  124. def test_get_interface(self):
  125. '''
  126. Test if it return the contents of an interface script
  127. '''
  128. with patch.object(debian_ip, '_parse_interfaces',
  129. MagicMock(return_value={})):
  130. self.assertListEqual(debian_ip.get_interface('eth0'), [])
  131. mock_ret = {'lo': {'enabled': True, 'data':
  132. {'inet': {'addrfam': 'inet', 'proto': 'loopback'}}}}
  133. with patch.object(debian_ip, '_parse_interfaces',
  134. MagicMock(return_value=mock_ret)):
  135. self.assertListEqual(debian_ip.get_interface('lo'),
  136. [u'auto lo\n', u'iface lo inet loopback\n',
  137. u'\n'])
  138. mock = MagicMock(side_effect=jinja2.exceptions.TemplateNotFound
  139. ('error'))
  140. with patch.object(jinja2.Environment, 'get_template', mock):
  141. self.assertEqual(debian_ip.get_interface('lo'), '')
  142. # 'up' function tests: 1
  143. def test_up(self):
  144. '''
  145. Test if it start up a network interface
  146. '''
  147. self.assertEqual(debian_ip.down('eth0', 'slave'), None)
  148. mock = MagicMock(return_value='Salt')
  149. with patch.dict(debian_ip.__salt__, {'cmd.run': mock}):
  150. self.assertEqual(debian_ip.up('eth0', 'eth'), 'Salt')
  151. # 'get_network_settings' function tests: 1
  152. @patch('salt.modules.debian_ip._parse_hostname',
  153. MagicMock(return_value='SaltStack'))
  154. @patch('salt.modules.debian_ip._parse_domainname',
  155. MagicMock(return_value='saltstack.com'))
  156. def test_get_network_settings(self):
  157. '''
  158. Test if it return the contents of the global network script.
  159. '''
  160. with patch.dict(debian_ip.__grains__, {'osfullname': 'Ubuntu',
  161. 'osrelease': '14'}):
  162. mock_avai = MagicMock(return_value=True)
  163. with patch.dict(debian_ip.__salt__, {'service.available': mock_avai,
  164. 'service.status': mock_avai}):
  165. self.assertEqual(debian_ip.get_network_settings(),
  166. [u'NETWORKING=yes\n',
  167. u'HOSTNAME=SaltStack\n',
  168. u'DOMAIN=saltstack.com\n'])
  169. mock = MagicMock(side_effect=jinja2.exceptions.TemplateNotFound
  170. ('error'))
  171. with patch.object(jinja2.Environment, 'get_template', mock):
  172. self.assertEqual(debian_ip.get_network_settings(), '')
  173. # 'get_routes' function tests: 1
  174. @patch('salt.modules.debian_ip._read_file', MagicMock(return_value='salt'))
  175. def test_get_routes(self):
  176. '''
  177. Test if it return the routes for the interface
  178. '''
  179. self.assertEqual(debian_ip.get_routes('eth0'), 'saltsalt')
  180. # 'apply_network_settings' function tests: 1
  181. def test_apply_network_settings(self):
  182. '''
  183. Test if it apply global network configuration.
  184. '''
  185. mock = MagicMock(return_value=True)
  186. with patch.dict(debian_ip.__salt__, {'network.mod_hostname': mock,
  187. 'service.stop': mock,
  188. 'service.start': mock}):
  189. self.assertEqual(debian_ip.apply_network_settings(), True)
  190. # 'build_network_settings' function tests: 1
  191. @patch('salt.modules.debian_ip._parse_network_settings',
  192. MagicMock(return_value={'networking': 'yes',
  193. 'hostname': 'Salt.saltstack.com',
  194. 'domainname': 'saltstack.com',
  195. 'search': 'test.saltstack.com'}))
  196. @patch('salt.modules.debian_ip._write_file_network',
  197. MagicMock(return_value=True))
  198. def test_build_network_settings(self):
  199. '''
  200. Test if it build the global network script.
  201. '''
  202. with patch.dict(debian_ip.__grains__, {'osfullname': 'Ubuntu',
  203. 'osrelease': '14'}):
  204. mock = MagicMock(return_value=True)
  205. with patch.dict(debian_ip.__salt__, {'service.available': mock,
  206. 'service.disable': mock,
  207. 'service.enable': mock}):
  208. self.assertEqual(debian_ip.build_network_settings(),
  209. [u'NETWORKING=yes\n',
  210. u'HOSTNAME=Salt\n',
  211. u'DOMAIN=saltstack.com\n',
  212. u'SEARCH=test.saltstack.com\n'])
  213. mock = MagicMock(side_effect=jinja2.exceptions.TemplateNotFound
  214. ('error'))
  215. with patch.object(jinja2.Environment, 'get_template', mock):
  216. self.assertEqual(debian_ip.build_network_settings(), '')
  217. with patch.dict(debian_ip.__grains__, {'osfullname': 'Ubuntu',
  218. 'osrelease': '10'}):
  219. mock = MagicMock(return_value=True)
  220. with patch.dict(debian_ip.__salt__, {'service.available': mock,
  221. 'service.disable': mock,
  222. 'service.enable': mock}):
  223. mock = MagicMock(side_effect=jinja2.exceptions.TemplateNotFound
  224. ('error'))
  225. with patch.object(jinja2.Environment, 'get_template', mock):
  226. self.assertEqual(debian_ip.build_network_settings(), '')
  227. with patch.object(debian_ip, '_read_temp',
  228. MagicMock(return_value=True)):
  229. self.assertTrue(debian_ip.build_network_settings
  230. (test='True'))
  231. if __name__ == '__main__':
  232. from integration import run_tests
  233. run_tests(DebianIpTestCase, needs_daemon=False)