~ubuntu-branches/ubuntu/vivid/neutron/vivid

« back to all changes in this revision

Viewing changes to neutron/tests/unit/agent/metadata/test_driver.py

  • Committer: Package Import Robot
  • Author(s): Corey Bryant, Corey Bryant, James Page
  • Date: 2015-02-16 09:59:01 UTC
  • mfrom: (1.1.20)
  • Revision ID: package-import@ubuntu.com-20150216095901-irf6gdwh5tzmfi73
Tags: 1:2015.1~b2-0ubuntu1
[ Corey Bryant ]
* New upstream release.
  - d/control: Align with upstream dependencies.
  - d/p/disable-udev-tests.patch: Rebased.
  - d/p/pep-0476.patch: Dropped. Fixed upstream.

[ James Page ]
* d/neutron-common.install: Drop fwaas_driver.ini and vpnaas.filters, will
  provided by driver specific packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2014 OpenStack Foundation.
 
2
# All Rights Reserved.
 
3
#
 
4
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
 
5
#    not use this file except in compliance with the License. You may obtain
 
6
#    a copy of the License at
 
7
#
 
8
#         http://www.apache.org/licenses/LICENSE-2.0
 
9
#
 
10
#    Unless required by applicable law or agreed to in writing, software
 
11
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 
12
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 
13
#    License for the specific language governing permissions and limitations
 
14
#    under the License.
 
15
 
 
16
import contextlib
 
17
 
 
18
import mock
 
19
 
 
20
from oslo.config import cfg
 
21
 
 
22
from neutron.agent.common import config as agent_config
 
23
from neutron.agent.l3 import config as l3_config
 
24
from neutron.agent.metadata import driver as metadata_driver
 
25
from neutron.openstack.common import uuidutils
 
26
from neutron.tests import base
 
27
 
 
28
 
 
29
_uuid = uuidutils.generate_uuid
 
30
 
 
31
 
 
32
class TestMetadataDriver(base.BaseTestCase):
 
33
 
 
34
    EUID = 123
 
35
    EGID = 456
 
36
 
 
37
    def setUp(self):
 
38
        super(TestMetadataDriver, self).setUp()
 
39
        cfg.CONF.register_opts(l3_config.OPTS)
 
40
        cfg.CONF.register_opts(metadata_driver.MetadataDriver.OPTS)
 
41
        agent_config.register_root_helper(cfg.CONF)
 
42
 
 
43
    def test_metadata_nat_rules(self):
 
44
        rules = ('PREROUTING', '-s 0.0.0.0/0 -d 169.254.169.254/32 '
 
45
                 '-p tcp -m tcp --dport 80 -j REDIRECT --to-port 8775')
 
46
        self.assertEqual(
 
47
            [rules],
 
48
            metadata_driver.MetadataDriver.metadata_nat_rules(8775))
 
49
 
 
50
    def test_metadata_filter_rules(self):
 
51
        rules = [('INPUT', '-m mark --mark 0x1 -j ACCEPT'),
 
52
                 ('INPUT', '-s 0.0.0.0/0 -p tcp -m tcp --dport 8775 -j DROP')]
 
53
        self.assertEqual(
 
54
            rules,
 
55
            metadata_driver.MetadataDriver.metadata_filter_rules(8775, '0x1'))
 
56
 
 
57
    def test_metadata_mangle_rules(self):
 
58
        rule = ('PREROUTING', '-s 0.0.0.0/0 -d 169.254.169.254/32 '
 
59
                '-p tcp -m tcp --dport 80 '
 
60
                '-j MARK --set-xmark 0x1/%s' %
 
61
                metadata_driver.METADATA_ACCESS_MARK_MASK)
 
62
        self.assertEqual(
 
63
            [rule],
 
64
            metadata_driver.MetadataDriver.metadata_mangle_rules('0x1'))
 
65
 
 
66
    def _test_spawn_metadata_proxy(self, expected_user, expected_group,
 
67
                                   user='', group=''):
 
68
        router_id = _uuid()
 
69
        router_ns = 'qrouter-%s' % router_id
 
70
        metadata_port = 8080
 
71
        ip_class_path = 'neutron.agent.linux.ip_lib.IPWrapper'
 
72
 
 
73
        cfg.CONF.set_override('metadata_port', metadata_port)
 
74
        cfg.CONF.set_override('metadata_proxy_user', user)
 
75
        cfg.CONF.set_override('metadata_proxy_group', group)
 
76
        cfg.CONF.set_override('log_file', 'test.log')
 
77
        cfg.CONF.set_override('debug', True)
 
78
 
 
79
        driver = metadata_driver.MetadataDriver
 
80
        with contextlib.nested(
 
81
                mock.patch('os.geteuid', return_value=self.EUID),
 
82
                mock.patch('os.getegid', return_value=self.EGID),
 
83
                mock.patch(ip_class_path)) as (geteuid, getegid, ip_mock):
 
84
            driver._spawn_metadata_proxy(router_id, router_ns, cfg.CONF)
 
85
            ip_mock.assert_has_calls([
 
86
                mock.call('sudo', router_ns),
 
87
                mock.call().netns.execute([
 
88
                    'neutron-ns-metadata-proxy',
 
89
                    mock.ANY,
 
90
                    mock.ANY,
 
91
                    '--router_id=%s' % router_id,
 
92
                    mock.ANY,
 
93
                    '--metadata_port=%s' % metadata_port,
 
94
                    '--metadata_proxy_user=%s' % expected_user,
 
95
                    '--metadata_proxy_group=%s' % expected_group,
 
96
                    '--debug',
 
97
                    '--verbose',
 
98
                    '--log-file=neutron-ns-metadata-proxy-%s.log' %
 
99
                    router_id
 
100
                ], addl_env=None)
 
101
            ])
 
102
 
 
103
    def test_spawn_metadata_proxy_with_user(self):
 
104
        self._test_spawn_metadata_proxy('user', self.EGID, user='user')
 
105
 
 
106
    def test_spawn_metadata_proxy_with_uid(self):
 
107
        self._test_spawn_metadata_proxy('321', self.EGID, user='321')
 
108
 
 
109
    def test_spawn_metadata_proxy_with_group(self):
 
110
        self._test_spawn_metadata_proxy(self.EUID, 'group', group='group')
 
111
 
 
112
    def test_spawn_metadata_proxy_with_gid(self):
 
113
        self._test_spawn_metadata_proxy(self.EUID, '654', group='654')
 
114
 
 
115
    def test_spawn_metadata_proxy(self):
 
116
        self._test_spawn_metadata_proxy(self.EUID, self.EGID)