source: .tests/test1.py @ 68ba9f4

Last change on this file since 68ba9f4 was 68ba9f4, checked in by / <>, at 2021-03-17T16:30:14Z

just slightly under score

  • Property mode set to 100644
File size: 7.8 KB
RevLine 
[946c6da]1import socket
2import sys
3import time
4import select
[90417ce]5
[a4623f4]6YESTEST = True
[946c6da]7MESSAGETEST = True
[c248e37]8BLOCKTEST = False
[35c72b7]9OFFLINETEST = True
[946c6da]10RENAMETEST = True
[7361a6a]11STATUSTEST = True
12DEFAULTTARGETTEST = True
[d28ca33]13SHOWLOG = False
14SHOWTESTLOG = True
[a4623f4]15
[da75c3d]16FUN = [
17"Did I ask you something?",
18"Oh yeah, that's right.",
19"Alright, alright. Now go back to work.",
20"Buuuuuuuuuuuuuuuurp... Excuse me!",
21"Yes?",
22"No?",
23]
24
[c248e37]25SEPARATOR = "="*60
26SMOLPARATOR = "-"*60
[946c6da]27
28class IrcClient:
29    def __init__(self, nick, pwd):
[90417ce]30        self.nick = nick
[946c6da]31        self.pwd = pwd
[90417ce]32        self.log = ''
[23fd63d]33        self.tmplog = ''
[90417ce]34        self.sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
35
[0167270]36    def send_raw(self, msg, loud = False, log = True):
[d24e6f7]37        self.receive()
[ef2cbca]38        if loud:
39            print('FROM '+ self.nick + '|| ' + msg)
[0167270]40        if log:
41            self.log += msg+'\r\n'
42            self.tmplog += msg+'\r\n'
[90417ce]43        self.sck.send((msg+'\r\n').encode())
44
[d28ca33]45    def send_priv_msg(self, recip, msg, loud = False):
[946c6da]46        self.send_raw('PRIVMSG '+recip+' :'+msg, loud)
[90417ce]47
48    def connect(self):
[314c3f8]49        try:
50            self.sck.connect(('127.0.0.1', 6667))
51        except:
[ef2cbca]52            print("IRC connection failed for " + self.nick)
[314c3f8]53            sys.exit(1)
[ef2cbca]54       
55        print("IRC connection established for " + self.nick)
[314c3f8]56
[946c6da]57        self.send_raw('USER ' + (self.nick + " ")*3)
58        self.send_raw('NICK ' + self.nick)
59        self.send_raw('JOIN &bitlbee')
[90417ce]60
[946c6da]61    def jabber_login(self):
62        self.send_priv_msg("&bitlbee", "account add jabber "+self.nick+"@localhost "+self.pwd)
[90417ce]63        time.sleep(0.3)
[946c6da]64        self.send_priv_msg("&bitlbee", "account on")
[314c3f8]65        time.sleep(1)
66        self.receive()
67        if self.log.find('Logged in') == -1:
[ef2cbca]68            print("Jabber login failed for " + self.nick)
[314c3f8]69            sys.exit(1)
[ef2cbca]70        else:
71            print("Jabber login successful for " + self.nick)
[90417ce]72
73    def receive(self):
74        text = ''
75        while True:
76            readable, _, _ = select.select([self.sck], [], [], 5)
77            if self.sck in readable:
78                text += self.sck.recv(2040).decode()
79                for line in text.split('\n'):
80                    if line.find('PING') != -1:
[946c6da]81                        self.send_raw('PONG ' + line.split()[1])
[90417ce]82            else:
83                break
84        self.log += text
[23fd63d]85        self.tmplog += text
[90417ce]86        return text
87
[946c6da]88    def add_jabber_buddy(self, nick):
89        self.send_priv_msg("&bitlbee", "add 0 " + nick+"@localhost")
[ef2cbca]90   
[946c6da]91    def block_jabber_buddy(self, nick):
92        self.send_priv_msg("&bitlbee", "block " + nick)
[43a257d]93
[946c6da]94    def unblock_jabber_buddy(self, nick):
95        self.send_priv_msg("&bitlbee", "allow " + nick)
[ef2cbca]96
[946c6da]97    def rename_jabber_buddy(self, oldnick, newnick):
98        self.send_priv_msg("&bitlbee", "rename " + oldnick + " " + newnick)
[ef2cbca]99       
[a4623f4]100def msg_comes_thru(sender, receiver, message):
[946c6da]101    sender.send_priv_msg(receiver.nick, message)
[12886d4]102    received = receiver.receive().find(message) != -1
[a4623f4]103    return received
104
[d28ca33]105def perform_test(failed, clis, test_function, test_name):
106    fail = False
[a4623f4]107    for cli in clis:
108        cli.tmplog=""
109
110    print("\n"+SEPARATOR)
111    print("Test: "+test_name)
112
113    if test_function(clis):
114        print("Test passed")
115    else:
116        print("Test failed")
[d28ca33]117        failed += [test_name]
118        fail = True
[f1ba258]119    for cli in clis:
120        cli.receive()
[a4623f4]121
[d28ca33]122    if fail or SHOWTESTLOG:
[a4623f4]123        for cli in clis:
124            if cli.tmplog != "":
125                print(SMOLPARATOR)
126                print("Test Log "+ cli.nick+":")
127                print(cli.tmplog)
[c248e37]128    print(SEPARATOR)
[a4623f4]129
130def yes_test(clis):
131    ret = False
[a3d01fb]132    clis[0].send_priv_msg("&bitlbee", "yes")
[da75c3d]133    clis[0].receive()
134    for x, fun in enumerate(FUN):
135        if (clis[0].log.find(fun) != -1):
[a4623f4]136            ret = True
[da75c3d]137            if x:
138                print("The RNG gods smile upon us")
[a4623f4]139            break
140    return ret
141
142def message_test(clis):
143    ret = msg_comes_thru(clis[0], clis[1], 'ohai <3')
144    ret = ret & msg_comes_thru(clis[1], clis[0], 'uwu *pounces*')
145    return ret
146
147def block_test(clis):
148    clis[0].block_jabber_buddy(clis[1].nick)
149    ret = not msg_comes_thru(clis[1], clis[0], 'm-meow?')
150    clis[0].unblock_jabber_buddy(clis[1].nick)
151    ret = ret & msg_comes_thru(clis[1], clis[0], '*purrs*')
152    return ret
153
154def rename_test(clis):
155    newname = "xXx_pup_LINKENPARK4EVA"
156    message = "rawr meanmz i luv<3 u in dinosaur"
157
158    clis[0].rename_jabber_buddy(clis[1].nick, newname)
159    clis[0].send_priv_msg(newname, message)
160    ret = clis[1].receive().find(message) != -1
161
162    clis[0].rename_jabber_buddy("-del", newname)
163    ret = ret & msg_comes_thru(clis[0], clis[1], "rawr")
164    return ret
[43a257d]165
[0e2c8b4]166def status_test(clis):
[76f0fd1]167    status = "get out of my room mom"
168    clis[1].send_priv_msg("&bitlbee", "set status '"+status+"'")
[0e2c8b4]169    clis[0].send_priv_msg("&bitlbee", "info "+clis[1].nick)
[35c72b7]170    ret = (clis[0].receive().find("jabber - Status message: "+status) != -1)
[0e2c8b4]171
172    clis[1].send_priv_msg("&bitlbee", "set -del status")
173    clis[0].send_priv_msg("&bitlbee", "info "+clis[1].nick)
[2e9b39a]174    ret = ret & (clis[0].receive().find("jabber - Status message: (none)") != -1)
[0e2c8b4]175    return ret
176
177def offline_test(clis):
[35c72b7]178    clis[0].send_priv_msg("&bitlbee", "account off")
179
180    junk = clis[0].receive()
181    ret = (junk.find(clis[1].nick) != -1)
[76f0fd1]182    ret = ret & (junk.find("QUIT") != -1)
[35c72b7]183
184    junk = clis[1].receive()
185    ret = ret & (junk.find(clis[0].nick) != -1)
[76f0fd1]186    ret = ret & (junk.find("QUIT") != -1)
[35c72b7]187
[2e9b39a]188    clis[0].send_priv_msg(clis[1].nick, "i'm not ur mom")
[76f0fd1]189    ret = ret & (clis[0].receive().find("No such nick/channel") != -1)
[35c72b7]190
191    clis[0].send_priv_msg("&bitlbee", "account on")
192
193    junk = clis[0].receive()
194    ret = ret & (junk.find(clis[1].nick) != -1)
[76f0fd1]195    ret = ret & (junk.find("JOIN") != -1)
[35c72b7]196
197    junk = clis[1].receive()
198    ret = ret & (junk.find(clis[0].nick) != -1)
[76f0fd1]199    ret = ret & (junk.find("JOIN") != -1)
[35c72b7]200
201    return ret
[0e2c8b4]202
[7361a6a]203def default_target_test(clis):
204    clis[0].send_priv_msg("&bitlbee", "set default_target last")
[5552588]205    clis[0].send_priv_msg("&bitlbee", "test2: ur mah default now")
206   
207    ret = (clis[1].receive().find("ur mah default now") != -1)
[7361a6a]208
[5552588]209    clis[0].send_priv_msg("&bitlbee", "mrow")
210    ret = ret & (clis[1].receive().find("mrow") != -1)
[7361a6a]211
212    clis[0].send_priv_msg("root", "set default_target root")
[68ba9f4]213    junk = clis[0].receive()
214    ret = ret & (junk.find("default_target") != -1)
215    ret = ret & (junk.find("root") != -1)
[7361a6a]216
217    clis[0].send_priv_msg("&bitlbee", "yes")
218    ret = ret & (clis[1].receive().find("yes") == -1)
219    return ret
220
[d28ca33]221def run_tests(failed):
[90417ce]222    clis = []
[946c6da]223    clis += [IrcClient('test1', 'asd')]
224    clis += [IrcClient('test2', 'asd')]
[90417ce]225    for cli in clis:
226        cli.connect()
[946c6da]227
[a4623f4]228    if YESTEST:
[d28ca33]229        perform_test(failed, clis, yes_test, "Yes")
[23fd63d]230
[0167270]231    print("")
[23fd63d]232    for cli in clis:
233        cli.jabber_login()
[d28ca33]234
[946c6da]235    clis[0].add_jabber_buddy(clis[1].nick)
[04d7229]236    clis[1].add_jabber_buddy(clis[0].nick)
237    clis[0].send_priv_msg("&bitlbee", "yes")
238    clis[1].send_priv_msg("&bitlbee", "yes")
[946c6da]239
240    if MESSAGETEST:
[d28ca33]241        perform_test(failed, clis, message_test, "Send message")
[946c6da]242
243    if BLOCKTEST:
[d28ca33]244        perform_test(failed, clis, block_test, "Block user")
[d24e6f7]245
[946c6da]246    if RENAMETEST:
[d28ca33]247        perform_test(failed, clis, rename_test, "Rename user")
[a4623f4]248
[0e2c8b4]249    if STATUSTEST:
250        perform_test(failed, clis, status_test, "Change status")
251
[35c72b7]252    if OFFLINETEST:
[04d7229]253        perform_test(failed, clis, offline_test, "Go offline")
[35c72b7]254
[7361a6a]255    if DEFAULTTARGETTEST:
[5552588]256        perform_test(failed, clis, default_target_test, "Default target")
[7361a6a]257
[d28ca33]258    if failed or SHOWLOG:
[a4623f4]259        print("")
260        for cli in clis:
261            print(SMOLPARATOR)
262            print("Log "+ cli.nick+":")
263            print(cli.log)
264        print(SMOLPARATOR)
265
[d28ca33]266    if failed:
[a4623f4]267        print("\n" + SEPARATOR + "\nSome test have failed:")
[d28ca33]268        for fail in failed:
[a4623f4]269            print(fail)
270    else:
271        print("\n" + SEPARATOR + "\nAll tests have passed")
[ef2cbca]272   
[90417ce]273if __name__ == "__main__":
[d28ca33]274    failed = []
275    run_tests(failed)
276    if failed:
[946c6da]277        sys.exit(1)
Note: See TracBrowser for help on using the repository browser.