source: .tests/test1.py @ 23fd63d

Last change on this file since 23fd63d was 23fd63d, checked in by / <>, at 2021-03-16T13:54:34Z

burp

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