示例#1
0
    def test_default_gateway(self, mock_routes):
        default_gateway = mock.Mock()
        default_gateway.destination = '0.0.0.0'
        mock_routes.return_value = iter((mock.Mock(), default_gateway))

        gateway = self._network.default_gateway()

        self.assertEqual(default_gateway, gateway)
示例#2
0
    def test_is_datasource_available(self):
        class CustomStrategy(strategy.BaseSearchStrategy):
            def search_data_sources(self, _):
                pass

        instance = CustomStrategy()
        good_source = mock.Mock()
        good_source.load.return_value = True
        bad_source = mock.Mock()
        bad_source.load.return_value = False

        self.assertTrue(instance.is_datasource_available(good_source))
        self.assertFalse(instance.is_datasource_available(bad_source))
示例#3
0
    def test_routes(self, mock_forward_table):
        def _same(arg):
            return arg._mock_name.encode()

        route = mock.MagicMock()
        mock_cast_result = mock.Mock()
        mock_cast_result.contents = [route]
        self._ctypes_mock.cast.return_value = mock_cast_result
        self._network_module.ws2_32.Ws2_32.inet_ntoa.side_effect = _same
        route.dwForwardIfIndex = 'dwForwardIfIndex'
        route.dwForwardProto = 'dwForwardProto'
        route.dwForwardMetric1 = 'dwForwardMetric1'
        routes = self._network.routes()

        mock_forward_table.assert_called_once_with()
        enter = mock_forward_table.return_value.__enter__
        enter.assert_called_once_with()
        exit_ = mock_forward_table.return_value.__exit__
        exit_.assert_called_once_with(None, None, None)
        self.assertEqual(1, len(routes))
        given_route = routes[0]
        self.assertEqual('dwForwardDest', given_route.destination)
        self.assertEqual('dwForwardNextHop', given_route.gateway)
        self.assertEqual('dwForwardMask', given_route.netmask)
        self.assertEqual('dwForwardIfIndex', given_route.interface)
        self.assertEqual('dwForwardMetric1', given_route.metric)
        self.assertEqual('dwForwardProto', given_route.flags)
示例#4
0
 def test_handler_config_not_modified(self, available_handlers):
     handler_type_name = 'test_handler'
     handler_cls = mock.Mock()
     available_handlers.registered_items = {handler_type_name: handler_cls}
     handler_config = {'type': handler_type_name, 'foo': 'bar'}
     expected_handler_config = handler_config.copy()
     reporting.add_configuration({'my_test_handler': handler_config})
     self.assertEqual(expected_handler_config, handler_config)
示例#5
0
 def test_looks_up_handler_by_type_and_adds_it(self, available_handlers):
     handler_type_name = 'test_handler'
     handler_cls = mock.Mock()
     available_handlers.registered_items = {handler_type_name: handler_cls}
     handler_name = 'my_test_handler'
     reporting.add_configuration(
         {handler_name: {'type': handler_type_name}})
     self.assertEqual(
         {handler_name: handler_cls.return_value},
         reporting.instantiated_handler_registry.registered_items)
示例#6
0
    def _test__heap_alloc(self, fail):
        mock_heap = mock.Mock()
        mock_size = mock.Mock()

        if fail:
            self._kernel32.HeapAlloc.return_value = None

            e = self.assertRaises(exceptions.CloudInitError,
                                  self._network_module._heap_alloc, mock_heap,
                                  mock_size)

            self.assertEqual(
                'Unable to allocate memory for the IP '
                'forward table', str(e))
        else:
            result = self._network_module._heap_alloc(mock_heap, mock_size)
            self.assertEqual(self._kernel32.HeapAlloc.return_value, result)

        self._kernel32.HeapAlloc.assert_called_once_with(
            mock_heap, 0, self._ctypes_mock.c_size_t(mock_size.value))
