Beispiel #1
0
 def test_answer(self):
     prob_type = 'magic'
     data = [None, True, False, 123, 4.5, {}]
     params = {
         'None': None,
         'True': True,
         'False': False,
         '123': 123,
         '4.5': 4.5,
         'array': range(20),
         'object': {
             'more': {
                 'layers': {
                     'ok': {
                         "that's": 'enough'
                     }
                 }
             }
         },
         'answer': True
     }
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = solver.submit(prob_type, data, params)
     self.assertEqual(
         problem.answer(),
         [prob_type, {
             'type': prob_type,
             'data': data,
             'params': params
         }])
Beispiel #2
0
 def test_timeout(self):
     conn = sapiremote.Connection('', '')
     prob = lambda n: conn.add_problem(str(n))
     sp = map(prob, range(50))
     t1 = datetime.datetime.now()
     self.assertFalse(sapiremote.await_completion(sp, 1, 0.1))
     t2 = datetime.datetime.now()
     self.assertTrue(t2 - t1 >= datetime.timedelta(milliseconds=100))
Beispiel #3
0
 def test_cancel(self):
     conn = sapiremote.Connection('', '')
     solver = conn.solvers()['test']
     problem = solver.submit('', None, {})
     self.assertFalse(problem.done())
     problem.cancel()
     self.assertTrue(problem.done())
     self.assertRaises(RuntimeError, problem.answer)
Beispiel #4
0
 def test_encode_trivial(self):
     solver = sapiremote.Connection('', '').solvers()['test']
     expected = {
         'format': 'qp',
         'lin': 'AAAAAAAA+H8AAAAAAAD4fwAAAAAAAPh/',
         'quad': ''
     }
     self.assertEqual(sapiremote.encode_qp_problem(solver, {}), expected)
Beispiel #5
0
 def __init__(self, url, token, proxy=None):
     #make sure the url and token input is a string type
     url = str(url)
     token = str(token)
     if proxy is not None:
         proxy = str(proxy)
     self._connection = sapiremote.Connection(url, token, proxy)
     self.solvers = dict((k, _RemoteSolver(v))
                         for k, v in self._connection.solvers().iteritems())
Beispiel #6
0
 def test_complete(self):
     solver = sapiremote.Connection('', '').solvers()['test']
     prob_a = lambda n: solver.submit('', None, {'answer': True})
     prob_e = lambda n: solver.submit('', None, {'error': 'x'})
     sp = map(prob_a, range(10)) + map(prob_e, range(100, 110))
     t1 = datetime.datetime.now()
     self.assertTrue(sapiremote.await_completion(sp, len(sp), 2))
     t2 = datetime.datetime.now()
     self.assertTrue(t2 - t1 < datetime.timedelta(milliseconds=200))
Beispiel #7
0
 def test_encode(self):
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = {(1, 4): -1, (4, 5): -2.5, (4, 4): 999}
     expected = {
         'format': 'qp',
         'lin': 'AAAAAAAAAAAAAAAAADiPQAAAAAAAAAAA',
         'quad': 'AAAAAAAA8L8AAAAAAAAEwA=='
     }
     self.assertEqual(sapiremote.encode_qp_problem(solver, problem),
                      expected)
Beispiel #8
0
 def test_config_solver_default_proxy(self):
     url = 'http://example.com/sapi'
     token = 'secret'
     proxy = None
     conn = sapiremote.Connection(url, token, proxy)
     solver = conn.solvers()['config']
     self.assertEqual(solver.properties(), {
         'url': url,
         'token': token,
         'proxy': proxy
     })
Beispiel #9
0
    def test_bad_problem(self):
        solver = sapiremote.Connection('', '').solvers()['test']

        def encode(p):
            def f():
                sapiremote.encode_qp_problem(solver, p)

            return f

        self.assertRaises(TypeError, encode({1: -1}))
        self.assertRaises(TypeError, encode({(1, ): -1}))
        self.assertRaises(TypeError, encode({(1, 4, 5): -1}))
        self.assertRaises(TypeError, encode({(1, 4): 'three'}))
        self.assertRaises(RuntimeError, encode({(999, 888): 1}))
Beispiel #10
0
 def test_status_failed_internal(self):
     solver = sapiremote.Connection('', '').solvers()['status']
     expected_status = {
         'problem_id': '123',
         'state': 'FAILED',
         'last_good_state': 'SUBMITTING',
         'remote_status': 'UNKNOWN',
         'error_type': 'INTERNAL',
         'error_message': 'bad times',
         'submitted_on': 'qwerty',
         'solved_on': 'asdf'
     }
     problem = solver.submit('', None, expected_status)
     self.assertEqual(problem.status(), expected_status)
Beispiel #11
0
 def test_unicode_keys(self):
     prob_type = 'magic'
     data = {u'a': 123}
     params = {u'p': 456, u'answer': True}
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = solver.submit(prob_type, data, params)
     sdata = {str(k): v for k, v in data.iteritems()}
     sparams = {str(k): v for k, v in params.iteritems()}
     self.assertEqual(
         problem.answer(),
         [prob_type, {
             'type': prob_type,
             'data': sdata,
             'params': sparams
         }])
Beispiel #12
0
 def test_status_failed_network(self):
     solver = sapiremote.Connection('', '').solvers()['status']
     expected_status = {
         'problem_id': '123',
         'state': 'FAILED',
         'last_good_state': 'SUBMITTING',
         'remote_status': 'UNKNOWN',
         'error_type': 'NETWORK',
         'error_message': 'bad times',
         'submitted_on': '',
         'solved_on': 'what'
     }
     problem = solver.submit('', None, expected_status)
     del expected_status['submitted_on']
     self.assertEqual(problem.status(), expected_status)
