source: .tests/test1.py @ 946c6da

Last change on this file since 946c6da was 946c6da, checked in by / <>, at 2021-03-15T13:45:09Z

just for fun

  • Property mode set to 100644
File size: 4.1 KB
Line 
1import socket
2import sys
3import time
4import select
5
6MESSAGETEST = True
7BLOCKTEST = False
8OFFLINETEST = False
9RENAMETEST = True
10
11FAILED = False
12
13class IrcClient:
14    def __init__(self, nick, pwd):
15        self.nick = nick
16        self.pwd = pwd
17        self.log = ''
18        self.sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
19
20    def send_raw(self, msg, loud = True):
21        self.receive()
22        if loud:
23            print('FROM '+ self.nick + '|| ' + msg)
24        self.log += msg+'\r\n'
25        self.sck.send((msg+'\r\n').encode())
26
27    def send_priv_msg(self, recip, msg, loud = True):
28        self.send_raw('PRIVMSG '+recip+' :'+msg, loud)
29
30    def connect(self):
31        try:
32            self.sck.connect(('127.0.0.1', 6667))
33        except:
34            print("IRC connection failed for " + self.nick)
35            sys.exit(1)
36       
37        print("IRC connection established for " + self.nick)
38
39        self.send_raw('USER ' + (self.nick + " ")*3)
40        self.send_raw('NICK ' + self.nick)
41        self.send_raw('JOIN &bitlbee')
42
43    def jabber_login(self):
44        self.send_priv_msg("&bitlbee", "account add jabber "+self.nick+"@localhost "+self.pwd)
45        time.sleep(0.3)
46        self.send_priv_msg("&bitlbee", "account on")
47        time.sleep(1)
48        self.receive()
49        if self.log.find('Logged in') == -1:
50            print("Jabber login failed for " + self.nick)
51            sys.exit(1)
52        else:
53            print("Jabber login successful for " + self.nick)
54
55    def receive(self):
56        text = ''
57        while True:
58            readable, _, _ = select.select([self.sck], [], [], 5)
59            if self.sck in readable:
60                text += self.sck.recv(2040).decode()
61                for line in text.split('\n'):
62                    if line.find('PING') != -1:
63                        self.send_raw('PONG ' + line.split()[1])
64            else:
65                break
66        self.log += text
67        return text
68
69    def add_jabber_buddy(self, nick):
70        self.send_priv_msg("&bitlbee", "add 0 " + nick+"@localhost")
71   
72    def block_jabber_buddy(self, nick):
73        self.send_priv_msg("&bitlbee", "block " + nick)
74
75    def unblock_jabber_buddy(self, nick):
76        self.send_priv_msg("&bitlbee", "allow " + nick)
77
78    def rename_jabber_buddy(self, oldnick, newnick):
79        self.send_priv_msg("&bitlbee", "rename " + oldnick + " " + newnick)
80       
81def test_send_message(sender, receiver, message):
82    sender.send_priv_msg(receiver.nick, message)
83    received = receiver.receive().find(message) != -1
84    return received;
85
86def run_tests():
87    global FAILED
88    clis = []
89    clis += [IrcClient('test1', 'asd')]
90    clis += [IrcClient('test2', 'asd')]
91    for cli in clis:
92        cli.connect()
93        cli.jabber_login()
94
95    clis[0].add_jabber_buddy(clis[1].nick)
96
97    if MESSAGETEST:
98        print("Test: Send message")
99        ret = test_send_message(clis[0], clis[1], 'ohai <3')
100        ret = ret & test_send_message(clis[1], clis[0], 'uwu *pounces*')
101        if ret:
102            print("Test passed")
103        else:
104            print("Test failed")
105            FAILED = True;
106           
107
108    if BLOCKTEST:
109        print("Test: Block/Unblock")
110        clis[0].block_jabber_buddy(clis[1].nick)
111        ret = not test_send_message(clis[1], clis[0], 'm-meow?')
112        clis[0].unblock_jabber_buddy(clis[1].nick)
113        ret = ret & test_send_message(clis[1], clis[0], '*purrs*')
114        if ret:
115            print("Test passed")
116        else:
117            print("Test failed")
118            FAILED = True;
119
120    if RENAMETEST:
121        print("Test: Rename buddy")
122        newname = "xXx_pup_LINKENPARK4EVA<3"
123        message = "rawr meanmz i luv u in dinosaur"
124
125        clis[0].rename_jabber_buddy(clis[1].nick, newname)
126        clis[0].send_priv_msg(newname, message)
127        ret = clis[1].receive().find(message) != -1
128
129        clis[0].rename_jabber_buddy(newname, clis[1].nick)
130        ret = ret & test_send_message(clis[0], clis[1], "rawr")
131        if ret:
132            print("Test passed")
133        else:
134            print("Test failed")
135            FAILED = True;
136   
137if __name__ == "__main__":
138    run_tests()
139    if FAILED:
140        sys.exit(1)
Note: See TracBrowser for help on using the repository browser.