source: .tests/btlib.py @ 6083ea9

Last change on this file since 6083ea9 was 6083ea9, checked in by / <>, at 2021-03-31T13:22:30Z

huh

  • Property mode set to 100644
File size: 9.5 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, wait = 1):
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                time.sleep(wait)
76                if self.sck not in readable:
77                    break
78        self.log += text
79        self.tmplog += text
80        return text
81
82    def add_jabber_buddy(self, nick):
83        self.send_priv_msg("&bitlbee", "add 0 " + nick+"@localhost")
84   
85    def block_jabber_buddy(self, nick):
86        self.send_priv_msg("&bitlbee", "block " + nick)
87
88    def unblock_jabber_buddy(self, nick):
89        self.send_priv_msg("&bitlbee", "allow " + nick)
90
91    def rename_jabber_buddy(self, oldnick, newnick):
92        self.send_priv_msg("&bitlbee", "rename " + oldnick + " " + newnick)
93       
94def msg_comes_thru(sender, receiver, message):
95    sender.send_priv_msg(receiver.nick, message)
96    received = receiver.receive().find(message) != -1
97    return received
98
99def perform_test(test_function):
100    clis = []
101    clis += [IrcClient('test1', 'asd')]
102    clis += [IrcClient('test2', 'asd')]
103
104    fail = not test_function(clis)
105
106    if ALWAYSSHOWLOG or fail:
107        for cli in clis:
108            cli.receive()
109            print(SEPARATOR)
110            print("Test Log "+ cli.nick+":")
111            print(cli.tmplog)
112        print(SEPARATOR)
113    else:
114        print('script passed')
115   
116    if fail:
117        sys.exit(1)
118
119def connect_test(clis):
120    ret = True
121    for cli in clis:
122        ret = ret & cli.connect()
123    return ret
124
125def yes_test(clis):
126    ret = False
127    clis[0].send_priv_msg("&bitlbee", "yes")
128    clis[0].receive()
129    for x, fun in enumerate(FUN):
130        if (clis[0].log.find(fun) != -1):
131            ret = True
132            if x:
133                print("The RNG gods smile upon us")
134            break
135    return ret
136
137def jabber_login_test(clis):
138    ret = True
139    for cli in clis:
140        ret = ret & cli.jabber_login()
141    return ret
142
143def jabber_delete_account_test(clis):
144    ret = True
145    clis[1].receive()
146    clis[1].send_priv_msg("&bitlbee", "account list")
147    time.sleep(0.5)
148    ret = ret & (clis[1].receive().find(clis[1].nick+'@localhost') != -1)
149
150    clis[1].send_priv_msg("&bitlbee", "account on")
151    clis[1].send_priv_msg("&bitlbee", "account "+clis[1].nick+" del")
152    clis[1].receive()
153    clis[1].send_priv_msg("&bitlbee", "account list")
154    time.sleep(0.5)
155    ret = ret & (clis[1].receive().find(clis[1].nick+'@localhost') != -1)
156
157    clis[1].send_priv_msg("&bitlbee", "account off")
158    clis[1].send_priv_msg("&bitlbee", "account "+clis[1].nick+" del")
159    clis[1].receive()
160    clis[1].send_priv_msg("&bitlbee", "account list")
161    time.sleep(0.5)
162    ret = ret & (clis[1].receive().find(clis[1].nick+'@localhost') == -1)
163    return ret
164
165def register_test(clis):
166    clis[1].send_priv_msg("&bitlbee", "register "+clis[1].pwd*2)
167    ret = (clis[1].receive(wait = 10).find('Account successfully created') != -1)
168    return ret
169   
170def unregister_test(clis):
171    clis[1].send_priv_msg("&bitlbee", "drop "+clis[1].pwd*2)
172    time.sleep(0.5)
173    ret = (clis[1].receive().find('removed') != -1)
174    clis[1].send_priv_msg("&bitlbee", "drop "+clis[1].pwd*2)
175    time.sleep(0.5)
176    ret = ret & (clis[1].receive().find('That account does not exist') != -1)
177    return ret
178
179def identify_test(clis):
180    ret = True
181    clis[1].send_priv_msg("&bitlbee", "identify "+clis[1].pwd)
182    time.sleep(0.5)
183    ret = ret & (clis[1].receive().find('Incorrect password') != -1)
184
185    clis[1].send_priv_msg("&bitlbee", "identify "+clis[1].pwd*2)
186    time.sleep(0.5)
187    ret = ret & (clis[1].receive().find('Password accepted') != -1)
188    return ret
189
190def identify_nonexist_test(clis):
191    clis[1].send_priv_msg("&bitlbee", "register "+clis[1].pwd)
192    time.sleep(0.5)
193    return (clis[1].receive().find('The nick is (probably) not registered') != -1)
194
195def add_buddy_test(clis):
196    clis[0].add_jabber_buddy(clis[1].nick)
197    clis[1].send_priv_msg("&bitlbee", "yes")
198
199    clis[1].add_jabber_buddy(clis[0].nick)
200    clis[0].send_priv_msg("&bitlbee", "yes")
201
202    clis[0].send_priv_msg("&bitlbee", "blist")
203    junk = clis[0].receive()
204    ret = junk.find(clis[1].nick) != -1
205    ret = ret & (junk.find("1 available") != -1)
206    return ret
207
208def remove_buddy_test(clis):
209    ret = add_buddy_test(clis)
210
211    clis[0].send_priv_msg("&bitlbee", "remove " +clis[1].nick)
212    clis[0].send_priv_msg("&bitlbee", "blist all")
213    time.sleep(0.5)
214    ret = ret & (clis[0].receive().find(clis[1].nick) == -1)
215
216    clis[0].add_jabber_buddy(clis[1].nick)
217    clis[1].send_priv_msg("&bitlbee", "yes")
218    time.sleep(1)
219    clis[0].send_priv_msg("&bitlbee", "blist all")
220    time.sleep(0.5)
221    junk = clis[0].receive()
222    #ret = ret & (junk.find("1 available") != -1)
223    ret = ret & (junk.find(clis[1].nick) != -1)
224    return ret
225
226def message_test(clis):
227    ret = msg_comes_thru(clis[0], clis[1], 'ohai <3')
228    ret = ret & msg_comes_thru(clis[1], clis[0], 'uwu *pounces*')
229    return ret
230
231def block_test(clis):
232    clis[0].block_jabber_buddy(clis[1].nick)
233    ret = not msg_comes_thru(clis[1], clis[0], 'm-meow?')
234    clis[0].unblock_jabber_buddy(clis[1].nick)
235    ret = ret & msg_comes_thru(clis[1], clis[0], '*purrs*')
236    return ret
237
238def rename_test(clis):
239    newname = "xXx_pup_LINKENPARK4EVA"
240    message = "rawr meanmz i luv<3 u in dinosaur"
241
242    clis[0].rename_jabber_buddy(clis[1].nick, newname)
243    clis[0].send_priv_msg(newname, message)
244    ret = clis[1].receive().find(message) != -1
245
246    clis[0].rename_jabber_buddy("-del", newname)
247    ret = ret & msg_comes_thru(clis[0], clis[1], "rawr")
248    return ret
249
250def status_test(clis):
251    status = "get out of my room mom"
252    clis[1].send_priv_msg("&bitlbee", "set status '"+status+"'")
253    clis[0].send_priv_msg("&bitlbee", "info "+clis[1].nick)
254    ret = (clis[0].receive().find("jabber - Status message: "+status) != -1)
255
256    clis[1].send_priv_msg("&bitlbee", "set")
257    ret = ret & (clis[1].receive().find(status) != -1)
258
259    clis[1].send_priv_msg("&bitlbee", "set -del status")
260    clis[0].send_priv_msg("&bitlbee", "info "+clis[1].nick)
261    ret = ret & (clis[0].receive().find("jabber - Status message: (none)") != -1)
262    return ret
263
264def offline_test(clis):
265    clis[0].send_priv_msg("&bitlbee", "account off")
266
267    junk = clis[0].receive()
268    ret = (junk.find(clis[1].nick) != -1)
269    ret = ret & (junk.find("QUIT") != -1)
270
271    junk = clis[1].receive()
272    ret = ret & (junk.find(clis[0].nick) != -1)
273    ret = ret & (junk.find("QUIT") != -1)
274
275    clis[0].send_priv_msg(clis[1].nick, "i'm not ur mom")
276    ret = ret & (clis[0].receive().find("No such nick/channel") != -1)
277
278    clis[0].send_priv_msg("&bitlbee", "account on")
279
280    junk = clis[0].receive()
281    ret = ret & (junk.find(clis[1].nick) != -1)
282    ret = ret & (junk.find("JOIN") != -1)
283
284    junk = clis[1].receive()
285    ret = ret & (junk.find(clis[0].nick) != -1)
286    ret = ret & (junk.find("JOIN") != -1)
287
288    return ret
289
290def default_target_test(clis):
291    clis[0].send_priv_msg("&bitlbee", "set default_target last")
292    clis[0].send_priv_msg("&bitlbee", "test2: ur mah default now")
293   
294    ret = (clis[1].receive().find("ur mah default now") != -1)
295
296    clis[0].send_priv_msg("&bitlbee", "mrow")
297    ret = ret & (clis[1].receive().find("mrow") != -1)
298
299    clis[0].send_priv_msg("root", "set default_target root")
300    junk = clis[0].receive()
301    ret = ret & (junk.find("default_target") != -1)
302    ret = ret & (junk.find("root") != -1)
303
304    clis[0].send_priv_msg("&bitlbee", "yes")
305    ret = ret & (clis[1].receive().find("yes") == -1)
306    return ret
307
308def help_test(clis):
309    clis[0].send_priv_msg("&bitlbee", "help")
310    ret = (clis[0].receive().find("identify_methods") != -1)
311    clis[0].send_priv_msg("&bitlbee", "help commands")
312    ret = ret & (clis[0].receive().find("qlist") != -1)
313    return ret
Note: See TracBrowser for help on using the repository browser.