Beispiel #13
0
 def test_status_failed_solve(self):
     solver = sapiremote.Connection('', '').solvers()['status']
     expected_status = {
         'problem_id': '123',
         'state': 'DONE',
         'last_good_state': 'DONE',
         'remote_status': 'FAILED',
         'error_type': 'SOLVE',
         'error_message': 'bad times',
         'submitted_on': 'qwe',
         'solved_on': 'asd'
     }
     problem = solver.submit('', None, expected_status)
     del expected_status['last_good_state']
     self.assertEqual(problem.status(), expected_status)
Beispiel #14
0
 def test_status_retrying(self):
     solver = sapiremote.Connection('', '').solvers()['status']
     expected_status = {
         'problem_id': '123',
         'state': 'RETRYING',
         'last_good_state': 'SUBMITTED',
         'remote_status': 'PENDING',
         'error_type': 'PROTOCOL',
         'error_message': 'bad times',
         'submitted_on': 'qaz',
         'solved_on': ''
     }
     problem = solver.submit('', None, expected_status)
     del expected_status['solved_on']
     self.assertEqual(problem.status(), expected_status)
Beispiel #15
0
 def test_status_completed(self):
     solver = sapiremote.Connection('', '').solvers()['status']
     expected_status = {
         'problem_id': '123',
         'state': 'DONE',
         'last_good_state': 'DONE',
         'remote_status': 'COMPLETED',
         'error_type': 'INTERNAL',
         'error_message': 'nope',
         'submitted_on': '123',
         'solved_on': '234'
     }
     problem = solver.submit('', None, expected_status)
     del expected_status['last_good_state']
     del expected_status['error_type']
     del expected_status['error_message']
     self.assertEqual(problem.status(), expected_status)
Beispiel #16
0
    def test_retry(self):
        solver = sapiremote.Connection('', '').solvers()['status']

        init_status = {
            'problem_id': '123',
            'state': 'FAILED',
            'last_good_state': 'SUBMITTED',
            'remote_status': 'IN_PROGRESS',
            'error_type': 'NETWORK',
            'error_message': 'nope',
            'submitted_on': '1:23',
            'solved_on': '3:45'
        }
        problem = solver.submit('', None, init_status)
        problem.retry()
        final_status = init_status.copy()
        final_status['state'] = 'RETRYING'
        self.assertEqual(problem.status(), final_status)
Beispiel #17
0
 def test_status_submitted(self):
     solver = sapiremote.Connection('', '').solvers()['status']
     expected_status = {
         'problem_id': '123',
         'state': 'SUBMITTED',
         'last_good_state': 'SUBMITTED',
         'remote_status': 'PENDING',
         'error_type': 'INTERNAL',
         'error_message': 'nope',
         'submitted_on': 'earlier',
         'solved_on': ''
     }
     problem = solver.submit('', None, expected_status)
     del expected_status['last_good_state']
     del expected_status['error_type']
     del expected_status['error_message']
     del expected_status['solved_on']
     self.assertEqual(problem.status(), expected_status)
Beispiel #18
0
 def test_error(self):
     prob_type = 'magic'
     data = [None, True, False, 123, 4.5, {}]
     params = {
         'None': None,
         'True': True,
         'False': False,
         '123': 123,
         '4.5': 4.5,
         'array': range(20),
         'object': {
             'more': {
                 'layers': {
                     'ok': {
                         "that's": 'enough'
                     }
                 }
             }
         },
         'error': 'blah'
     }
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = solver.submit(prob_type, data, params)
     self.assertRaises(RuntimeError, problem.answer)
Beispiel #19
0
 def test_solver_names(self):
     conn = sapiremote.Connection('', '')
     solver_names = set(conn.solvers().keys())
     self.assertEqual(solver_names, {'config', 'test', 'echo', 'status'})
Beispiel #20
0
 def test_done_answer(self):
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = solver.submit('', None, {'answer': True})
     self.assertTrue(problem.done())
Beispiel #21
0
 def test_done_error(self):
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = solver.submit('', None, {'error': 'oh no'})
     self.assertTrue(problem.done())
Beispiel #22
0
 def test_solver_submit(self):
     conn = sapiremote.Connection('', '')
     solver = conn.solvers()['test']
     self.assertTrue(
         isinstance(solver.submit('', None, {}),
                    sapiremote.SubmittedProblem))
Beispiel #23
0
 def test_problem_id(self):
     solver = sapiremote.Connection('', '').solvers()['test']
     problem = solver.submit('', None, {'problem_id': '123'})
     self.assertEqual(problem.problem_id(), '123')
Beispiel #24
0
 def test_add_problem(self):
     conn = sapiremote.Connection('', '')
     p = conn.add_problem('123')
     self.assertTrue(isinstance(p, sapiremote.SubmittedProblem))
     self.assertEqual(p.problem_id(), '123')
Beispiel #25
0
 def test_not_done(self):
     self.assertFalse(sapiremote.Connection('', '').add_problem('1').done())
Beispiel #26
0
 def test_bad_solver(self):
     solver = sapiremote.Connection('', '').solvers()['config']
     self.assertRaises(RuntimeError,
                       lambda: sapiremote.encode_qp_problem(solver, {}))