merged trunk and fixed tests
This commit is contained in:
@@ -141,6 +141,7 @@ def _wrapper(func):
|
|||||||
return _wrapped
|
return _wrapped
|
||||||
|
|
||||||
|
|
||||||
|
DEFINE = _wrapper(gflags.DEFINE)
|
||||||
DEFINE_string = _wrapper(gflags.DEFINE_string)
|
DEFINE_string = _wrapper(gflags.DEFINE_string)
|
||||||
DEFINE_integer = _wrapper(gflags.DEFINE_integer)
|
DEFINE_integer = _wrapper(gflags.DEFINE_integer)
|
||||||
DEFINE_bool = _wrapper(gflags.DEFINE_bool)
|
DEFINE_bool = _wrapper(gflags.DEFINE_bool)
|
||||||
|
@@ -44,6 +44,8 @@ flags.DEFINE_bool('use_syslog', True, 'output to syslog when daemonizing')
|
|||||||
flags.DEFINE_string('logfile', None, 'log file to output to')
|
flags.DEFINE_string('logfile', None, 'log file to output to')
|
||||||
flags.DEFINE_string('pidfile', None, 'pid file to output to')
|
flags.DEFINE_string('pidfile', None, 'pid file to output to')
|
||||||
flags.DEFINE_string('working_directory', './', 'working directory...')
|
flags.DEFINE_string('working_directory', './', 'working directory...')
|
||||||
|
flags.DEFINE_integer('uid', os.getuid(), 'uid under which to run')
|
||||||
|
flags.DEFINE_integer('gid', os.getgid(), 'gid under which to run')
|
||||||
|
|
||||||
|
|
||||||
def stop(pidfile):
|
def stop(pidfile):
|
||||||
@@ -135,6 +137,8 @@ def daemonize(args, name, main):
|
|||||||
threaded=False),
|
threaded=False),
|
||||||
stdin=stdin,
|
stdin=stdin,
|
||||||
stdout=stdout,
|
stdout=stdout,
|
||||||
stderr=stderr
|
stderr=stderr,
|
||||||
|
uid=FLAGS.uid,
|
||||||
|
gid=FLAGS.gid
|
||||||
):
|
):
|
||||||
main(args)
|
main(args)
|
||||||
|
@@ -184,13 +184,23 @@ class NetworkTestCase(test.TrialTestCase):
|
|||||||
|
|
||||||
def test_ips_are_reused(self):
|
def test_ips_are_reused(self):
|
||||||
"""Makes sure that ip addresses that are deallocated get reused"""
|
"""Makes sure that ip addresses that are deallocated get reused"""
|
||||||
result = self.service.allocate_fixed_ip(
|
net = model.get_project_network(self.projects[0].id, "default")
|
||||||
self.user.id, self.projects[0].id)
|
|
||||||
mac = result['mac_address']
|
|
||||||
address = result['private_dns_name']
|
|
||||||
|
|
||||||
hostname = "reuse-host"
|
hostname = "reuse-host"
|
||||||
net = model.get_project_network(self.projects[0].id, "default")
|
macs = {}
|
||||||
|
addresses = {}
|
||||||
|
num_available_ips = net.num_available_ips
|
||||||
|
for i in range(num_available_ips - 1):
|
||||||
|
result = self.service.allocate_fixed_ip(self.user.id,
|
||||||
|
self.projects[0].id)
|
||||||
|
macs[i] = result['mac_address']
|
||||||
|
addresses[i] = result['private_dns_name']
|
||||||
|
issue_ip(macs[i], addresses[i], hostname, net.bridge_name)
|
||||||
|
|
||||||
|
result = self.service.allocate_fixed_ip(self.user.id,
|
||||||
|
self.projects[0].id)
|
||||||
|
mac = result['mac_address']
|
||||||
|
address = result['private_dns_name']
|
||||||
|
|
||||||
issue_ip(mac, address, hostname, net.bridge_name)
|
issue_ip(mac, address, hostname, net.bridge_name)
|
||||||
self.service.deallocate_fixed_ip(address)
|
self.service.deallocate_fixed_ip(address)
|
||||||
@@ -205,6 +215,10 @@ class NetworkTestCase(test.TrialTestCase):
|
|||||||
self.service.deallocate_fixed_ip(secondaddress)
|
self.service.deallocate_fixed_ip(secondaddress)
|
||||||
release_ip(secondmac, secondaddress, hostname, net.bridge_name)
|
release_ip(secondmac, secondaddress, hostname, net.bridge_name)
|
||||||
|
|
||||||
|
for i in range(len(addresses)):
|
||||||
|
self.service.deallocate_fixed_ip(addresses[i])
|
||||||
|
release_ip(macs[i], addresses[i], hostname, net.bridge_name)
|
||||||
|
|
||||||
def test_available_ips(self):
|
def test_available_ips(self):
|
||||||
"""Make sure the number of available ips for the network is correct
|
"""Make sure the number of available ips for the network is correct
|
||||||
|
|
||||||
@@ -222,7 +236,7 @@ class NetworkTestCase(test.TrialTestCase):
|
|||||||
num_available_ips = net_size - (net.num_bottom_reserved_ips +
|
num_available_ips = net_size - (net.num_bottom_reserved_ips +
|
||||||
num_preallocated_ips +
|
num_preallocated_ips +
|
||||||
net.num_top_reserved_ips)
|
net.num_top_reserved_ips)
|
||||||
self.assertEqual(num_available_ips, len(list(net.available)))
|
self.assertEqual(num_available_ips, net.num_available_ips)
|
||||||
|
|
||||||
def test_too_many_addresses(self):
|
def test_too_many_addresses(self):
|
||||||
"""Test for a NoMoreAddresses exception when all fixed ips are used.
|
"""Test for a NoMoreAddresses exception when all fixed ips are used.
|
||||||
@@ -232,8 +246,7 @@ class NetworkTestCase(test.TrialTestCase):
|
|||||||
hostname = "toomany-hosts"
|
hostname = "toomany-hosts"
|
||||||
macs = {}
|
macs = {}
|
||||||
addresses = {}
|
addresses = {}
|
||||||
# Number of availaible ips is len of the available list
|
num_available_ips = net.num_available_ips
|
||||||
num_available_ips = len(list(net.available))
|
|
||||||
for i in range(num_available_ips):
|
for i in range(num_available_ips):
|
||||||
result = self.service.allocate_fixed_ip(self.user.id,
|
result = self.service.allocate_fixed_ip(self.user.id,
|
||||||
self.projects[0].id)
|
self.projects[0].id)
|
||||||
@@ -241,14 +254,14 @@ class NetworkTestCase(test.TrialTestCase):
|
|||||||
addresses[i] = result['private_dns_name']
|
addresses[i] = result['private_dns_name']
|
||||||
issue_ip(macs[i], addresses[i], hostname, net.bridge_name)
|
issue_ip(macs[i], addresses[i], hostname, net.bridge_name)
|
||||||
|
|
||||||
self.assertEqual(len(list(net.available)), 0)
|
self.assertEqual(net.num_available_ips, 0)
|
||||||
self.assertRaises(NoMoreAddresses, self.service.allocate_fixed_ip,
|
self.assertRaises(NoMoreAddresses, self.service.allocate_fixed_ip,
|
||||||
self.user.id, self.projects[0].id)
|
self.user.id, self.projects[0].id)
|
||||||
|
|
||||||
for i in range(len(addresses)):
|
for i in range(len(addresses)):
|
||||||
self.service.deallocate_fixed_ip(addresses[i])
|
self.service.deallocate_fixed_ip(addresses[i])
|
||||||
release_ip(macs[i], addresses[i], hostname, net.bridge_name)
|
release_ip(macs[i], addresses[i], hostname, net.bridge_name)
|
||||||
self.assertEqual(len(list(net.available)), num_available_ips)
|
self.assertEqual(net.num_available_ips, num_available_ips)
|
||||||
|
|
||||||
|
|
||||||
def is_in_project(address, project_id):
|
def is_in_project(address, project_id):
|
||||||
|
@@ -21,6 +21,7 @@ Twisted daemon helpers, specifically to parse out gFlags from twisted flags,
|
|||||||
manage pid files and support syslogging.
|
manage pid files and support syslogging.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import gflags
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
@@ -49,6 +50,14 @@ class TwistdServerOptions(ServerOptions):
|
|||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
class FlagParser(object):
|
||||||
|
def __init__(self, parser):
|
||||||
|
self.parser = parser
|
||||||
|
|
||||||
|
def Parse(self, s):
|
||||||
|
return self.parser(s)
|
||||||
|
|
||||||
|
|
||||||
def WrapTwistedOptions(wrapped):
|
def WrapTwistedOptions(wrapped):
|
||||||
class TwistedOptionsToFlags(wrapped):
|
class TwistedOptionsToFlags(wrapped):
|
||||||
subCommands = None
|
subCommands = None
|
||||||
@@ -79,7 +88,12 @@ def WrapTwistedOptions(wrapped):
|
|||||||
reflect.accumulateClassList(self.__class__, 'optParameters', twistd_params)
|
reflect.accumulateClassList(self.__class__, 'optParameters', twistd_params)
|
||||||
for param in twistd_params:
|
for param in twistd_params:
|
||||||
key = param[0].replace('-', '_')
|
key = param[0].replace('-', '_')
|
||||||
flags.DEFINE_string(key, param[2], str(param[-1]))
|
if len(param) > 4:
|
||||||
|
flags.DEFINE(FlagParser(param[4]),
|
||||||
|
key, param[2], str(param[3]),
|
||||||
|
serializer=gflags.ArgumentSerializer())
|
||||||
|
else:
|
||||||
|
flags.DEFINE_string(key, param[2], str(param[3]))
|
||||||
|
|
||||||
def _absorbHandlers(self):
|
def _absorbHandlers(self):
|
||||||
twistd_handlers = {}
|
twistd_handlers = {}
|
||||||
|
Reference in New Issue
Block a user