astara-appliance/test/unit/test_metadata_proxy.py

80 lines
2.9 KiB
Python

import argparse
import json
import tempfile
import unittest
import eventlet
import mock
from astara_router import metadata_proxy
config = json.dumps({
"tenant_id": "ABC123",
"net1": {"listen_port": 9602, 'ip_instance_map': {'10.10.10.2': 'VM1'}},
"net2": {"listen_port": 9603, 'ip_instance_map': {'10.10.10.2': 'VM2'}},
})
class TestMetadataProxy(unittest.TestCase):
@mock.patch('eventlet.monkey_patch', mock.Mock())
@mock.patch('eventlet.listen')
@mock.patch.object(argparse.ArgumentParser, 'parse_args')
@mock.patch.object(eventlet.GreenPool, 'spawn_n')
@mock.patch.object(eventlet.GreenPool, 'waitall', mock.Mock())
def test_spawn(self, spawn, parse_args, listen):
with tempfile.NamedTemporaryFile() as f:
f.write(config)
f.flush()
parse_args.return_value = mock.Mock(
daemonize=False,
config_file=f.name
)
metadata_proxy.main()
listen.assert_has_calls(
[mock.call(('0.0.0.0', 9602), backlog=128),
mock.call(('0.0.0.0', 9603), backlog=128)],
any_order=True
)
# call_args need to be order before we can test it
spawn_args = sorted(spawn.call_args_list, key=lambda y: y[0][2].network_id)
server, socket, app = spawn_args[0][0]
assert server == eventlet.wsgi.server
assert isinstance(app, metadata_proxy.NetworkMetadataProxyHandler)
assert app.tenant_id == 'ABC123'
assert app.network_id in 'net1'
assert app.config_file == f.name
server, socket, app = spawn_args[1][0]
assert server == eventlet.wsgi.server
assert isinstance(app, metadata_proxy.NetworkMetadataProxyHandler)
assert app.tenant_id == 'ABC123'
assert app.network_id in 'net2'
assert app.config_file == f.name
@mock.patch('requests.get')
def test_request_proxying(self, get):
with tempfile.NamedTemporaryFile() as f:
f.write(config)
f.flush()
wsgi = metadata_proxy.NetworkMetadataProxyHandler(
'ABC123',
'net1',
f.name
)
assert wsgi.config_mtime == 0
get.return_value.status_code = 200
wsgi._proxy_request('10.10.10.2', '/', '')
get.assert_called_once_with(
'http://[fdca:3ba5:a17a:acda::1]:9697/',
headers={
'X-Quantum-Network-ID': 'net1',
'X-Forwarded-For': '10.10.10.2',
'X-Tenant-ID': 'ABC123',
'X-Instance-ID': u'VM1'
}
)
assert wsgi.config_mtime > 0
mtime = wsgi.config_mtime
wsgi._proxy_request('10.10.10.2', '/', '')
assert wsgi.config_mtime == mtime