Пример #1
0
        def test_cancelled_watch_removed_from_watch_list(self):
            request = health_pb2.HealthCheckRequest(service=_WATCH_SERVICE)
            response_queue = queue.Queue()
            rendezvous = self._stub.Watch(request)
            thread = threading.Thread(target=_consume_responses,
                                      args=(rendezvous, response_queue))
            thread.start()

            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVICE_UNKNOWN,
                             response.status)

            rendezvous.cancel()
            self._servicer.set(_WATCH_SERVICE,
                               health_pb2.HealthCheckResponse.SERVING)
            thread.join()

            # Wait, if necessary, for serving thread to process client cancellation
            timeout = time.time() + test_constants.TIME_ALLOWANCE
            while time.time(
            ) < timeout and self._servicer._send_response_callbacks[
                    _WATCH_SERVICE]:
                time.sleep(1)
            self.assertFalse(
                self._servicer._send_response_callbacks[_WATCH_SERVICE],
                'watch set should be empty')
            self.assertTrue(response_queue.empty())
Пример #2
0
        def test_watch_new_service(self):
            request = health_pb2.HealthCheckRequest(service=_WATCH_SERVICE)
            response_queue = queue.Queue()
            rendezvous = self._stub.Watch(request)
            thread = threading.Thread(target=_consume_responses,
                                      args=(rendezvous, response_queue))
            thread.start()

            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVICE_UNKNOWN,
                             response.status)

            self._servicer.set(_WATCH_SERVICE,
                               health_pb2.HealthCheckResponse.SERVING)
            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVING,
                             response.status)

            self._servicer.set(_WATCH_SERVICE,
                               health_pb2.HealthCheckResponse.NOT_SERVING)
            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.NOT_SERVING,
                             response.status)

            rendezvous.cancel()
            thread.join()
            self.assertTrue(response_queue.empty())
Пример #3
0
        def test_watch_empty_service(self):
            request = health_pb2.HealthCheckRequest(service='')
            response_queue = queue.Queue()
            rendezvous = self._stub.Watch(request)
            thread = threading.Thread(target=_consume_responses,
                                      args=(rendezvous, response_queue))
            thread.start()

            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVING,
                             response.status)

            rendezvous.cancel()
            thread.join()
            self.assertTrue(response_queue.empty())

            if self._thread_pool is not None:
                self.assertTrue(self._thread_pool.was_used())
Пример #4
0
        def test_two_watchers(self):
            request = health_pb2.HealthCheckRequest(service=_WATCH_SERVICE)
            response_queue1 = queue.Queue()
            response_queue2 = queue.Queue()
            rendezvous1 = self._stub.Watch(request)
            rendezvous2 = self._stub.Watch(request)
            thread1 = threading.Thread(target=_consume_responses,
                                       args=(rendezvous1, response_queue1))
            thread2 = threading.Thread(target=_consume_responses,
                                       args=(rendezvous2, response_queue2))
            thread1.start()
            thread2.start()

            response1 = response_queue1.get(
                timeout=test_constants.SHORT_TIMEOUT)
            response2 = response_queue2.get(
                timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVICE_UNKNOWN,
                             response1.status)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVICE_UNKNOWN,
                             response2.status)

            self._servicer.set(_WATCH_SERVICE,
                               health_pb2.HealthCheckResponse.SERVING)
            response1 = response_queue1.get(
                timeout=test_constants.SHORT_TIMEOUT)
            response2 = response_queue2.get(
                timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVING,
                             response1.status)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVING,
                             response2.status)

            rendezvous1.cancel()
            rendezvous2.cancel()
            thread1.join()
            thread2.join()
            self.assertTrue(response_queue1.empty())
            self.assertTrue(response_queue2.empty())
Пример #5
0
        def test_graceful_shutdown(self):
            request = health_pb2.HealthCheckRequest(service='')
            response_queue = queue.Queue()
            rendezvous = self._stub.Watch(request)
            thread = threading.Thread(target=_consume_responses,
                                      args=(rendezvous, response_queue))
            thread.start()

            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.SERVING,
                             response.status)

            self._servicer.enter_graceful_shutdown()
            response = response_queue.get(timeout=test_constants.SHORT_TIMEOUT)
            self.assertEqual(health_pb2.HealthCheckResponse.NOT_SERVING,
                             response.status)

            # This should be a no-op.
            self._servicer.set('', health_pb2.HealthCheckResponse.SERVING)

            rendezvous.cancel()
            thread.join()
            self.assertTrue(response_queue.empty())
Пример #6
0
    def test_check_not_found_service(self):
        request = health_pb2.HealthCheckRequest(service='not-found')
        with self.assertRaises(grpc.RpcError) as context:
            resp = self._stub.Check(request)

        self.assertEqual(grpc.StatusCode.NOT_FOUND, context.exception.code())
Пример #7
0
 def test_check_not_serving_service(self):
     request = health_pb2.HealthCheckRequest(service=_NOT_SERVING_SERVICE)
     resp = self._stub.Check(request)
     self.assertEqual(health_pb2.HealthCheckResponse.NOT_SERVING,
                      resp.status)
Пример #8
0
 def test_check_unknown_service(self):
     request = health_pb2.HealthCheckRequest(service=_UNKNOWN_SERVICE)
     resp = self._stub.Check(request)
     self.assertEqual(health_pb2.HealthCheckResponse.UNKNOWN, resp.status)
Пример #9
0
 def test_check_empty_service(self):
     request = health_pb2.HealthCheckRequest()
     resp = self._stub.Check(request)
     self.assertEqual(health_pb2.HealthCheckResponse.SERVING, resp.status)