Ejemplo n.º 1
0
    def test_ensure_mapping_uninitialized(self):
        attr = 'get_interfaces'
        with mock.patch.object(ip.IPManager, attr) as get_ifaces:
            mgr = ip.IPManager()
            mgr.ensure_mapping()

            get_ifaces.assert_called_once_with()
Ejemplo n.º 2
0
def configure_gunicorn():
    """
    """
    mgr = ip.IPManager()

    listen_ip = mgr.get_management_address(ensure_configuration=True)

    if not listen_ip:
        sys.stderr.write('Unable to bring up first interface (ge0)!\n')
        sys.exit(1)

    args = {'host': listen_ip,
            'port': defaults.API_SERVICE}

    config = """
    import multiprocessing

    bind = '[%(host)s]:%(port)d'
    workers = workers = multiprocessing.cpu_count() * 2 + 1
    backlog = 2048
    worker_class ="sync"
    debug = False
    daemon = True
    pidfile = "/var/run/gunicorn.pid"
    logfile = "/tmp/gunicorn.log"
    """
    config = textwrap.dedent(config % args).lstrip()

    try:
        open('/etc/akanda_gunicorn_config', 'w+').write(config)
        sys.stderr.write('http configured to listen on %s\n' % listen_ip)
    except:
        sys.stderr.write('Unable to write gunicorn configuration file.')
Ejemplo n.º 3
0
    def test_address_add(self):
        cmd = '/sbin/ip'
        v4 = netaddr.IPNetwork('192.168.105.2/24')
        v6 = netaddr.IPNetwork('fdca:3ba5:a17a:acda:20c:29ff:fe94:723d/64')
        iface = mock.Mock(all_addresses=[v4, v6], ifname='em0')
        old_iface = mock.Mock(all_addresses=[], ifname='em0')

        mgr = ip.IPManager()
        with mock.patch.object(mgr, 'generic_to_host',
                               lambda x: x.replace('ge', 'em')):
            mgr._update_addresses('em0', iface, old_iface)
            assert self.mock_execute.call_args_list == [
                mock.call([
                    cmd, 'addr', 'add', '192.168.105.2/24', 'brd', '+', 'dev',
                    'em0'
                ], 'sudo'),
                mock.call([cmd, 'link', 'set', 'em0', 'up'], 'sudo'),
                mock.call([cmd, 'addr', 'show', 'em0']),
                mock.call([
                    cmd, '-6', 'addr', 'add',
                    'fdca:3ba5:a17a:acda:20c:29ff:fe94:723d/64', 'dev', 'em0'
                ], 'sudo'),
                mock.call([cmd, 'link', 'set', 'em0', 'up'], 'sudo'),
                mock.call([cmd, 'addr', 'show', 'em0'])
            ]
Ejemplo n.º 4
0
    def test_ensure_mapping_initialized(self):
        attr = 'get_interfaces'
        with mock.patch.object(ip.IPManager, attr) as get_ifaces:
            mgr = ip.IPManager()
            mgr.host_mapping['em0'] = 'ge0'
            mgr.ensure_mapping()

            self.assertEqual(get_ifaces.call_count, 0)
Ejemplo n.º 5
0
 def test_dad_for_external(self):
     mgr = ip.IPManager()
     with mock.patch.object(mgr, 'generic_to_host', lambda x: x):
         mgr.disable_duplicate_address_detection(
             models.Network('ABC123',
                            models.Interface('eth1'),
                            network_type=models.Network.TYPE_EXTERNAL))
         assert self.mock_execute.call_count == 0
Ejemplo n.º 6
0
    def test_update_interfaces(self):
        iface_a = mock.Mock()
        iface_b = mock.Mock()

        attr = 'update_interface'
        with mock.patch.object(ip.IPManager, attr) as update:
            mgr = ip.IPManager()
            mgr.update_interfaces([iface_a, iface_b])
            update.assert_has_calls([mock.call(iface_a), mock.call(iface_b)])
Ejemplo n.º 7
0
 def update_hosts(self, config):
     mgr = ip.IPManager()
     listen_ip = mgr.get_management_address()
     config_data = [
         '127.0.0.1  localhost',
         '::1  localhost ip6-localhost ip6-loopback',
         '%s  %s' % (listen_ip, config.hostname)
     ]
     utils.replace_file('/tmp/hosts', '\n'.join(config_data))
     utils.execute(['mv', '/tmp/hosts', '/etc/hosts'], self.root_helper)
Ejemplo n.º 8
0
    def test_update_addresses(self):
        iface = mock.Mock()
        old_iface = mock.Mock()

        with mock.patch.object(ip.IPManager, '_update_set') as us:
            mgr = ip.IPManager()
            mgr._update_addresses('em0', iface, old_iface)

            us.assert_called_once_with('em0', iface, old_iface,
                                       'all_addresses', mock.ANY, mock.ANY,
                                       mock.ANY)
