source: protocols/skype/test.py @ ee3bccd

Last change on this file since ee3bccd was ee3bccd, checked in by Miklos Vajna <vmiklos@…>, at 2013-02-11T12:56:03Z

skype: make chdirs work more reliably between tests

  • Property mode set to 100755
File size: 2.6 KB
Line 
1#!/usr/bin/env python2.7
2
3import subprocess
4import sys
5import pexpect
6import unittest
7import shutil
8import os
9import hashlib
10
11class Test(unittest.TestCase):
12        def openssl(self, args):
13                with open(os.devnull, "w") as devnull:
14                        proc = subprocess.Popen(['openssl'] + args, stdin=subprocess.PIPE, stderr=devnull)
15                        for i in range(6):
16                                proc.stdin.write("\n")
17                        proc.stdin.close()
18                        proc.communicate()
19        def mock(self, name):
20                with open("t/skyped.log", "w") as skyped_log,\
21                                open("t/pexpect.log", "w") as pexpect_log:
22                        skyped = subprocess.Popen([sys.executable, "skyped.py",
23                                "-c", "t/skyped/skyped.conf", "-n", "-d", "-m", "t/%s-skyped.mock" % name],
24                                stdout=skyped_log, stderr=subprocess.STDOUT)
25                        try:
26                                bitlbee = pexpect.spawn('../../bitlbee', ['-d', 't/bitlbee'], logfile=pexpect_log)
27                                bitlbee_mock = open("t/%s-bitlbee.mock" % name)
28                                for i in bitlbee_mock.readlines():
29                                        line = i.strip()
30                                        if line.startswith(">> "):
31                                                bitlbee.expect_exact(line[3:], timeout=10)
32                                        elif line.startswith("<< "):
33                                                bitlbee.sendline(line[3:])
34                                bitlbee_mock.close()
35                                bitlbee.close()
36                        finally:
37                                skyped.terminate()
38                                skyped.communicate()
39
40        def setUp(self):
41                try:
42                        shutil.rmtree("t/bitlbee")
43                except OSError:
44                        pass
45                os.makedirs("t/bitlbee")
46
47                try:
48                        shutil.rmtree("t/skyped")
49                except OSError:
50                        pass
51                os.makedirs("t/skyped")
52                cwd = os.getcwd()
53                os.chdir("t/skyped")
54                try:
55                        shutil.copyfile("../../skyped.cnf", "skyped.cnf")
56                        self.openssl(['req', '-new', '-x509', '-days', '365', '-nodes', '-config', 'skyped.cnf', '-out', 'skyped.cert.pem', '-keyout', 'skyped.key.pem'])
57                        with open("skyped.conf", "w") as sock:
58                                sock.write("[skyped]\n")
59                                sock.write("username = alice\n")
60                                sock.write("password = %s\n" % hashlib.sha1("foo").hexdigest())
61                                sock.write("cert = %s/skyped.cert.pem\n" % os.getcwd())
62                                sock.write("key = %s/skyped.key.pem\n" % os.getcwd())
63                                sock.write("port = 2727\n")
64                finally:
65                        os.chdir(cwd)
66
67
68        def testMsg(self):
69                self.mock("msg")
70
71        def testLogin(self):
72                self.mock("login")
73
74        def testInfo(self):
75                self.mock("info")
76
77        def testCall(self):
78                self.mock("call")
79
80        def testCallFailed(self):
81                self.mock("call-failed")
82
83        def testAddYes(self):
84                self.mock("add-yes")
85
86        def testAddNo(self):
87                self.mock("add-no")
88
89        def testGroupchatInvited(self):
90                self.mock("groupchat-invited")
91
92        def testGroupchatInvite(self):
93                self.mock("groupchat-invite")
94
95        def testCalledYes(self):
96                self.mock("called-yes")
97
98        def testCalledNo(self):
99                self.mock("called-no")
100
101        def testFiletransfer(self):
102                self.mock("filetransfer")
103
104        def testGroupRead(self):
105                self.mock("group-read")
106
107if __name__ == '__main__':
108        unittest.main()
Note: See TracBrowser for help on using the repository browser.