source: .tests/test1.py @ 35c72b7

Last change on this file since 35c72b7 was 35c72b7, checked in by / <>, at 2021-03-17T14:24:03Z

offlinetest

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