summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/nova-api6
-rwxr-xr-xbin/nova-combined4
-rwxr-xr-xbin/nova-compute4
-rwxr-xr-xbin/nova-network4
-rwxr-xr-xbin/nova-scheduler4
-rwxr-xr-xbin/nova-volume4
-rw-r--r--nova/flags.py4
-rw-r--r--nova/objectstore/image.py2
-rw-r--r--nova/rpc.py5
-rw-r--r--nova/server.py151
-rw-r--r--nova/test.py9
-rw-r--r--nova/tests/access_unittest.py2
-rw-r--r--nova/tests/api/__init__.py3
-rw-r--r--nova/tests/auth_unittest.py11
-rw-r--r--nova/tests/cloud_unittest.py2
-rw-r--r--nova/tests/compute_unittest.py2
-rw-r--r--nova/tests/flags_unittest.py2
-rw-r--r--nova/tests/misc_unittest.py2
-rw-r--r--nova/tests/network_unittest.py2
-rw-r--r--nova/tests/objectstore_unittest.py4
-rw-r--r--nova/tests/quota_unittest.py2
-rw-r--r--nova/tests/rpc_unittest.py2
-rw-r--r--nova/tests/scheduler_unittest.py4
-rw-r--r--nova/tests/service_unittest.py4
-rw-r--r--nova/tests/virt_unittest.py4
-rw-r--r--nova/tests/volume_unittest.py2
-rw-r--r--nova/utils.py7
-rw-r--r--run_tests.py1
28 files changed, 39 insertions, 214 deletions
diff --git a/bin/nova-api b/bin/nova-api
index 3215ad5ef..3505cefe7 100755
--- a/bin/nova-api
+++ b/bin/nova-api
@@ -17,9 +17,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
-"""
-Nova API daemon.
-"""
+
+"""Starter script for Nova API."""
import os
import sys
@@ -35,7 +34,6 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
from nova import api
from nova import flags
from nova import utils
-from nova import server
from nova import wsgi
FLAGS = flags.FLAGS
diff --git a/bin/nova-combined b/bin/nova-combined
index c70d1d9ef..964ffd438 100755
--- a/bin/nova-combined
+++ b/bin/nova-combined
@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova compute nodes.
-"""
+"""Combined starter script for Nova services."""
import eventlet
eventlet.monkey_patch()
diff --git a/bin/nova-compute b/bin/nova-compute
index 4baf47e29..f224f0690 100755
--- a/bin/nova-compute
+++ b/bin/nova-compute
@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova compute nodes.
-"""
+"""Starter script for Nova Compute."""
import eventlet
eventlet.monkey_patch()
diff --git a/bin/nova-network b/bin/nova-network
index 4baf47e29..589c75e5a 100755
--- a/bin/nova-network
+++ b/bin/nova-network
@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova compute nodes.
-"""
+"""Starter script for Nova Network."""
import eventlet
eventlet.monkey_patch()
diff --git a/bin/nova-scheduler b/bin/nova-scheduler
index a1b7ddf60..cb345aa3f 100755
--- a/bin/nova-scheduler
+++ b/bin/nova-scheduler
@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova scheduler nodes.
-"""
+""" Starter script for Nova Scheduler."""
import eventlet
eventlet.monkey_patch()
diff --git a/bin/nova-volume b/bin/nova-volume
index ba4a3a502..2f74f4b9a 100755
--- a/bin/nova-volume
+++ b/bin/nova-volume
@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""
- Twistd daemon for the nova volume nodes.
-"""
+"""Starter script for Nova Volume."""
import eventlet
eventlet.monkey_patch()
diff --git a/nova/flags.py b/nova/flags.py
index 034b136d8..87444565a 100644
--- a/nova/flags.py
+++ b/nova/flags.py
@@ -159,12 +159,11 @@ class StrWrapper(object):
return str(val)
raise KeyError(name)
+
FLAGS = FlagValues()
gflags.FLAGS = FLAGS
gflags.DEFINE_flag(gflags.HelpFlag(), FLAGS)
-gflags.FLAGS = FLAGS
-
def _wrapper(func):
def _wrapped(*args, **kw):
@@ -187,6 +186,7 @@ DEFINE_multistring = _wrapper(gflags.DEFINE_multistring)
DEFINE_multi_int = _wrapper(gflags.DEFINE_multi_int)
DEFINE_flag = _wrapper(gflags.DEFINE_flag)
+
HelpFlag = gflags.HelpFlag
HelpshortFlag = gflags.HelpshortFlag
HelpXMLFlag = gflags.HelpXMLFlag
diff --git a/nova/objectstore/image.py b/nova/objectstore/image.py
index 2fe0b0117..9e56e256c 100644
--- a/nova/objectstore/image.py
+++ b/nova/objectstore/image.py
@@ -26,7 +26,6 @@ Requires decryption using keys in the manifest.
import binascii
import glob
import json
-import logging
import os
import shutil
import tarfile
@@ -265,7 +264,6 @@ class Image(object):
if err:
raise exception.Error("Failed to decrypt initialization "
"vector: %s" % err)
- logging.debug(iv)
_out, err = utils.execute(
'openssl enc -d -aes-128-cbc -in %s -K %s -iv %s -out %s'
diff --git a/nova/rpc.py b/nova/rpc.py
index 652b9e4aa..6a634a4ec 100644
--- a/nova/rpc.py
+++ b/nova/rpc.py
@@ -309,7 +309,6 @@ def call(context, topic, msg):
class WaitMessage(object):
def __call__(self, data, message):
- LOG.debug('data %s, msg %s', data, message)
"""Acks message and sets result."""
message.ack()
if data['failure']:
@@ -332,6 +331,10 @@ def call(context, topic, msg):
except StopIteration:
pass
consumer.close()
+ # NOTE(termie): this is a little bit of a change from the original
+ # twisted-based code where returning a Failure
+ # instance from a deferred call is very similar to
+ # raising an exception
if isinstance(wait_msg.result, Exception):
raise wait_msg.result
return wait_msg.result
diff --git a/nova/server.py b/nova/server.py
deleted file mode 100644
index a060d3283..000000000
--- a/nova/server.py
+++ /dev/null
@@ -1,151 +0,0 @@
-# vim: tabstop=4 shiftwidth=4 softtabstop=4
-
-# Copyright 2010 United States Government as represented by the
-# Administrator of the National Aeronautics and Space Administration.
-# All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-"""
-Base functionality for nova daemons - gradually being replaced with twistd.py.
-"""
-
-import daemon
-from daemon import pidlockfile
-import logging
-import logging.handlers
-import os
-import signal
-import sys
-import time
-
-from nova import flags
-
-
-FLAGS = flags.FLAGS
-flags.DEFINE_bool('daemonize', False, 'daemonize this process')
-# NOTE(termie): right now I am defaulting to using syslog when we daemonize
-# it may be better to do something else -shrug-
-# NOTE(Devin): I think we should let each process have its own log file
-# and put it in /var/logs/nova/(appname).log
-# This makes debugging much easier and cuts down on sys log
-# clutter.
-flags.DEFINE_bool('use_syslog', True, 'output to syslog when daemonizing')
-flags.DEFINE_string('logfile', None, 'log file to output to')
-flags.DEFINE_string('logdir', None, 'directory to keep log files in '
- '(will be prepended to $logfile)')
-flags.DEFINE_string('pidfile', None, 'pid file to output to')
-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):
- """
- Stop the daemon
- """
- # Get the pid from the pidfile
- try:
- pid = int(open(pidfile, 'r').read().strip())
- except IOError:
- message = "pidfile %s does not exist. Daemon not running?\n"
- sys.stderr.write(message % pidfile)
- return
-
- # Try killing the daemon process
- try:
- while 1:
- os.kill(pid, signal.SIGTERM)
- time.sleep(0.1)
- except OSError, err:
- err = str(err)
- if err.find("No such process") > 0:
- if os.path.exists(pidfile):
- os.remove(pidfile)
- else:
- print str(err)
- sys.exit(1)
-
-
-def serve(name, main):
- """Controller for server"""
- argv = FLAGS(sys.argv)
-
- if not FLAGS.pidfile:
- FLAGS.pidfile = '%s.pid' % name
-
- logging.debug("Full set of FLAGS: \n\n\n")
- for flag in FLAGS:
- logging.debug("%s : %s", flag, FLAGS.get(flag, None))
-
- action = 'start'
- if len(argv) > 1:
- action = argv.pop()
-
- if action == 'stop':
- stop(FLAGS.pidfile)
- sys.exit()
- elif action == 'restart':
- stop(FLAGS.pidfile)
- elif action == 'start':
- pass
- else:
- print 'usage: %s [options] [start|stop|restart]' % argv[0]
- sys.exit(1)
- daemonize(argv, name, main)
-
-
-def daemonize(args, name, main):
- """Does the work of daemonizing the process"""
- logging.getLogger('amqplib').setLevel(logging.WARN)
- files_to_keep = []
- if FLAGS.daemonize:
- logger = logging.getLogger()
- formatter = logging.Formatter(
- name + '(%(name)s): %(levelname)s %(message)s')
- if FLAGS.use_syslog and not FLAGS.logfile:
- syslog = logging.handlers.SysLogHandler(address='/dev/log')
- syslog.setFormatter(formatter)
- logger.addHandler(syslog)
- files_to_keep.append(syslog.socket)
- else:
- if not FLAGS.logfile:
- FLAGS.logfile = '%s.log' % name
- if FLAGS.logdir:
- FLAGS.logfile = os.path.join(FLAGS.logdir, FLAGS.logfile)
- logfile = logging.FileHandler(FLAGS.logfile)
- logfile.setFormatter(formatter)
- logger.addHandler(logfile)
- files_to_keep.append(logfile.stream)
- stdin, stdout, stderr = None, None, None
- else:
- stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
-
- if FLAGS.verbose:
- logging.getLogger().setLevel(logging.DEBUG)
- else:
- logging.getLogger().setLevel(logging.WARNING)
-
- with daemon.DaemonContext(
- detach_process=FLAGS.daemonize,
- working_directory=FLAGS.working_directory,
- #pidfile=pidlockfile.TimeoutPIDLockFile(FLAGS.pidfile,
- # acquire_timeout=1,
- # threaded=False),
- stdin=stdin,
- stdout=stdout,
- stderr=stderr,
- uid=FLAGS.uid,
- gid=FLAGS.gid,
- files_preserve=files_to_keep):
- main(args)
diff --git a/nova/test.py b/nova/test.py
index e27d29166..ecc97aa4d 100644
--- a/nova/test.py
+++ b/nova/test.py
@@ -55,11 +55,11 @@ def skip_if_fake(func):
return func(*args, **kw)
return _skipper
-class TrialTestCase(unittest.TestCase):
+class TestCase(unittest.TestCase):
"""Test case base class for all unit tests"""
def setUp(self):
"""Run before each test method to initialize test environment"""
- super(TrialTestCase, self).setUp()
+ super(TestCase, self).setUp()
# NOTE(vish): We need a better method for creating fixtures for tests
# now that we have some required db setup for the system
# to work properly.
@@ -105,7 +105,7 @@ class TrialTestCase(unittest.TestCase):
fakerabbit.reset_all()
db.security_group_destroy_all(ctxt)
- super(TrialTestCase, self).tearDown()
+ super(TestCase, self).tearDown()
finally:
self.reset_flags()
@@ -137,7 +137,7 @@ class TrialTestCase(unittest.TestCase):
rpc.Consumer.attach_to_eventlet = _wrapped
-class OLDTrialTestCase(trial_unittest.TestCase):
+class TrialTestCase(trial_unittest.TestCase):
"""Test case base class for all unit tests"""
def setUp(self):
"""Run before each test method to initialize test environment"""
@@ -175,7 +175,6 @@ class OLDTrialTestCase(trial_unittest.TestCase):
db.fixed_ip_disassociate_all_by_timeout(ctxt, FLAGS.host,
self.start)
db.network_disassociate_all(ctxt)
- rpc.Consumer.attach_to_eventlet = self.originalAttach
for x in self.injected:
try:
x.stop()
diff --git a/nova/tests/access_unittest.py b/nova/tests/access_unittest.py
index 0f66c0a26..58fdea3b5 100644
--- a/nova/tests/access_unittest.py
+++ b/nova/tests/access_unittest.py
@@ -35,7 +35,7 @@ class Context(object):
pass
-class AccessTestCase(test.TrialTestCase):
+class AccessTestCase(test.TestCase):
def setUp(self):
super(AccessTestCase, self).setUp()
um = manager.AuthManager()
diff --git a/nova/tests/api/__init__.py b/nova/tests/api/__init__.py
index cdc1bbf00..9caa8c9d0 100644
--- a/nova/tests/api/__init__.py
+++ b/nova/tests/api/__init__.py
@@ -78,5 +78,4 @@ class Test(unittest.TestCase):
if __name__ == '__main__':
- pass
- #unittest.main()
+ unittest.main()
diff --git a/nova/tests/auth_unittest.py b/nova/tests/auth_unittest.py
index 129ff223d..4508d6721 100644
--- a/nova/tests/auth_unittest.py
+++ b/nova/tests/auth_unittest.py
@@ -16,13 +16,10 @@
# License for the specific language governing permissions and limitations
# under the License.
-#import logging
+import logging
from M2Crypto import X509
import unittest
-import eventlet
-logging = eventlet.import_patched('logging')
-
from nova import crypto
from nova import flags
from nova import test
@@ -329,12 +326,12 @@ class AuthManagerTestCase(object):
self.assertTrue(user.is_admin())
-class AuthManagerLdapTestCase(AuthManagerTestCase, test.TrialTestCase):
+class AuthManagerLdapTestCase(AuthManagerTestCase, test.TestCase):
auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver'
def __init__(self, *args, **kwargs):
AuthManagerTestCase.__init__(self)
- test.TrialTestCase.__init__(self, *args, **kwargs)
+ test.TestCase.__init__(self, *args, **kwargs)
import nova.auth.fakeldap as fakeldap
FLAGS.redis_db = 8
if FLAGS.flush_db:
@@ -346,7 +343,7 @@ class AuthManagerLdapTestCase(AuthManagerTestCase, test.TrialTestCase):
self.skip = True
-class AuthManagerDbTestCase(AuthManagerTestCase, test.TrialTestCase):
+class AuthManagerDbTestCase(AuthManagerTestCase, test.TestCase):
auth_driver = 'nova.auth.dbdriver.DbDriver'
diff --git a/nova/tests/cloud_unittest.py b/nova/tests/cloud_unittest.py
index b7b856da5..50834d990 100644
--- a/nova/tests/cloud_unittest.py
+++ b/nova/tests/cloud_unittest.py
@@ -51,7 +51,7 @@ IMAGES_PATH = os.path.join(OSS_TEMPDIR, 'images')
os.makedirs(IMAGES_PATH)
-class CloudTestCase(test.TrialTestCase):
+class CloudTestCase(test.TestCase):
def setUp(self):
super(CloudTestCase, self).setUp()
self.flags(connection_type='fake', images_path=IMAGES_PATH)
diff --git a/nova/tests/compute_unittest.py b/nova/tests/compute_unittest.py
index 67cea72c9..c6353d357 100644
--- a/nova/tests/compute_unittest.py
+++ b/nova/tests/compute_unittest.py
@@ -35,7 +35,7 @@ from nova.compute import api as compute_api
FLAGS = flags.FLAGS
-class ComputeTestCase(test.TrialTestCase):
+class ComputeTestCase(test.TestCase):
"""Test case for compute"""
def setUp(self):
logging.getLogger().setLevel(logging.DEBUG)
diff --git a/nova/tests/flags_unittest.py b/nova/tests/flags_unittest.py
index b97df075d..707300fcf 100644
--- a/nova/tests/flags_unittest.py
+++ b/nova/tests/flags_unittest.py
@@ -24,7 +24,7 @@ FLAGS = flags.FLAGS
flags.DEFINE_string('flags_unittest', 'foo', 'for testing purposes only')
-class FlagsTestCase(test.TrialTestCase):
+class FlagsTestCase(test.TestCase):
def setUp(self):
super(FlagsTestCase, self).setUp()
diff --git a/nova/tests/misc_unittest.py b/nova/tests/misc_unittest.py
index 667c63ad0..3eab1da0a 100644
--- a/nova/tests/misc_unittest.py
+++ b/nova/tests/misc_unittest.py
@@ -20,7 +20,7 @@ from nova import test
from nova.utils import parse_mailmap, str_dict_replace
-class ProjectTestCase(test.TrialTestCase):
+class ProjectTestCase(test.TestCase):
def test_authors_up_to_date(self):
if os.path.exists('../.bzr'):
contributors = set()
diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py
index 6f4705719..bcac20585 100644
--- a/nova/tests/network_unittest.py
+++ b/nova/tests/network_unittest.py
@@ -33,7 +33,7 @@ from nova.auth import manager
FLAGS = flags.FLAGS
-class NetworkTestCase(test.TrialTestCase):
+class NetworkTestCase(test.TestCase):
"""Test cases for network code"""
def setUp(self):
super(NetworkTestCase, self).setUp()
diff --git a/nova/tests/objectstore_unittest.py b/nova/tests/objectstore_unittest.py
index 061799923..ceac17adb 100644
--- a/nova/tests/objectstore_unittest.py
+++ b/nova/tests/objectstore_unittest.py
@@ -54,7 +54,7 @@ os.makedirs(os.path.join(OSS_TEMPDIR, 'images'))
os.makedirs(os.path.join(OSS_TEMPDIR, 'buckets'))
-class ObjectStoreTestCase(test.TrialTestCase):
+class ObjectStoreTestCase(test.TestCase):
"""Test objectstore API directly."""
def setUp(self):
@@ -191,7 +191,7 @@ class TestSite(server.Site):
protocol = TestHTTPChannel
-class S3APITestCase(test.TrialTestCase):
+class S3APITestCase(test.TestCase):
"""Test objectstore through S3 API."""
def setUp(self):
diff --git a/nova/tests/quota_unittest.py b/nova/tests/quota_unittest.py
index 1966b51f7..8cf2a5e54 100644
--- a/nova/tests/quota_unittest.py
+++ b/nova/tests/quota_unittest.py
@@ -32,7 +32,7 @@ from nova.api.ec2 import cloud
FLAGS = flags.FLAGS
-class QuotaTestCase(test.TrialTestCase):
+class QuotaTestCase(test.TestCase):
def setUp(self):
logging.getLogger().setLevel(logging.DEBUG)
super(QuotaTestCase, self).setUp()
diff --git a/nova/tests/rpc_unittest.py b/nova/tests/rpc_unittest.py
index c2ad5cd79..4128c35b8 100644
--- a/nova/tests/rpc_unittest.py
+++ b/nova/tests/rpc_unittest.py
@@ -29,7 +29,7 @@ from nova import test
FLAGS = flags.FLAGS
-class RpcTestCase(test.TrialTestCase):
+class RpcTestCase(test.TestCase):
"""Test cases for rpc"""
def setUp(self):
super(RpcTestCase, self).setUp()
diff --git a/nova/tests/scheduler_unittest.py b/nova/tests/scheduler_unittest.py
index f442a4bc2..d1756b8fb 100644
--- a/nova/tests/scheduler_unittest.py
+++ b/nova/tests/scheduler_unittest.py
@@ -44,7 +44,7 @@ class TestDriver(driver.Scheduler):
return 'named_host'
-class SchedulerTestCase(test.TrialTestCase):
+class SchedulerTestCase(test.TestCase):
"""Test case for scheduler"""
def setUp(self):
super(SchedulerTestCase, self).setUp()
@@ -73,7 +73,7 @@ class SchedulerTestCase(test.TrialTestCase):
scheduler.named_method(ctxt, 'topic', num=7)
-class SimpleDriverTestCase(test.TrialTestCase):
+class SimpleDriverTestCase(test.TestCase):
"""Test case for simple driver"""
def setUp(self):
super(SimpleDriverTestCase, self).setUp()
diff --git a/nova/tests/service_unittest.py b/nova/tests/service_unittest.py
index 9f6d1af7d..c94af4a23 100644
--- a/nova/tests/service_unittest.py
+++ b/nova/tests/service_unittest.py
@@ -45,7 +45,7 @@ class ExtendedService(service.Service):
return 'service'
-class ServiceManagerTestCase(test.TrialTestCase):
+class ServiceManagerTestCase(test.TestCase):
"""Test cases for Services"""
def test_attribute_error_for_no_manager(self):
@@ -72,7 +72,7 @@ class ServiceManagerTestCase(test.TrialTestCase):
self.assertEqual(serv.test_method(), 'service')
-class ServiceTestCase(test.TrialTestCase):
+class ServiceTestCase(test.TestCase):
"""Test cases for Services"""
def setUp(self):
diff --git a/nova/tests/virt_unittest.py b/nova/tests/virt_unittest.py
index a4a8d3acf..85e569858 100644
--- a/nova/tests/virt_unittest.py
+++ b/nova/tests/virt_unittest.py
@@ -30,7 +30,7 @@ FLAGS = flags.FLAGS
flags.DECLARE('instances_path', 'nova.compute.manager')
-class LibvirtConnTestCase(test.TrialTestCase):
+class LibvirtConnTestCase(test.TestCase):
def setUp(self):
super(LibvirtConnTestCase, self).setUp()
self.manager = manager.AuthManager()
@@ -123,7 +123,7 @@ class LibvirtConnTestCase(test.TrialTestCase):
self.manager.delete_user(self.user)
-class NWFilterTestCase(test.TrialTestCase):
+class NWFilterTestCase(test.TestCase):
def setUp(self):
super(NWFilterTestCase, self).setUp()
diff --git a/nova/tests/volume_unittest.py b/nova/tests/volume_unittest.py
index 93d2ceab7..b13455fb0 100644
--- a/nova/tests/volume_unittest.py
+++ b/nova/tests/volume_unittest.py
@@ -31,7 +31,7 @@ from nova import utils
FLAGS = flags.FLAGS
-class VolumeTestCase(test.TrialTestCase):
+class VolumeTestCase(test.TestCase):
"""Test Case for volumes."""
def setUp(self):
diff --git a/nova/utils.py b/nova/utils.py
index ddbe0479e..22bf5d8cf 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -129,13 +129,6 @@ def debug(arg):
def runthis(prompt, cmd, check_exit_code=True):
logging.debug("Running %s" % (cmd))
rv, err = execute(cmd, check_exit_code=check_exit_code)
- #exit_code = subprocess.call(cmd.split(" "))
- #logging.debug(prompt % (exit_code))
- #if check_exit_code and exit_code != 0:
- # raise ProcessExecutionError(exit_code=exit_code,
- # stdout=None,
- # stderr=None,
- # cmd=cmd)
def generate_uid(topic, size=8):
diff --git a/run_tests.py b/run_tests.py
index 33bf51b18..6d7830a29 100644
--- a/run_tests.py
+++ b/run_tests.py
@@ -95,7 +95,6 @@ if __name__ == '__main__':
else:
from nova.tests.real_flags import *
-
# Establish redirect for STDERR
sys.stderr.flush()
err = open(FLAGS.tests_stderr, 'w+', 0)