source: .tests/btlib.py @ b77884c

Last change on this file since b77884c was b77884c, checked in by / <>, at 2021-03-31T12:41:39Z

wait longer for register

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