示例#7
0
    def test_set_metadata_ip_route_route_already_exists(
            self, mock_default_gateway, mock_routes, mock_osutils):

        mock_route = mock.Mock()
        mock_route.destination = "169.254.169.254"
        mock_routes.return_value = (mock_route, )

        self._network.set_metadata_ip_route("http://169.254.169.254")

        self.assertTrue(mock_routes.called)
        self.assertFalse(mock_default_gateway.called)
示例#8
0
    def setUp(self):
        super(TestNetworkWindows, self).setUp()

        self._ctypes_mock = mock.MagicMock()
        self._winreg_mock = mock.Mock()
        self._win32com_mock = mock.Mock()
        self._wmi_mock = mock.Mock()

        self._module_patcher = mock.patch.dict(
            'sys.modules', {
                'ctypes': self._ctypes_mock,
                'win32com': self._win32com_mock,
                'wmi': self._wmi_mock,
                'six.moves.winreg': self._winreg_mock
            })

        self._module_patcher.start()
        self._iphlpapi = mock.Mock()
        self._kernel32 = mock.Mock()
        self._ws2_32 = mock.Mock()

        self._network_module = importlib.import_module(
            'cloudinit.osys.windows.network')
        self._network_module.iphlpapi = self._iphlpapi
        self._network_module.kernel32 = self._kernel32
        self._network_module.ws2_32 = self._ws2_32

        self._network = self._network_module.Network()
示例#9
0
    def test__get_forward_table_no_memory(self):
        self._network_module._heap_alloc = mock.Mock()
        error_msg = 'Unable to allocate memory for the IP forward table'
        exc = exceptions.CloudInitError(error_msg)
        self._network_module._heap_alloc.side_effect = exc

        e = self.assertRaises(exceptions.CloudInitError,
                              self._check_raises_forward)

        self.assertEqual(error_msg, str(e))
        self._network_module._heap_alloc.assert_called_once_with(
            self._kernel32.GetProcessHeap.return_value,
            self._ctypes_mock.wintypes.ULONG.return_value)
示例#10
0
 def test_handlers_removed_if_falseish_specified(self, available_handlers):
     handler_type_name = 'test_handler'
     handler_cls = mock.Mock()
     available_handlers.registered_items = {handler_type_name: handler_cls}
     handler_name = 'my_test_handler'
     reporting.update_configuration(
         {handler_name: {
             'type': handler_type_name
         }})
     self.assertEqual(
         1, len(reporting.instantiated_handler_registry.registered_items))
     reporting.update_configuration({handler_name: None})
     self.assertEqual(
         0, len(reporting.instantiated_handler_registry.registered_items))
示例#11
0
    def setUp(self):
        super(TestWindowsGeneral, self).setUp()
        self._ctypes_mock = mock.Mock()
        self._util_mock = mock.MagicMock()
        self._module_patcher = mock.patch.dict(
            'sys.modules',
            {'ctypes': self._ctypes_mock,
             'cloudinit.osys.windows.util': self._util_mock})

        self._module_patcher.start()
        self._general_module = importlib.import_module(
            "cloudinit.osys.windows.general")
        self._kernel32 = self._general_module.kernel32
        self._general = self._general_module.General()
示例#12
0
 def test_uses_non_type_parts_of_config_dict_as_kwargs(
         self, available_handlers):
     handler_type_name = 'test_handler'
     handler_cls = mock.Mock()
     available_handlers.registered_items = {handler_type_name: handler_cls}
     extra_kwargs = {'foo': 'bar', 'bar': 'baz'}
     handler_config = extra_kwargs.copy()
     handler_config.update({'type': handler_type_name})
     handler_name = 'my_test_handler'
     reporting.update_configuration({handler_name: handler_config})
     self.assertEqual(
         handler_cls.return_value, reporting.instantiated_handler_registry.
         registered_items[handler_name])
     self.assertEqual([mock.call(**extra_kwargs)],
                      handler_cls.call_args_list)
