Completed
Push — master ( 77196e...313c98 )
by Roy
01:05
created

tests.TestWebDav.tearDownClass()   B

Complexity

Conditions 7

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 7
dl 0
loc 14
rs 7.3333
1
#!/usr/bin/env python
2
# -*- encoding: utf-8 -*-
3
# vim: set et sw=4 ts=4 sts=4 ff=unix fenc=utf8:
4
# Author: Binux<[email protected]>
5
#         http://binux.me
6
# Created on 2015-06-03 21:15
7
8
import os
9
import six
10
import time
11
import shutil
12
import inspect
13
import unittest2 as unittest
14
15
from six import BytesIO
16
from pyspider import run
17
from pyspider.libs import utils
18
from tests import data_sample_handler, data_handler
19
20
@unittest.skipIf(six.PY3, 'webdav not support python3')
21
class TestWebDav(unittest.TestCase):
22
    @classmethod
23
    def setUpClass(self):
24
        import easywebdav
25
26
        shutil.rmtree('./data/tests', ignore_errors=True)
27
        os.makedirs('./data/tests')
28
29
        ctx = run.cli.make_context('test', [
30
            '--taskdb', 'sqlite+taskdb:///data/tests/task.db',
31
            '--projectdb', 'sqlite+projectdb:///data/tests/projectdb.db',
32
            '--resultdb', 'sqlite+resultdb:///data/tests/resultdb.db',
33
        ], None, obj=utils.ObjectDict(testing_mode=True))
34
        self.ctx = run.cli.invoke(ctx)
35
36
        ctx = run.webui.make_context('webui', [
37
            '--username', 'binux',
38
            '--password', '4321',
39
        ], self.ctx)
40
        self.app = run.webui.invoke(ctx)
41
        self.app_thread = utils.run_in_thread(self.app.run)
42
        time.sleep(5)
43
44
        self.webdav = easywebdav.connect('localhost', port=5000, path='dav')
45
        self.webdav_up = easywebdav.connect('localhost', port=5000, path='dav',
46
                                            username='binux', password='4321')
47
48
    @classmethod
49
    def tearDownClass(self):
50
        for each in self.ctx.obj.instances:
51
            each.quit()
52
        self.app_thread.join()
53
        time.sleep(1)
54
55
        assert not utils.check_port_open(5000)
56
        assert not utils.check_port_open(23333)
57
        assert not utils.check_port_open(24444)
58
        assert not utils.check_port_open(25555)
59
        assert not utils.check_port_open(14887)
60
61
        shutil.rmtree('./data/tests', ignore_errors=True)
62
63
    def test_10_ls(self):
64
        self.assertEqual(len(self.webdav.ls()), 1)
65
66
    def test_20_create_error(self):
67
        import easywebdav
68
        with self.assertRaises(easywebdav.OperationFailed):
69
            self.webdav.upload(inspect.getsourcefile(data_sample_handler),
70
                               'bad_file_name')
71
        with self.assertRaises(easywebdav.OperationFailed):
72
            self.webdav.upload(inspect.getsourcefile(data_sample_handler),
73
                               'bad.file.name')
74
75
    def test_30_create_ok(self):
76
        self.webdav.upload(inspect.getsourcefile(data_handler), 'handler.py')
77
        self.webdav.upload(inspect.getsourcefile(data_sample_handler), 'sample_handler.py')
78
        self.assertEqual(len(self.webdav.ls()), 3)
79
80
    def test_40_get_404(self):
81
        io = BytesIO()
82
        import easywebdav
83
        with self.assertRaises(easywebdav.OperationFailed):
84
            self.webdav.download('not_exitst', io)
85
        io.close()
86
87
    def test_50_get(self):
88
        io = BytesIO()
89
        self.webdav.download('handler.py', io)
90
        self.assertEqual(inspect.getsource(data_handler), io.getvalue())
91
        io.close()
92
93
        io = BytesIO()
94
        self.webdav.download('sample_handler.py', io)
95
        self.assertEqual(inspect.getsource(data_sample_handler), io.getvalue())
96
        io.close()
97
98
    def test_60_edit(self):
99
        self.webdav.upload(inspect.getsourcefile(data_handler), 'sample_handler.py')
100
101
    def test_70_get(self):
102
        io = BytesIO()
103
        self.webdav.download('sample_handler.py', io)
104
        self.assertEqual(inspect.getsource(data_handler), io.getvalue())
105
        io.close()
106
107
    def test_80_password(self):
108
        import requests
109
        rv = requests.post('http://localhost:5000/update', data={
110
            'name': 'group',
111
            'value': 'lock',
112
            'pk': 'sample_handler',
113
        })
114
        self.assertEqual(rv.status_code, 200)
115
116
        import easywebdav
117
        with self.assertRaises(easywebdav.OperationFailed):
118
            self.webdav.upload(inspect.getsourcefile(data_sample_handler), 'sample_handler.py')
119
        self.webdav_up.upload(inspect.getsourcefile(data_sample_handler), 'sample_handler.py')
120
121