def test_service_run(self, mock_get_proxy_config): """ Test if the service starts and stops gracefully. """ self.assertEqual(self._service.state, ServiceInfo.STARTING) mock_get_proxy_config.return_value = { 'cloud_address': '127.0.0.1', 'proxy_cloud_connections': True } # Start the service and pause the loop self._service.loop.stop() self._service.run() self.assertEqual(self._service.state, ServiceInfo.ALIVE) # Create a rpc stub and query the Service303 interface ServiceRegistry.add_service('test', '0.0.0.0', self._service.port) channel = ServiceRegistry.get_rpc_channel('test', ServiceRegistry.LOCAL) self._stub = Service303Stub(channel) info = ServiceInfo(name='test', version='0.0.0', state=ServiceInfo.ALIVE, health=ServiceInfo.APP_HEALTHY, start_time_secs=12345) self.assertEqual(self._stub.GetServiceInfo(Void()), info) # Stop the service self._stub.StopService(Void()) self._service.loop.run_forever() self.assertEqual(self._service.state, ServiceInfo.STOPPED)
async def test(): # Mock out GetServiceInfo.future mock = unittest.mock.Mock() service_info_future = asyncio.Future() service_info_future.set_result(ServiceInfo()) mock.GetServiceInfo.future.side_effect = [service_info_future] service303_mock.side_effect = [mock] await self._service_poller._get_service_info() mock.GetServiceInfo.future.assert_called_once_with( Void(), self._service_poller.GET_STATUS_TIMEOUT)
def GetServiceInfo(self, request, context): """ Returns the service info (name, version, state, meta, etc.) """ service_info = ServiceInfo(name=self._name, version=self._version, state=self._state, health=self._health, start_time_secs=self._start_time) if self._get_status_callback is not None: status = self._get_status_callback() try: service_info.status.meta.update(status) except (TypeError, ValueError) as exp: logging.error("Error getting service status: %s", exp) return service_info
def result(self): return ServiceInfo()