Source code for botlib.test
# mod/test.py
#
#
""" plugin containing test commands and classes. """
from .object import Object
from .event import Event
from .utils import stripped, sname
from .trace import get_exception
from .error import ENODATE
from .space import cfg, fleet, kernel, users
from .template import opts_defs
import logging
import termios
import string
import random
import types
import time
import os
[docs]def test():
print("yooo!")
testdict = {
"key1": "val1",
"key2": "val2"
}
options = ["test", 1, 10, "mekker", True, False, 33.33, testdict]
examples = Object()
examples.find = "find todo"
examples.last = "last cfg"
examples.tommorrow = "tomorrow take some time off."
examples.deleted = "deleted rss"
examples.log = "log wakker"
examples.rss = "http://nos.nl"
examples.todo = "todo code some code"
examples.user = "user root@shell"
examples.timer = "timer 23.35 blablabla"
examples.show = "show fleet"
examples.shop = "shop bacon"
examples.rm = "rm rss[0]"
examples.restore = "restore rss[0]"
examples.reload = "reload cmnds"
examples.perm = "perm root@shell oper"
examples.meet = "meet root@shell oper"
examples.mbox = "mbox ~/25-1-2013"
examples.loglevel = "loglevel info"
examples.first = "first cfg"
examples.dump = "dump todo"
examples.delperm = "delperm root@shell oper"
examples.cfg = "cfg irc"
examples.announce = "announce bla"
examples.alias = "alias l cmnds"
varnames = Object()
varnames.object = Object(txt="test", date="Sat Jan 14 00:02:29 2017")
varnames.daystring = "2017-08-29 16:34:23.837288"
varnames.event = Event(txt="test")
varnames.seconds = 60
varnames.daystr = "Sat Jan 14 00:02:29 2017"
varnames.txt = "i told you so !!"
varnames.path = "data/runtime/kernel"
varnames.optionlist = "-b -a -l info"
varnames.level = "info"
varnames.error = "userdefined error message"
varnames.fd = 1
#varnames.old = termios.tcgetattr(1)
varnames.text = "blablabla mekker"
varnames.signature = "1e7f50d2015ac2ddc1f2ae8cf8ed6dfd896cab71"
varnames.options = opts_defs
varnames.u = "bart!~bart@localhost"
varnames.jid = "monitor@localhost/blamekker"
varnames.url = "http://localhost"
varnames.obj = {"bla": "mekker"}
varnames.func = test
varnames.timestamp = time.time()
varnames.origin = "root@shell"
varnames.perm = "OPER"
varnames.o = Object(txt="test")
varnames.depth = 2
varnames.keys = ["test", "txt"]
varnames.uniqs = ["bla"]
varnames.ignore = {"test": "mekker"}
varnames.notwant = {"test": "mekker"}
varnames.want = {"test": "mekker"}
[docs]def randomname():
return random.choice(options)
[docs]def randomarg():
t = random.choice(types.__all__)
return types.new_class(t)()
[docs]def e(event):
event.reply(event.nice())
event.save()
[docs]def flood(event):
txt = "b" * 5000
event.reply(txt)
[docs]def forced(event):
for bot in fleet:
try:
bot._sock.shutdown(2)
except (OSError, AttributeError):
pass
if not cfg.test:
[docs] def exception(event):
if not users.allowed(event.origin, "OPER"):
event.reply("you are not allowed to give the exception command.")
return
raise Exception('test exception')
[docs]def wrongxml(event):
event.reply('sending bork xml')
for bot in fleet:
bot.raw('<message asdfadf/>')
[docs]def unicode(event):
event.reply(outtxt)
[docs]def deadline(event):
try:
nrseconds = int(event.parsed.rest)
except:
nrseconds = 2
event.reply('starting %s sec sleep' % nrseconds)
time.sleep(nrseconds)
[docs]def testcfg(event):
e = Event()
path = e.save()
event.reply(path)
[docs]def html(event):
event.reply('<span style="font-family: fixed; font-size: 10pt"><b>YOOOO BROEDERS</b></span>')
[docs]def cmndrun(event):
if not cfg.changed:
event.reply("you need to set the workdir, use the -d option")
return
if not cfg.test:
event.reply("the test option is not set.")
return
for name in sorted(kernel.modules()):
if name in ["botlib.test", "botlib.rss"]:
continue
mod = kernel.direct(name)
for n in dir(mod):
if n in exclude:
continue
func = getattr(mod, n, None)
if func and type(func) in [types.FunctionType, types.MethodType]:
if "event" in func.__code__.co_varnames:
e = Event()
e._funcs.append(func)
e.origin = "root@shell"
e.server = "localhost"
e.btype = "cli"
kernel.put(e)
[docs]def functest(event):
if not cfg.changed:
event.reply("you need to set the workdir, use the -d option")
return
if not cfg.test:
event.reply("the test option is not set.")
return
for name in sorted(kernel.modules()):
if name in ["botlib.test", "botlib.rss"]:
continue
mod = kernel.direct(name)
keys = dir(mod)
random.shuffle(keys)
for n in keys:
if n in exclude:
continue
obj = getattr(mod, n, None)
for func in dir(obj):
if func and type(func) in [types.FunctionType, types.MethodType]:
arglist = []
for name in func.__code__.co_varnames:
nrvar = func.__code__.co_argcount
n = varnames.get(name, None)
if n:
arglist.append(n)
try:
func(*arglist[:nrvar])
except:
logging.error(get_exception())
[docs]def testcmnds(event):
if not cfg.changed:
event.reply("you need to set the workdir, use the -d option")
return
if not cfg.test:
event.reply("the test option is not set.")
return
keys = list(kernel._names.keys())
random.shuffle(keys)
for cmnd in keys:
if cmnd in exclude:
continue
if cmnd == "find":
name = "email"
else:
name = randomname()
e = Event(event)
e.btype = event.btype
e.server = event.server
cmnd = examples.get(cmnd, cmnd)
e.txt = cmnd
e.origin = "root@shell"
e.parse()
kernel.put(e)
[docs]def runkernel(event):
if not cfg.changed:
event.reply("you need to set the workdir, use the -d option")
return
if not cfg.test:
event.reply("the test option is not set.")
return
event.origin = "root@shell"
thrs = []
try:
nrloops = int(event._parsed.args[0])
except:
nrloops = 1
for x in range(nrloops):
thr = kernel.launch(testcmnds, event)
thrs.append(thr)
for thr in thrs:
thr.join()
exclude = ["reboot", "real_reboot", "fetcher", "synchronize", "init", "shutdown", "wrongxml","mbox", "testcmnds", "runkernel", "functest", "cmndrun"]
outtxt = u"Đíť ìš éèñ ëņċøďıńğŧęŝţ· .. にほんごがはなせません .. ₀0⁰₁1¹₂2²₃3³₄4⁴₅5⁵₆6⁶₇7⁷₈8⁸₉9⁹ .. ▁▂▃▄▅▆▇▉▇▆▅▄▃▂▁ .. .. uǝʌoqǝʇsɹǝpuo pɐdı ǝɾ ʇpnoɥ ǝɾ"