示例#13
0
    def test__get_data(self, mock_wait_any_url, mock_path_join):
        mock_response = mock.Mock()
        response = b"test"
        mock_response.contents = response
        mock_response.encoding = 'utf-8'

        mock_wait_any_url.return_value = (None, mock_response)
        mock_path_join.return_value = mock.sentinel.path_join
        expected_logging = [
            'Getting metadata from: %s' % mock.sentinel.path_join
        ]
        with LogSnatcher('cloudinit.sources.openstack.'
                         'httpopenstack') as snatcher:
            result = self._source._get_data('test')

        self.assertEqual(expected_logging, snatcher.output)
        self.assertIsInstance(result, base.APIResponse)
        self.assertEqual('test', str(result))
        self.assertEqual(b'test', result.buffer)
示例#14
0
class UrlHelperWaitForUrlsTest(TestCase):
    @httpretty.activate
    def test_url_wait_for(self):
        urls_actions = [
            ("http://www.yahoo.com", (False, False, True)),
            ("http://www.google.com", (False, False, False)),
        ]
        urls = []
        for (url, actions) in urls_actions:
            urls.append(url)
            for worked in actions:
                if worked:
                    httpretty.register_uri(httpretty.GET,
                                           url,
                                           body=b'it worked!')
                else:
                    httpretty.register_uri(httpretty.GET,
                                           url,
                                           body=b'no worky',
                                           status=400)

        url, response = url_helper.wait_any_url(urls)
        self.assertEqual("http://www.yahoo.com", url)
        self.assertIsInstance(response, url_helper.RequestsResponse)
        self.assertEqual(response.contents, b'it worked!')

    @httpretty.activate
    @mock.patch.object(url_helper, 'now',
                       mock.Mock(side_effect=TimeJumpSideEffect(0, 100)))
    def test_url_wait_for_no_work(self):
        def request_callback(request, uri, headers):
            return (400, headers, b"no worky")

        urls = [
            "http://www.yahoo.com",
            "http://www.google.com",
        ]
        for url in urls:
            httpretty.register_uri(httpretty.GET, url, body=request_callback)

        self.assertIsNone(url_helper.wait_any_url(urls, max_wait=1))
示例#15
0
    def _test_route_add(self, mock_popen, err):
        mock_route = mock.Mock()
        mock_route.destination = mock.sentinel.destination
        mock_route.netmask = mock.sentinel.netmask
        mock_route.gateway = mock.sentinel.gateway
        args = [
            'ROUTE', 'ADD', mock.sentinel.destination, 'MASK',
            mock.sentinel.netmask, mock.sentinel.gateway
        ]
        mock_popen.return_value.returncode = err
        mock_popen.return_value.communicate.return_value = (None, err)

        if err:
            e = self.assertRaises(exceptions.CloudInitError,
                                  self._network_module.Route.add, mock_route)
            msg = "Unable to add route: %s" % err
            self.assertEqual(msg, str(e))

        else:
            self._network_module.Route.add(mock_route)
        mock_popen.assert_called_once_with(args,
                                           shell=False,
                                           stderr=subprocess.PIPE)
示例#16
0
 def test_modifying_registered_items_isnt_exposed_to_other_callers(self):
     registry = DictRegistry()
     registry.registered_items['test_item'] = mock.Mock()
     self.assertEqual({}, registry.registered_items)
示例#17
0
 def test_added_item_included_in_output(self):
     registry = DictRegistry()
     item_key, item_to_register = 'test_key', mock.Mock()
     registry.register_item(item_key, item_to_register)
     self.assertEqual({item_key: item_to_register},
                      registry.registered_items)
示例#18
0
    def test_default_gateway_no_gateway(self, mock_routes):
        mock_routes.return_value = iter((mock.Mock(), mock.Mock()))

        self.assertIsNone(self._network.default_gateway())

        mock_routes.assert_called_once_with()
示例#19
0
 def test_keys_cannot_be_replaced(self):
     registry = DictRegistry()
     item_key = 'test_key'
     registry.register_item(item_key, mock.Mock())
     self.assertRaises(ValueError, registry.register_item, item_key,
                       mock.Mock())
示例#20
0
def _fake_registry():
    return mock.Mock(registered_items={'a': mock.MagicMock(),
                                       'b': mock.MagicMock()})