add test direcotry
This commit is contained in:
parent
84ac77f65f
commit
ca29f42564
7
test/README.md
Normal file
7
test/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# This directory contains tests for xmpp mirror bot
|
||||||
|
In order to run tests, execute test.sh script
|
||||||
|
You need docker to run this test
|
||||||
|
On debian based systems you can install docker with:
|
||||||
|
sudo apt install docker.io
|
||||||
|
|
||||||
|
Test phrases used by testbot are in testmsgs.txt, each line is a new test message
|
6
test/config.ini
Normal file
6
test/config.ini
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[credentials]
|
||||||
|
JID = "xmppbot@localhost"
|
||||||
|
PASSWORD = "bottestpassword"
|
||||||
|
NICK = "xmppbot"
|
||||||
|
ROOM1 = "testroom1@conference.localhost"
|
||||||
|
ROOM2 = "testroom2@conference.localhost"
|
26
test/test.sh
Executable file
26
test/test.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Run ejabberd docker as a daemon
|
||||||
|
docker run --name xmppbot-test -d -p 25222:5222 ejabberd/ecs
|
||||||
|
|
||||||
|
# Wait few seconds for ejabberd to boot
|
||||||
|
sleep 5
|
||||||
|
|
||||||
|
# Create acounts for admin and xmppbot
|
||||||
|
docker exec -it xmppbot-test bin/ejabberdctl register admin localhost admintestpassword
|
||||||
|
|
||||||
|
docker exec -it xmppbot-test bin/ejabberdctl register xmppbot localhost bottestpassword
|
||||||
|
|
||||||
|
# Create MUC rooms for testing
|
||||||
|
docker exec -it xmppbot-test bin/ejabberdctl create_room testroom1 conference.localhost localhost
|
||||||
|
docker exec -it xmppbot-test bin/ejabberdctl create_room testroom2 conference.localhost localhost
|
||||||
|
|
||||||
|
# Run xmpp mirror bot
|
||||||
|
python3 ../xmppmirror &
|
||||||
|
|
||||||
|
# Run xmpp test bot
|
||||||
|
python3 testbot
|
||||||
|
|
||||||
|
# Stop and remove containter
|
||||||
|
docker stop xmppbot-test
|
||||||
|
docker rm xmppbot-test
|
||||||
|
|
127
test/testbot
Executable file
127
test/testbot
Executable file
@ -0,0 +1,127 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# XMPP bot that tests mirror bot
|
||||||
|
import argparse
|
||||||
|
import slixmpp
|
||||||
|
import configparser
|
||||||
|
|
||||||
|
CONFIG_PATH = "./testconfig.ini"
|
||||||
|
|
||||||
|
VERSION='0.1.0'
|
||||||
|
|
||||||
|
# Read test messages from testmsgs.txt
|
||||||
|
ftestmsgs=open("testmsgs.txt")
|
||||||
|
testmsgs=ftestmsgs.readlines()
|
||||||
|
ftestmsgs.close()
|
||||||
|
|
||||||
|
# Generate lists with times that test messages are sent and recieved in rooms
|
||||||
|
results1=[]
|
||||||
|
for i in testmsgs:
|
||||||
|
results1.append([i,0,0])
|
||||||
|
|
||||||
|
results2=[]
|
||||||
|
for i in testmsgs:
|
||||||
|
results2.append([i,0,0])
|
||||||
|
|
||||||
|
# Check if all sent messages are recieved
|
||||||
|
def allmsgsrecv():
|
||||||
|
ret = True
|
||||||
|
for i in results1:
|
||||||
|
if i[2] == 0:
|
||||||
|
return False
|
||||||
|
for i in results2:
|
||||||
|
if i[2] == 0:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Print results and exit
|
||||||
|
def printandexit():
|
||||||
|
print("Results of test:")
|
||||||
|
for i in results1:
|
||||||
|
print(i[0].rstrip + " : " + str(round(i[2]-i[1],2)) + " secounds")
|
||||||
|
for i in results2:
|
||||||
|
print(i[0].rstrip + " : " + str(round(i[2]-i[1],2)) + " secounds")
|
||||||
|
exit()
|
||||||
|
|
||||||
|
def show_version():
|
||||||
|
print("XMPP test bot " + VERSION)
|
||||||
|
print("License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>")
|
||||||
|
print("This is free software: you are free to change and redistribute it.")
|
||||||
|
print("There is NO WARRANTY, to the extent permitted by law.")
|
||||||
|
|
||||||
|
|
||||||
|
class MUCBot(slixmpp.ClientXMPP):
|
||||||
|
|
||||||
|
def __init__(self, jid, password, nick, room1, room2):
|
||||||
|
slixmpp.ClientXMPP.__init__(self, jid, password)
|
||||||
|
|
||||||
|
self.nick = nick
|
||||||
|
self.room1 = room1
|
||||||
|
self.room2 = room2
|
||||||
|
self.add_event_handler("session_start", self.start)
|
||||||
|
self.add_event_handler("groupchat_message", self.muc_message)
|
||||||
|
|
||||||
|
async def start(self, event):
|
||||||
|
await self.get_roster()
|
||||||
|
self.send_presence()
|
||||||
|
self.plugin['xep_0045'].join_muc(self.room1,self.nick)
|
||||||
|
self.plugin['xep_0045'].join_muc(self.room2,self.nick)
|
||||||
|
# Send test messages to both rooms
|
||||||
|
for i in results1:
|
||||||
|
time.sleep(2)
|
||||||
|
self.send_message(mto=self.room1,mbody="%s" % i[0],mtype='groupchat')
|
||||||
|
i[1]=time.time()
|
||||||
|
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
for i in results2:
|
||||||
|
time.sleep(2)
|
||||||
|
self.send_message(mto=self.room2,mbody="%s" % i[0],mtype='groupchat')
|
||||||
|
i[1]=time.time()
|
||||||
|
|
||||||
|
# When message is recieved find the word in results and record time
|
||||||
|
|
||||||
|
def muc_message(self, msg):
|
||||||
|
rtime=time.time()
|
||||||
|
rcpt=msg['from'].bare
|
||||||
|
body="%(body)s" % msg
|
||||||
|
if self.room1 in str(msg['from']):
|
||||||
|
for i in results2:
|
||||||
|
if i[0] == body:
|
||||||
|
i[2] = rtime
|
||||||
|
|
||||||
|
if self.room2 in str(msg['from']):
|
||||||
|
for i in results1:
|
||||||
|
if i[0] == body:
|
||||||
|
i[2] = rtime
|
||||||
|
|
||||||
|
if allmsgsrecv:
|
||||||
|
printandexit()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
argparser = argparse.ArgumentParser(description="XMPP bot that mirrors chat between two MUC rooms")
|
||||||
|
argparser.add_argument("--version", dest="version", help="print version information and exit", action="store_true")
|
||||||
|
args=argparser.parse_args()
|
||||||
|
|
||||||
|
## Version argument
|
||||||
|
if args.version:
|
||||||
|
show_version()
|
||||||
|
exit()
|
||||||
|
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.read(CONFIG_PATH)
|
||||||
|
JID = config.get('credentials', 'JID')
|
||||||
|
PASSWORD = config.get('credentials', 'PASSWORD')
|
||||||
|
NICK = config.get('credentials', 'NICK')
|
||||||
|
ROOM1 = config.get('credentials', 'ROOM1')
|
||||||
|
ROOM2 = config.get('credentials', 'ROOM2')
|
||||||
|
|
||||||
|
|
||||||
|
xmpp = MUCBot(JID, PASSWORD, NICK, ROOM1, ROOM2)
|
||||||
|
xmpp.register_plugin('xep_0030') # Service Discovery
|
||||||
|
xmpp.register_plugin('xep_0045') # Multi-User Chat
|
||||||
|
xmpp.register_plugin('xep_0199') # XMPP Ping
|
||||||
|
|
||||||
|
# Connect to the XMPP server and start processing XMPP stanzas.
|
||||||
|
xmpp.connect(address=("localhost",25222))
|
||||||
|
xmpp.process(forever=False)
|
||||||
|
|
6
test/testconfig.ini
Normal file
6
test/testconfig.ini
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
[credentials]
|
||||||
|
JID = "admin@localhost"
|
||||||
|
PASSWORD = "admintestpassword"
|
||||||
|
NICK = "admin"
|
||||||
|
ROOM1 = "testroom1@conference.localhost"
|
||||||
|
ROOM2 = "testroom2@conference.localhost"
|
5
test/testmsgs.txt
Normal file
5
test/testmsgs.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
test message 1
|
||||||
|
testasd
|
||||||
|
123123
|
||||||
|
symbols @!:/
|
||||||
|
>> Quote
|
Loading…
Reference in New Issue
Block a user