Ejemplo n.º 9
0
 def test_dad_for_internal(self):
     mgr = ip.IPManager()
     with mock.patch.object(mgr, 'generic_to_host', lambda x: x):
         mgr.disable_duplicate_address_detection(
             models.Network('ABC123',
                            models.Interface('eth2'),
                            network_type=models.Network.TYPE_INTERNAL))
     assert self.mock_execute.call_count == 1
     assert self.mock_execute.call_args_list == [
         mock.call(['sysctl', '-w', 'net.ipv6.conf.eth2.accept_dad=0'],
                   'sudo'),
     ]
Ejemplo n.º 10
0
    def test_down(self):
        iface = mock.Mock()
        iface.ifname = 'ge0'

        mgr = ip.IPManager()
        mgr.host_mapping = {'em0': 'ge0'}
        mgr.generic_mapping = {'ge0': 'em0'}

        mgr.down(iface)

        self.mock_execute.assert_has_calls(
            [mock.call(['/sbin/ip', 'link', 'set', 'em0', 'down'], 'sudo')])
Ejemplo n.º 11
0
    def test_update_set_no_diff(self):
        iface = mock.Mock()
        iface.all_addresses = ['a', 'b']

        old_iface = mock.Mock()
        old_iface.all_addresses = ['a', 'b']

        add = lambda g: ('em0', 'add', g)
        delete = lambda g: ('em0', 'del', g)

        mgr = ip.IPManager()
        mgr._update_set('em0', iface, old_iface, 'all_addresses', add, delete)
        self.assertEqual(self.mock_execute.call_count, 0)
Ejemplo n.º 12
0
    def test_get_management_address(self):
        # Mark eth0 as DOWN
        output = """2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether fa:16:3e:34:ba:28 brd ff:ff:ff:ff:ff:ff
       valid_lft forever preferred_lft forever"""  # noqa

        fake_output = lambda *x: output
        with mock.patch.object(ip.IPManager, 'do', fake_output):
            mgr = ip.IPManager()
            addr = mgr.get_management_address()
            assert addr == 'fdca:3ba5:a17a:acda:f816:3eff:fe34:ba28'
            assert self.mock_execute.call_args_list == [
                mock.call(['/sbin/ip', 'link', 'set', 'eth0', 'up'], 'sudo'),
            ]
Ejemplo n.º 13
0
    def test_get_interfaces(self):
        iface_a = mock.Mock()
        iface_a.ifname = 'em0'

        iface_b = mock.Mock()
        iface_b.ifname = 'em1'
        ifaces = 'akanda.router.drivers.ip._parse_interfaces'
        with mock.patch(ifaces) as parse:
            parse.return_value = [iface_a, iface_b]
            mgr = ip.IPManager()
            interfaces = mgr.get_interfaces()
            self.assertEqual(interfaces, [iface_a, iface_b])

        self.mock_execute.assert_has_calls(
            [mock.call(['/sbin/ip', 'addr', 'show'])])
Ejemplo n.º 14
0
    def test_get_interface(self):
        iface_a = mock.Mock()
        iface_a.ifname = 'em0'
        iface = 'akanda.router.drivers.ip._parse_interface'
        ifaces = 'akanda.router.drivers.ip._parse_interfaces'
        with mock.patch(iface) as parse:
            with mock.patch(ifaces) as pi:
                pi.return_value = [iface_a]
                parse.return_value = iface_a
                mgr = ip.IPManager()
                interface = mgr.get_interface('ge0')
                self.assertEqual(interface, iface_a)
                self.assertEqual(iface_a.ifname, 'ge0')

        self.mock_execute.assert_has_calls(
            [mock.call(['/sbin/ip', 'addr', 'show'])])
Ejemplo n.º 15
0
    def test_address_remove(self):
        cmd = '/sbin/ip'
        v4 = netaddr.IPNetwork('192.168.105.2/24')
        v6 = netaddr.IPNetwork('fdca:3ba5:a17a:acda:20c:29ff:fe94:723d/64')
        iface = mock.Mock(all_addresses=[])
        old_iface = mock.Mock(all_addresses=[v4, v6])

        mgr = ip.IPManager()
        mgr._update_addresses('em0', iface, old_iface)
        assert self.mock_execute.call_args_list == [
            mock.call(
                [cmd, 'addr', 'del', str(v4), 'dev', 'em0'], 'sudo'),
            mock.call(
                ['conntrack', '-D', '-d', str(v4.ip)], 'sudo'),
            mock.call(
                ['conntrack', '-D', '-q', str(v4.ip)], 'sudo'),
            mock.call([cmd, '-6', 'addr', 'del',
                       str(v6), 'dev', 'em0'], 'sudo'),
        ]
Ejemplo n.º 16
0
    def test_sysctl_failure(self):
        logger = ip.LOG
        logger.level = logging.DEBUG
        buff = StringIO()
        handler = logging.StreamHandler(buff)

        self.mock_execute.side_effect = RuntimeError
        mgr = ip.IPManager()
        with mock.patch.object(mgr, 'generic_to_host', lambda x: x):
            try:
                logger.addHandler(handler)
                mgr.disable_duplicate_address_detection(
                    models.Network(
                        'ABC123',
                        models.Interface('eth0'),
                        network_type=models.Network.TYPE_MANAGEMENT))
                assert 'Failed to disable v6 dad on eth0' in buff.getvalue()
            finally:
                logger.removeHandler(handler)
