Merge "Return an exit code for configuration errors"

This commit is contained in:
Jenkins 2013-12-13 11:49:15 +00:00 committed by Gerrit Code Review
commit 4dfe31e69e
6 changed files with 64 additions and 8 deletions

View File

@ -14,9 +14,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from swift.common.utils import parse_options
from swift.common.wsgi import run_wsgi
if __name__ == '__main__':
conf_file, options = parse_options()
run_wsgi(conf_file, 'account-server', default_port=6002, **options)
sys.exit(run_wsgi(conf_file,
'account-server', default_port=6002, **options))

View File

@ -14,9 +14,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from swift.common.utils import parse_options
from swift.common.wsgi import run_wsgi
if __name__ == '__main__':
conf_file, options = parse_options()
run_wsgi(conf_file, 'container-server', default_port=6001, **options)
sys.exit(run_wsgi(conf_file,
'container-server', default_port=6001, **options))

View File

@ -14,6 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from swift.common.utils import parse_options
from swift.common.wsgi import run_wsgi
from swift.obj import server
@ -21,5 +22,6 @@ from swift.obj import server
if __name__ == '__main__':
conf_file, options = parse_options()
run_wsgi(conf_file, 'object-server', default_port=6000,
global_conf_callback=server.global_conf_callback, **options)
sys.exit(run_wsgi(conf_file, 'object-server', default_port=6000,
global_conf_callback=server.global_conf_callback,
**options))

View File

@ -14,9 +14,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import sys
from swift.common.utils import parse_options
from swift.common.wsgi import run_wsgi
if __name__ == '__main__':
conf_file, options = parse_options()
run_wsgi(conf_file, 'proxy-server', default_port=8080, **options)
sys.exit(run_wsgi(conf_file, 'proxy-server', default_port=8080, **options))

View File

@ -241,6 +241,7 @@ def run_wsgi(conf_path, app_section, *args, **kwargs):
:param conf_path: Path to paste.deploy style configuration file/directory
:param app_section: App name from conf file to load config from
:returns: 0 if successful, nonzero otherwise
"""
# Load configuration, Set logger and Load request processor
try:
@ -248,7 +249,7 @@ def run_wsgi(conf_path, app_section, *args, **kwargs):
_initrp(conf_path, app_section, *args, **kwargs)
except ConfigFileError as e:
print e
return
return 1
# bind to address and port
sock = get_socket(conf, default_port=kwargs.get('default_port', 8080))
@ -273,7 +274,7 @@ def run_wsgi(conf_path, app_section, *args, **kwargs):
# Useful for profiling [no forks].
if worker_count == 0:
run_server(conf, logger, sock, global_conf=global_conf)
return
return 0
def kill_children(*args):
"""Kills the entire process group."""
@ -300,7 +301,7 @@ def run_wsgi(conf_path, app_section, *args, **kwargs):
signal.signal(signal.SIGTERM, signal.SIG_DFL)
run_server(conf, logger, sock)
logger.notice('Child %d exiting normally' % os.getpid())
return
return 0
else:
logger.notice('Started child %s' % pid)
children.append(pid)
@ -318,6 +319,7 @@ def run_wsgi(conf_path, app_section, *args, **kwargs):
greenio.shutdown_safe(sock)
sock.close()
logger.notice('Exited')
return 0
class ConfigFileError(Exception):

View File

@ -538,6 +538,53 @@ class TestWSGI(unittest.TestCase):
self.assertEqual(calls['_global_conf_callback'], 1)
self.assertEqual(calls['_loadapp'], 1)
def test_run_server_success(self):
calls = defaultdict(lambda: 0)
def _initrp(conf_file, app_section, *args, **kwargs):
calls['_initrp'] += 1
return (
{'__file__': 'test', 'workers': 0},
'logger',
'log_name')
def _loadapp(uri, name=None, **kwargs):
calls['_loadapp'] += 1
with nested(
mock.patch.object(wsgi, '_initrp', _initrp),
mock.patch.object(wsgi, 'get_socket'),
mock.patch.object(wsgi, 'drop_privileges'),
mock.patch.object(wsgi, 'loadapp', _loadapp),
mock.patch.object(wsgi, 'capture_stdio'),
mock.patch.object(wsgi, 'run_server')):
rc = wsgi.run_wsgi('conf_file', 'app_section')
self.assertEqual(calls['_initrp'], 1)
self.assertEqual(calls['_loadapp'], 1)
self.assertEqual(rc, 0)
def test_run_server_failure1(self):
calls = defaultdict(lambda: 0)
def _initrp(conf_file, app_section, *args, **kwargs):
calls['_initrp'] += 1
raise wsgi.ConfigFileError('test exception')
def _loadapp(uri, name=None, **kwargs):
calls['_loadapp'] += 1
with nested(
mock.patch.object(wsgi, '_initrp', _initrp),
mock.patch.object(wsgi, 'get_socket'),
mock.patch.object(wsgi, 'drop_privileges'),
mock.patch.object(wsgi, 'loadapp', _loadapp),
mock.patch.object(wsgi, 'capture_stdio'),
mock.patch.object(wsgi, 'run_server')):
rc = wsgi.run_wsgi('conf_file', 'app_section')
self.assertEqual(calls['_initrp'], 1)
self.assertEqual(calls['_loadapp'], 0)
self.assertEqual(rc, 1)
def test_pre_auth_req_with_empty_env_no_path(self):
r = wsgi.make_pre_authed_request(
{}, 'GET')