merge
This commit is contained in:
102
runsamples.py
Normal file
102
runsamples.py
Normal file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/env python
|
||||
"""Execute all sample applications.
|
||||
|
||||
Runs over all the sample applications, determines their type (App Engine,
|
||||
Django, or a command-line application), and then runs them checking for a good
|
||||
return status in the case of command-line applications and a 200 OK response in
|
||||
the case of the App Engine and Django samples.
|
||||
"""
|
||||
import gflags
|
||||
import httplib2
|
||||
import logging
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
|
||||
FLAGS = gflags.FLAGS
|
||||
|
||||
gflags.DEFINE_list('samples_to_skip', ['latitude'],
|
||||
'A comma separated list of project directory names to be skipped.')
|
||||
|
||||
gflags.DEFINE_enum('logging_level', 'INFO',
|
||||
['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
|
||||
'Set the level of logging detail.')
|
||||
|
||||
gflags.DEFINE_string('app_engine_dir', '../google_appengine/',
|
||||
'Directory where Google App Engine is installed.')
|
||||
|
||||
gflags.DEFINE_string('sample_root', 'samples/oauth2',
|
||||
'The root directory for all the samples.')
|
||||
|
||||
|
||||
def main(argv):
|
||||
try:
|
||||
argv = FLAGS(argv)
|
||||
except gflags.FlagsError, e:
|
||||
print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS)
|
||||
sys.exit(1)
|
||||
|
||||
logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
|
||||
|
||||
for dirname in os.listdir(FLAGS.sample_root):
|
||||
if dirname in FLAGS.samples_to_skip:
|
||||
logging.debug('Skipping ' + fulldirname + ' (blacklist)')
|
||||
continue
|
||||
fulldirname = os.path.join(FLAGS.sample_root, dirname)
|
||||
filelist = os.listdir(fulldirname)
|
||||
if 'settings.py' in filelist and 'manage.py' in filelist:
|
||||
logging.info(fulldirname + ' [Django]')
|
||||
proc = subprocess.Popen(
|
||||
[os.path.join(fulldirname, 'manage.py'),
|
||||
'runserver'])
|
||||
# Now just wait, because Django actually spawns a sub-process that does
|
||||
# the I/O and does something funky with stdout so we can't read it and
|
||||
# figure out when it is started.
|
||||
time.sleep(3)
|
||||
h = httplib2.Http()
|
||||
resp, content = h.request('http://localhost:8000/')
|
||||
assert(200 == resp.status)
|
||||
time.sleep(1)
|
||||
logging.debug('Django ppid: %d', proc.pid)
|
||||
# Find and kill the sub-process manage.py forked.
|
||||
findpids = subprocess.Popen(['ps', '--ppid', str(proc.pid), 'o', 'pid',],
|
||||
stdout=subprocess.PIPE)
|
||||
for p in findpids.stdout.readlines():
|
||||
if 'PID' not in p:
|
||||
os.kill(int(p), signal.SIGINT)
|
||||
os.kill(proc.pid, signal.SIGINT)
|
||||
proc.wait()
|
||||
elif 'app.yaml' in filelist:
|
||||
logging.info(fulldirname + ' [App Engine]')
|
||||
proc = subprocess.Popen(
|
||||
[os.path.join(FLAGS.app_engine_dir, 'dev_appserver.py'),
|
||||
fulldirname],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT)
|
||||
line = proc.stdout.readline()
|
||||
logging.debug('READ: ' + line)
|
||||
while '] Running application' not in line:
|
||||
line = proc.stdout.readline()
|
||||
logging.debug('READ: ' + line)
|
||||
h = httplib2.Http()
|
||||
resp, content = h.request('http://localhost:8080/')
|
||||
assert(200 == resp.status)
|
||||
time.sleep(1)
|
||||
os.kill(proc.pid, signal.SIGINT)
|
||||
proc.wait()
|
||||
else:
|
||||
logging.info(fulldirname + ' [Command-line]')
|
||||
for filename in os.listdir(fulldirname):
|
||||
if filename.endswith('.py'):
|
||||
logging.info('Running: ' + filename)
|
||||
proc = subprocess.Popen(['python',
|
||||
os.path.join(fulldirname, filename)])
|
||||
returncode = proc.wait()
|
||||
assert(returncode == 0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv)
|
||||
|
||||
1
samples/appengine/gflags.py
Symbolic link
1
samples/appengine/gflags.py
Symbolic link
@@ -0,0 +1 @@
|
||||
../../gflags.py
|
||||
1
samples/appengine/gflags_validators.py
Symbolic link
1
samples/appengine/gflags_validators.py
Symbolic link
@@ -0,0 +1 @@
|
||||
../../gflags_validators.py
|
||||
Reference in New Issue
Block a user