source: sage/dsage/server/tests/test_server.py @ 3852:fd7b59af8402

Revision 3852:fd7b59af8402, 7.0 KB checked in by Yi Qiang <yqiang@…>, 6 years ago (diff)

changed job.id to job.job_id for consistency.

Line 
1############################################################################
2#                                                                     
3#   DSAGE: Distributed SAGE                     
4#                                                                             
5#       Copyright (C) 2006, 2007 Yi Qiang <yqiang@gmail.com>               
6#                                                                           
7#  Distributed under the terms of the GNU General Public License (GPL)       
8#
9#    This code is distributed in the hope that it will be useful,
10#    but WITHOUT ANY WARRANTY; without even the implied warranty of
11#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12#    General Public License for more details.
13#
14#  The full text of the GPL is available at:
15#
16#                  http://www.gnu.org/licenses/
17############################################################################
18
19import unittest
20import datetime
21import os
22from glob import glob
23
24from sage.dsage.database.job import Job, expand_job
25from sage.dsage.database.jobdb import JobDatabaseSQLite
26from sage.dsage.database.monitordb import MonitorDatabase
27from sage.dsage.database.clientdb import ClientDatabase
28from sage.dsage.server.server import DSageServer
29
30class DSageServerTestCase(unittest.TestCase):
31    r"""
32    Tests for DSageServer go here.
33   
34    """
35       
36    def setUp(self):
37        self.jobdb = JobDatabaseSQLite(test=True)
38        self.monitordb = MonitorDatabase(test=True)
39        self.clientdb = ClientDatabase(test=True)
40        self.dsage_server = DSageServer(self.jobdb, 
41                                        self.monitordb,
42                                        self.clientdb,
43                                        log_level=5)
44        for job in self.create_jobs(10):
45            self.dsage_server.submit_job(job.reduce())
46           
47    def tearDown(self):
48        self.dsage_server.jobdb._shutdown()
49        files = glob('*.db*')
50        for file in files:
51            os.remove(file)
52
53    def testget_job(self):
54        jdict = self.dsage_server.get_job()
55        self.assertEquals(type(jdict), dict)
56        job = expand_job(jdict)
57        self.assert_(isinstance(job, Job))
58
59    def testget_job_by_id(self):
60        job = Job()
61        job.code = '2+2'
62        jdict = self.dsage_server.submit_job(job.reduce())
63        self.assertEquals(type(jdict['job_id']), str)
64
65    def testget_job_result_by_id(self):
66        job = self.create_jobs(1)[0]
67        job = expand_job(self.dsage_server.get_job())
68        job.result = 'test'
69        jdict = self.dsage_server.submit_job(job.reduce())
70        self.assertEquals(
71                    self.dsage_server.get_job_result_by_id(jdict['job_id']),
72                    'test')
73
74    def testget_jobs_by_username(self):
75        self.assertEquals(
76                type(self.dsage_server.get_jobs_by_username('yqiang')),
77                list)
78        self.assertEquals(
79                len(self.dsage_server.get_jobs_by_username('test')),
80                0)
81
82        job = expand_job(self.dsage_server.get_job())
83        job.username = 'testing123'
84        job.code = ''
85        jdict = self.dsage_server.submit_job(job.reduce())
86        j = expand_job(self.dsage_server.get_jobs_by_username('testing123')[0])
87        self.assertEquals(j.username, job.username)
88
89    def testsubmit_job(self):
90        jobs = self.create_jobs(10)
91        for job in jobs:
92            jdict = self.dsage_server.submit_job(job.reduce())
93            self.assertEquals(type(jdict), dict)
94            j = expand_job(self.dsage_server.get_job_by_id(jdict['job_id']))
95            self.assert_(isinstance(j, Job))
96
97    def testget_all_jobs(self):
98        jobs = self.dsage_server.get_all_jobs()
99        self.assertEquals(len(jobs), 10)
100
101    def testget_active_jobs(self):
102        jobs = self.dsage_server.get_all_jobs()
103        for job in jobs:
104            job = expand_job(job)
105            job.status = 'processing'
106            jdict = self.dsage_server.submit_job(job.reduce())
107        jobs = self.dsage_server.get_active_jobs()
108        self.assert_(len(jobs) == 10)
109        for job in jobs:
110            job = expand_job(job)
111            self.assert_(isinstance(job, Job))
112            self.assert_(job.status == 'processing')
113            self.assert_(job.update_time < datetime.datetime.now())
114
115    def testget_active_clients_list(self):
116        clients = self.dsage_server.get_client_list()
117        self.assertEquals(len(clients), 0)
118        self.assertEquals(type(clients), list)
119   
120    def testget_killed_jobs_list(self):
121        jobs = self.dsage_server.get_killed_jobs_list()
122        self.assertEquals(len(jobs), 0)
123       
124        jobs = self.dsage_server.get_all_jobs()
125        for job in jobs:
126            job = expand_job(job)
127            job.killed = True
128            self.dsage_server.submit_job(job.reduce())
129
130        jobs = self.dsage_server.get_killed_jobs_list()
131        self.assertEquals(len(jobs), 10)
132       
133        for job in jobs:
134            job = expand_job(job)
135            self.assert_(isinstance(job, Job))
136            self.assertEquals(job.killed, True)
137            self.assert_(job.update_time < datetime.datetime.now())
138
139    def testjob_done(self):
140        job = expand_job(self.dsage_server.get_job())
141        result = 'done'
142        output = 'done '
143        completed = True
144        jdict = self.dsage_server.job_done(job.job_id, output, result, completed)
145        job = expand_job(self.dsage_server.get_job_by_id(jdict['job_id']))
146        self.assertEquals(job.output, output)
147        self.assertEquals(job.result, result)
148        self.assertEquals(job.status, 'completed')
149
150        job = expand_job(self.dsage_server.get_job())
151        result = ['testing', '123']
152        output = 'testing'
153        completed = False
154        jdict = self.dsage_server.job_done(job.job_id, output, result, completed)
155        job = expand_job(self.dsage_server.get_job_by_id(jdict['job_id']))
156        self.assert_(isinstance(job.output, str))
157        self.assert_(job.status != 'completed')
158       
159    def testjob_failed(self):
160        job = expand_job(self.dsage_server.get_job())
161        self.dsage_server.job_failed(job.job_id, 'Failure')
162        job = expand_job(self.dsage_server.get_job_by_id(job.job_id))
163        self.assertEquals(job.failures, 1)
164        self.assertEquals(job.output, 'Failure')
165        self.dsage_server.job_failed(job.job_id, 'Another Failure')
166        job = expand_job(self.dsage_server.get_job_by_id(job.job_id))
167        self.assertEquals(job.failures, 2)
168        self.assertEquals(job.output, 'Another Failure')
169
170    def testkill_job(self):
171        job = expand_job(self.dsage_server.get_job())
172        reason = 'test'
173        id = self.dsage_server.kill_job(job.job_id, reason)
174        job = expand_job(self.dsage_server.get_job_by_id(id))
175        self.assertEquals(job.killed, True)
176
177    def create_jobs(self, n):
178        """This method creates n jobs. """
179
180        jobs = []
181        for i in range(n):
182            jobs.append(Job(name='unittest', username='yqiang', code='2+2'))
183
184        return jobs
Note: See TracBrowser for help on using the repository browser.