1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#!/usr/bin/env python2.7
import subprocess
import sys
import pexpect
import unittest
import shutil
import os
import hashlib
class Test(unittest.TestCase):
def openssl(self, args):
with open(os.devnull, "w") as devnull:
proc = subprocess.Popen(['openssl'] + args, stdin=subprocess.PIPE, stderr=devnull)
for i in range(6):
proc.stdin.write("\n")
proc.stdin.close()
proc.communicate()
def mock(self, name):
with open("t/skyped.log", "w") as skyped_log,\
open("t/pexpect.log", "w") as pexpect_log:
skyped = subprocess.Popen([sys.executable, "skyped.py",
"-c", "t/skyped/skyped.conf", "-n", "-d", "-m", "t/%s-skyped.mock" % name],
stdout=skyped_log, stderr=subprocess.STDOUT)
try:
bitlbee = pexpect.spawn('../../bitlbee', ['-d', 't/bitlbee'], logfile=pexpect_log)
if os.environ.get('ATTACH_GDB'):
subprocess.Popen(['gdb', '-batch-silent',
'-ex', 'set logging overwrite on',
'-ex', 'set logging file t/gdb-%s.log' % bitlbee.pid,
'-ex', 'set logging on',
'-ex', 'handle all pass nostop noprint',
'-ex', 'handle SIGSEGV pass stop print',
'-ex', 'set pagination 0',
'-ex', 'continue',
'-ex', 'backtrace full',
'-ex', 'info registers',
'-ex', 'thread apply all backtrace',
'-ex', 'quit',
'../../bitlbee', str(bitlbee.pid) ])
bitlbee_mock = open("t/%s-bitlbee.mock" % name)
for i in bitlbee_mock.readlines():
line = i.strip()
if line.startswith(">> "):
bitlbee.expect_exact(line[3:], timeout=10)
elif line.startswith("<< "):
bitlbee.sendline(line[3:])
bitlbee_mock.close()
bitlbee.close()
finally:
skyped.terminate()
skyped.communicate()
def setUp(self):
try:
shutil.rmtree("t/bitlbee")
except OSError:
pass
os.makedirs("t/bitlbee")
try:
shutil.rmtree("t/skyped")
except OSError:
pass
os.makedirs("t/skyped")
cwd = os.getcwd()
os.chdir("t/skyped")
try:
shutil.copyfile("../../skyped.cnf", "skyped.cnf")
self.openssl(['req', '-new', '-x509', '-days', '365', '-nodes', '-config', 'skyped.cnf', '-out', 'skyped.cert.pem', '-keyout', 'skyped.key.pem'])
with open("skyped.conf", "w") as sock:
sock.write("[skyped]\n")
sock.write("username = alice\n")
sock.write("password = %s\n" % hashlib.sha1("foo").hexdigest())
sock.write("cert = %s/skyped.cert.pem\n" % os.getcwd())
sock.write("key = %s/skyped.key.pem\n" % os.getcwd())
sock.write("port = 2727\n")
finally:
os.chdir(cwd)
def testMsg(self):
self.mock("msg")
def testLogin(self):
self.mock("login")
def testInfo(self):
self.mock("info")
def testCall(self):
self.mock("call")
def testCallFailed(self):
self.mock("call-failed")
def testAddedYes(self):
self.mock("added-yes")
def testAddedNo(self):
self.mock("added-no")
def testGroupchatInvited(self):
self.mock("groupchat-invited")
def testGroupchatInvite(self):
self.mock("groupchat-invite")
def testCalledYes(self):
self.mock("called-yes")
def testCalledNo(self):
self.mock("called-no")
def testFiletransfer(self):
self.mock("filetransfer")
def testGroupRead(self):
self.mock("group-read")
if __name__ == '__main__':
unittest.main()
|