Example #1
0
    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)
Example #2
0
        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)
Example #3
0
 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
Example #4
0
 def result(self):
     return ServiceInfo()