Completed
Push — master ( f2ad1f...2fd0d7 )
by Roy
01:28
created

TestProcessor.test_10_bad_result_2()   A

Complexity

Conditions 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
c 0
b 0
f 0
dl 0
loc 5
rs 9.4285
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 2014-11-11 20:52:53
7
8
import os
9
import time
10
import unittest2 as unittest
11
import logging.config
12
logging.config.fileConfig("pyspider/logging.conf")
13
14
import shutil
15
from pyspider.database.sqlite import resultdb
16
from pyspider.result.result_worker import ResultWorker
17
from pyspider.libs.multiprocessing_queue import Queue
18
from pyspider.libs.utils import run_in_thread
19
20
21
class TestProcessor(unittest.TestCase):
22
    resultdb_path = './data/tests/result.db'
23
24
    @classmethod
25
    def setUpClass(self):
26
        shutil.rmtree('./data/tests/', ignore_errors=True)
27
        os.makedirs('./data/tests/')
28
29
        def get_resultdb():
30
            return resultdb.ResultDB(self.resultdb_path)
31
        self.resultdb = get_resultdb()
32
        self.inqueue = Queue(10)
33
34
        def run_result_worker():
35
            self.result_worker = ResultWorker(get_resultdb(), self.inqueue)
36
            self.result_worker.run()
37
        self.process = run_in_thread(run_result_worker)
38
        time.sleep(1)
39
40
    @classmethod
41
    def tearDownClass(self):
42
        if self.process.is_alive():
43
            self.result_worker.quit()
44
            self.process.join(2)
45
        assert not self.process.is_alive()
46
        shutil.rmtree('./data/tests/', ignore_errors=True)
47
48
    def test_10_bad_result(self):
49
        self.inqueue.put(({'project': 'test_project'}, {}))
50
        self.resultdb._list_project()
51
        self.assertEqual(len(self.resultdb.projects), 0)
52
        self.assertEqual(self.resultdb.count('test_project'), 0)
53
54
    def test_10_bad_result_2(self):
55
        self.inqueue.put(({'project': 'test_project'}, {'a': 'b'}))
56
        self.resultdb._list_project()
57
        self.assertEqual(len(self.resultdb.projects), 0)
58
        self.assertEqual(self.resultdb.count('test_project'), 0)
59
60
    def test_20_insert_result(self):
61
        data = {
62
            'a': 'b'
63
        }
64
        self.inqueue.put(({
65
            'project': 'test_project',
66
            'taskid': 'id1',
67
            'url': 'url1'
68
        }, data))
69
        time.sleep(0.5)
70
        self.resultdb._list_project()
71
        self.assertEqual(len(self.resultdb.projects), 1)
72
        self.assertEqual(self.resultdb.count('test_project'), 1)
73
74
        result = self.resultdb.get('test_project', 'id1')
75
        self.assertEqual(result['result'], data)
76
77
    def test_30_overwrite(self):
78
        self.inqueue.put(({
79
            'project': 'test_project',
80
            'taskid': 'id1',
81
            'url': 'url1'
82
        }, "abc"))
83
        time.sleep(0.1)
84
        result = self.resultdb.get('test_project', 'id1')
85
        self.assertEqual(result['result'], "abc")
86
87
    def test_40_insert_list(self):
88
        self.inqueue.put(({
89
            'project': 'test_project',
90
            'taskid': 'id2',
91
            'url': 'url1'
92
        }, ['a', 'b']))
93
        time.sleep(0.1)
94
        result = self.resultdb.get('test_project', 'id2')
95
        self.assertEqual(result['result'], ['a', 'b'])
96