#!/usr/bin/env python
import os, sys, shutil, time, string
def cmd(st):
c = os.path.join(twistedBinDir,'') + st
print "Running Command: %s" % repr(c)
return os.system(c)
def browse(url):
scmd(webbrowser+" "+url)
if block:
print "Hit enter to continue:"
raw_input()
def scmd(st):
print 'Running System Command: %s' % repr(st)
return os.system(st)
def message(*m):
print '/------'
print '|####'
for line in m:
print '|####', line
print '|####'
print '\------'
def twistdf(f, p=None):
if p:
cmd("twistd --file %s.tap --rundir %s" % (f, p))
else:
cmd("twistd -f %s.tap" % (f,))
time.sleep(0.5)
def twistdg(g):
cmd("twistd -g %s" %g)
time.sleep(0.5)
def twistdy(y):
cmd("twistd -y %s" % (y,))
time.sleep(0.5)
def killit(path=None):
if path:
scmd("kill `cat %s/twistd.pid`" % (path,))
else:
scmd("kill `cat twistd.pid`")
# Give it a sec to come down.
time.sleep(0.5)
def pause():
print "Hit enter to continue."
raw_input()
def GUITest():
os.environ['PYTHONPATH'] = '%s:%s' % (os.environ.get('PYTHONPATH') or '',
examplesDir)
message("Running Qt app.")
scmd("python %s/qtdemo.py" % examplesDir)
message("Running wxPython app.")
scmd("python %s/wxdemo.py" % examplesDir)
def basicToolTest():
message("You will now be connected to an echo server")
twistdy(twistedBinDir+"/../admin/echo.py")
try:
time.sleep(0.5)
scmd("telnet localhost 18899")
finally:
killit()
def basicWebTest():
message("Running Basic Web Test")
cmd("mktap web --port 18080")
try:
twistdf("web")
try:
message("You should see a rather complex bunch of widgetry now.")
browse("http://localhost:18080/")
finally:
killit()
finally:
scmd("rm web.tap")
def staticWebTest():
cmd("mktap web --port 18080 --path %s/../static" % twistedBinDir)
try:
twistdf("web")
try:
message("You should see an 'it worked' page now.",
"(depending on your browser, you may need to reload)")
browse("http://localhost:18080/")
message("This is Python CGI test output.")
browse("http://localhost:18080/test.cgi")
message("This is RPY test output.")
browse("http://localhost:18080/test.rpy")
finally:
killit()
finally:
scmd("rm web.tap")
def sslWebTest():
cmdfmt = ("mktap web --port 18080 --https=18443 -k "
"%s/../doc/examples/server.pem "
"-c %s/../doc/examples/server.pem --path %s/../static")
message("Running SSL Web Test")
cmd(cmdfmt % (twistedBinDir, twistedBinDir, twistedBinDir))
try:
twistdf("web")
try:
browse("https://localhost:18443/")
finally:
killit()
finally:
scmd("rm web.tap")
def distWebTest():
message("Running Distributed Web Test")
# make directories to stage the test
scmd("mkdir Personal"); scmd("mkdir User")
# make & start servers
cmd("mktap --append Personal/web.tap web --personal --port 18080")
twistdf("Personal/web", "Personal")
cmd("mktap --append User/web.tap web --user --port 18080")
twistdf("User/web", "User")
try:
# browse a dead web page
message("This should say 'Unable to connect to distributed server'",
"If it doesn't finish loading, it's broken. Reload a few times..")
browse("http://localhost:18080/nobody.twistd")
# browse a live web page
message("This should be a bunch-of-widgets test page.")
browse("http://localhost:18080/%s.twistd" % username)
finally:
killit("User")
killit("Personal")
shutil.rmtree("User")
shutil.rmtree("Personal")
def runTelnetTest():
message("Running Telnet Test")
cmd("mktap telnet -p 18023 -u username -w password")
try:
twistdf("telnet")
try:
message("Log in with the username 'username', password 'password'.",
"You should be able to execute python code.",
"Log out with '^]close'")
scmd("telnet localhost 18023")
finally:
killit()
finally:
scmd("rm telnet.tap")
def runManholeTest():
message("Running Manhole Test")
cmd("mktap manhole --port 12943 -u username -w password")
try:
twistdf("manhole")
try:
message("Log in with the username 'username', password 'password'.",
"and bask in the l33tness of direct manipulation.")
cmd("manhole --port 12943")
finally:
killit()
finally:
scmd("rm manhole.tap")
def runWordsTest():
message("Running Words Test")
cmd("mktap words --irc 16767 --port 18787 --web 18080")
try:
twistdf("words")
try:
message("Create yourself an account, username 'test' password 'testing'.")
browse("http://localhost:18080/create")
message("You will have to '/msg *login* testing' to log in.")
scmd(ircclient+" test localhost:16767")
block and pause()
message("Now let's test the 'im' interface.")
cmd("im")
finally:
killit()
finally:
scmd("rm words.tap")
def runRealityTest():
message("Running Reality Test")
for mapname, loginname, password in [('TRDemo', 'guest', 'guest'),
('Inheritance', 'Damien', 'admin'),
('Divunal', 'guest', 'guest')]:
if os.path.exists(mapname):
twistdg(mapname)
message("Log in now, username %s password %s" %
(repr(loginname), repr(password)))
cmd("faucet")
message("Now again, with the TK interface.")
cmd("faucet --toolkit tk")
message("Log in again on the telnet interface.")
scmd("telnet localhost 14040")
message("Now take a look at the website, after logging in")
browse("http://localhost:18080/")
killit()
else:
message("reality map %s not found, skipping" % mapname)
def runExampleTest():
os.environ['PYTHONPATH'] = '%s:%s' % (os.environ.get('PYTHONPATH') or '',
examplesDir)
scmd("python %s/pbecho.py" % examplesDir)
twistdf("pbecho-start")
try:
message("You should see a 'hello world'")
scmd("python %s/pbechoclient.py" % examplesDir)
pause()
finally:
killit()
def runMailTest():
message("Starting mail test. ",
"Output should be one email (postmaster@foo.bar) ",
"and one bounce (postmaster@no.such.domain).",)
for p in ('dump', 'dump2'):
if os.path.exists(p):
scmd('rm -rf %s' % p)
os.mkdir(p)
cmd("mktap mail --domain foo.bar=dump --user postmaster=postmaster "
" --pop3 18110")
cmd("mktap --append mail.tap mail --relay 127.0.0.1,8025=dump2"
" --smtp 18026 --pop3 18111")
twistdf("mail")
try:
time.sleep(1.0)
import smtplib, poplib
s = smtplib.SMTP('127.0.0.1', 18026)
s.sendmail("m@moshez.org", ['postmaster@foo.bar'], '''\
Subject: How are you gentlemen?
All your base are belong to us
''')
s.quit()
time.sleep(5)
p = poplib.POP3('127.0.0.1', 18110)
p.apop('postmaster@foo.bar', 'postmaster')
s = p.retr(1)
print s
print string.join(s[1], '\n')
p.dele(1)
p.quit()
s = smtplib.SMTP('127.0.0.1', 18026)
s.sendmail("postmaster@foo.bar", ['moshez@no.such.domain'], '''\
Subject: How are you ladies?
All your dependents are belong to us
''')
s.quit()
time.sleep(10)
p = poplib.POP3('127.0.0.1', 18110)
p.apop('postmaster@foo.bar', 'postmaster')
print string.join(p.retr(1)[1], '\n')
p.dele(1)
p.quit()
finally:
killit()
scmd('rm -rf dump dump2')
def runAllTests():
message("Starting test.")
GUITest()
basicToolTest()
basicWebTest()
staticWebTest()
sslWebTest()
distWebTest()
runManholeTest()
runTelnetTest()
runWordsTest()
runRealityTest()
runExampleTest()
runMailTest()
message('All tests run.')
twistedBinDir = os.path.join(os.path.dirname(sys.argv[0]), '..', 'bin')
examplesDir = twistedBinDir+'/../doc/examples'
def main():
global webbrowser, username, ircclient, block
try:
block = sys.argv[1] == "-b"
except IndexError:
block = None
try:
webbrowser = os.environ['WEBBROWSER']
username = os.environ['USER']
ircclient = os.environ['IRCCLIENT']
except KeyError:
message("Required Environment Variables:",
" * WEBBROWSER: a command which will run a web browser.",
" (If this doesn't block until the window is closed,",
" pass '-b' as an argument to the script.)",
" * IRCCLIENT: an IRC client in the style of ircii (use -b in the",
" same situation as above)",
" * USER: your UNIX username.")
else:
runAllTests()
if __name__ == '__main__':
main()
syntax highlighted by Code2HTML, v. 0.9.1