Ejemplo n.º 17
0
    def _update_interface_test_hlpr(self,
                                    new_iface,
                                    old_iface,
                                    ignore_link_local=True):
        mock_methods = {
            'generic_to_host': mock.Mock(return_value='em0'),
            'get_interface': mock.Mock(return_value=old_iface),
            '_update_addresses': mock.Mock()
        }

        with mock.patch.multiple(ip.IPManager, **mock_methods):
            mgr = ip.IPManager()
            mgr.update_interface(
                new_iface,
                ignore_link_local=ignore_link_local,
            )

            mock_methods['generic_to_host'].assert_called_once_with('ge0')
            mock_methods['get_interface'].assert_called_once_with('ge0')
            mock_methods['_update_addresses'].assert_called_once_with(
                'em0', new_iface, old_iface)
Ejemplo n.º 18
0
    def test_update_set(self):
        iface = mock.Mock()
        a = netaddr.IPNetwork('192.168.101.2/24')
        b = netaddr.IPNetwork('192.168.102.2/24')
        c = netaddr.IPNetwork('192.168.103.2/24')
        iface.all_addresses = [a, b]
        iface.ifname = 'em0'

        old_iface = mock.Mock()
        old_iface.all_addresses = [b, c]
        old_iface.ifname = 'em0'

        add = lambda g: ('addr', 'add', '/'.join(map(str, g)), 'dev', 'em0')
        delete = lambda g: ('addr', 'del', '/'.join(map(str, g)), 'dev', 'em0')
        mutator = lambda x: (x.ip, x.prefixlen)

        mgr = ip.IPManager()
        with mock.patch.object(mgr, 'generic_to_host',
                               lambda x: x.replace('ge', 'em')):
            mgr._update_set('em0',
                            iface,
                            old_iface,
                            'all_addresses',
                            add,
                            delete,
                            mutator=mutator)

            assert self.mock_execute.call_args_list == [
                mock.call(['/sbin/ip', 'addr', 'add',
                           str(a), 'dev', 'em0'], 'sudo'),
                mock.call(['/sbin/ip', 'link', 'set', 'em0', 'up'], 'sudo'),
                mock.call(['/sbin/ip', 'addr', 'show', 'em0']),
                mock.call(['/sbin/ip', 'addr', 'del',
                           str(c), 'dev', 'em0'], 'sudo'),
                mock.call(['conntrack', '-D', '-d',
                           str(c.ip)], 'sudo'),
                mock.call(['conntrack', '-D', '-q',
                           str(c.ip)], 'sudo'),
            ]
Ejemplo n.º 19
0
def configure_ssh():
    """
    """
    mgr = ip.IPManager()

    listen_ip = mgr.get_management_address(ensure_configuration=True)

    if not listen_ip:
        sys.stderr.write('Unable to bring up first interface (ge0)!\n')
        sys.exit(1)

    config = open('/etc/ssh/sshd_config', 'r').read()
    config = re.sub('(^|\n)(#)?(ListenAddress|AddressFamily) .*', '', config)
    config += '\n'.join([
        '',  # make sure we have a blank line at the end before adding more
        'AddressFamily inet6',
        'ListenAddress ' + listen_ip,
        'UseDNS no'
    ])
    try:
        open('/etc/ssh/sshd_config', 'w+').write(config)
        sys.stderr.write('sshd configured to listen on %s\n' % listen_ip)
    except:
        sys.stderr.write('Unable to write sshd configuration file.')
Ejemplo n.º 20
0
 def update_routes(self, cache):
     mgr = ip.IPManager()
     mgr.update_default_gateway(self.config)
     mgr.update_host_routes(self.config, cache)
Ejemplo n.º 21
0
 def __init__(self, state_path='.'):
     self.state_path = os.path.abspath(state_path)
     self.ip_mgr = ip.IPManager()
     self.ip_mgr.ensure_mapping()
     self._config = models.Configuration()
Ejemplo n.º 22
0
 def setUp(self):
     super(RouteTest, self).setUp()
     self.mgr = ip.IPManager()
     self.host_patch = mock.patch.object(self.mgr, 'generic_to_host',
                                         lambda x: x.replace('ge', 'eth'))
     self.host_patch.start()
Ejemplo n.º 23
0
 def test_is_valid(self):
     mgr = ip.IPManager()
     mgr.host_mapping = {'em0': 'ge0'}
     mgr.generic_mapping = {'ge0': 'em0'}
     self.assertTrue(mgr.is_valid('ge0'))
Ejemplo n.º 24
0
 def test_host_to_generic(self):
     mgr = ip.IPManager()
     mgr.host_mapping = {'em0': 'ge0'}
     mgr.generic_mapping = {'ge0': 'em0'}
     self.assertEqual(mgr.host_to_generic('em0'), 'ge0')
     self.assertIsNone(mgr.host_to_generic('em1'))
Ejemplo n.º 25
0
 def test_init(self):
     mgr = ip.IPManager()
     self.assertEqual(mgr.host_mapping.keys(), [])