source: protocols/skype/test.py @ 1146e21

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

skype.test: do proper cleanup of skyped process despite possible exceptions, keep pexpect.log

  • Property mode set to 100755
File size: 2.6 KB
RevLine 
[650d2b4]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):
[1146e21]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],
[650d2b4]24                                stdout=skyped_log, stderr=subprocess.STDOUT)
[1146e21]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()
[650d2b4]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                shutil.copyfile("../../skyped.cnf", "skyped.cnf")
55                self.openssl(['req', '-new', '-x509', '-days', '365', '-nodes', '-config', 'skyped.cnf', '-out', 'skyped.cert.pem', '-keyout', 'skyped.key.pem'])
56                with open("skyped.conf", "w") as sock:
57                        sock.write("[skyped]\n")
58                        sock.write("username = alice\n")
59                        sock.write("password = %s\n" % hashlib.sha1("foo").hexdigest())
60                        sock.write("cert = %s/skyped.cert.pem\n" % os.getcwd())
61                        sock.write("key = %s/skyped.key.pem\n" % os.getcwd())
62                        sock.write("port = 2727\n")
63                os.chdir(cwd)
64
65
66        def testMsg(self):
67                self.mock("msg")
68
69        def testLogin(self):
70                self.mock("login")
71
72        def testInfo(self):
73                self.mock("info")
74       
75        def testCall(self):
76                self.mock("call")
[6efb777]77       
[69ae6f2]78        def testCallFailed(self):
79                self.mock("call-failed")
80       
[6efb777]81        def testAddYes(self):
82                self.mock("add-yes")
[650d2b4]83
[db0d979]84        def testAddNo(self):
85                self.mock("add-no")
86
[d4b5e5b]87        def testGroupchatInvited(self):
88                self.mock("groupchat-invited")
89
[a6a2d81]90        def testGroupchatInvite(self):
91                self.mock("groupchat-invite")
[daac755]92       
93        def testCalledYes(self):
94                self.mock("called-yes")
[a6a2d81]95
[f6cab7c]96        def testCalledNo(self):
97                self.mock("called-no")
98
[db34b06]99        def testFiletransfer(self):
100                self.mock("filetransfer")
101
[ef64837]102        def testGroupRead(self):
103                self.mock("group-read")
104
[650d2b4]105if __name__ == '__main__':
106        unittest.main()
Note: See TracBrowser for help on using the repository browser.