def _process_register_app(self, conn, msg_data):
        '''
        Description: process register_app message
        Input:
            conn: a socket connection
            msg_data: message data.
        Returns: True or False
        '''
        request = pb2.RegisterApp()
        response = pb2.CommonResponse()
        msg_name = pb2._COMMONRESPONSE.full_name

        if not self._parse_protobuf(request, msg_data):
            self._response_error_unknown(conn)
            return False

        app_id = request.id
        app_type = request.type
        # check app id if exist
        app_dir = os.path.join(self.storage_dir, app_id)
        if os.path.isdir(app_dir):
            logging.error("App %s is already exist.", app_id)
            response.ret = pb2.kErrorAppRegisterExist
            response.message = "App {} is already exist.".format(app_id)
            self.send_message(conn, response, msg_name)
        elif self.app_manager.get_app_num() >= self.max_app_num:
            logging.error("App number reach the upper limit")
            response.ret = pb2.kErrorAppRegisterLimit
            response.message = "App number reach the upper limit"
            self.send_message(conn, response, msg_name)
        elif app_type != SERVER_TYPE:
            logging.error("App type %s error", app_type)
            response.ret = pb2.kErrorAppRegisterType
            response.message = "App type {} error".format(app_type)
            self.send_message(conn, response, msg_name)
        elif self._is_app_id_invalid(app_id):
            logging.error("App id %s is too long", app_id)
            response.ret = pb2.kErrorOther
            response.message = "App id: {} is too long".format(app_id)
            self.send_message(conn, response, msg_name)
        elif self._remain_space() < self.reserved_space:
            logging.error("Insufficient storage space on Presenter Server.")
            response.ret = pb2.kErrorAppRegisterNoStorage
            response.message = "Insufficient storage space on Presenter Server"
            self.send_message(conn, response, msg_name)
        else:
            self.app_manager.register_app(app_id, conn)
            # app_dir = os.path.join(self.storage_dir, app_id)
            # if not os.path.isdir(app_dir):
            #     os.makedirs(app_dir)
            response.ret = pb2.kErrorNone
            response.message = "Register app {} succeed".format(app_id)
            self.send_message(conn, response, msg_name)
            return True
        return False
 def test_parse_protobuf(self, mock):
     server = Test_VideoAnalysisServer.server
     mock.side_effect = mock_parse_proto_exp
     request = video_pb.RegisterApp()
     ret = server._parse_protobuf(request, b'xxx')
     self.assertEqual(ret, False)
def protobuf_register_app():
    app = video_pb.RegisterApp()
    app.id = APP_NAME
    app.type = APP_NAME
    return app.SerializeToString()