add test direcotry
This commit is contained in:
		
							
								
								
									
										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 | ||||
		Reference in New Issue
	
	Block a user