source: .tests/test1.py @ da215ef

Last change on this file since da215ef was da215ef, checked in by / <>, at 2021-03-18T12:10:49Z

better test the rest before figuring this out

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