source: .tests/test1.py @ 3d4cb51

Last change on this file since 3d4cb51 was 3d4cb51, checked in by / <>, at 2021-03-18T10:40:41Z

help

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