使用 Citrus 模拟 SFTP 和 Kafka 以进行集成测试 Spring-启动基于 apache-camel xml 的路由?

Using Citrus to mock SFTP and Kafka for Integration Testing Spring-Boot apache-camel xml based routes?

我正在使用使用 Apache Camel spring-xml 路由编写的 Spring 启动应用程序。很少有基于 java 的应用程序逻辑,它几乎完全是用 xml 编写的,并且基于各种骆驼路线。

路由被配置为通过 属性 文件连接到不同的环境和系统,使用 属性 例如 KAFKA_URL and KAFKA_PORT。在其中一个实现的路由中,应用程序连接以下内容并向其发送 consumes/produces 消息:

<to id="route_id_replaced_for_question" uri="kafka:{{env:KAFKA_URL:{{KAFKA_URL}}}}:{{env:KAFKA_PORT:{{KAFKA_PORT}}}}?topic={{env:KAFKA_TOPIC:{{topic_to_connect_to}}}}&amp;kerberosRenewJitter=1&amp;kerberosRenewWindowFactor=1&amp;{{kafka.ssl.props}}&amp;{{kafka.encryption.props}}"/>

此外,我们连接到一个 SFTP 服务器,我也在尝试使用 Citrus 对其进行模拟。这遵循类似的模式,其中:

<from id="_requestFile" uri="{{env:FTP_URL:{{FTP_URL}}}}:{{env:FTP_PORT:{{FTP_PORT}}}}/{{env:FTP_FILE_DIR:{{FTP_FILE_DIR}}}}/?delete=true&amp;fileExist=Append&amp;password={{env:FTP_PASSWORD:{{FTP_PASSWORD}}}}&amp;delay={{env:FTP_POLL_DELAY:{{FTP_POLL_DELAY}}}}&amp;username={{env:FTP_USER:{{FTP_USER}}}}"/>

在我的集成测试中,我配置了 Citrus 的 EmbeddedKafkaServer class 如下:

 @Bean
    public EmbeddedKafkaServer embeddedKafkaServer() {
        return new EmbeddedKafkaServerBuilder()
                .kafkaServerPort(9092)
                .topics("topic_to_connect_to")
                .build();
    }

和 Citrus FTP 服务器:

    @Bean
    public SftpServer sftpServer() {
        return CitrusEndpoints.sftp()
                .server()
                .port(2222)
                .autoStart(true)
                .user("username")
                .password("passwordtoconnectwith")
                .userHomePath("filedirectory/filestoreadfrom")
                .build();
    }

理想情况下,我的测试将连接到模拟 sftp 服务器,我将使用 Citrus 将文件推送到适当的目录,然后我的应用程序将读入、处理并发布到嵌入式 kafka 集群上的主题并在测试中验证。

我的印象是我会将 KAFKA_PORT 设置为 9092,将 KAFKA_URL 设置为本地主机,将 FTP_URL 设置为本地主机,将 FTP_PORT 设置为 2222(其中需要的其他属性)在我的属性文件中,但这似乎没有将我连接到嵌入式集群或 sftp 服务器..

让我的 spring 启动应用程序连接到这两个模拟实例并从那里 运行 它的业务逻辑处理,我错过了什么难题?

我解决了这个问题 - 这是因为使用了非常旧的 Kafka 版本(1.0.0 或更早版本),它缺少一些在 Citrus 尝试构建新主题时调用的方法。如果有人在使用 Citrus 时遇到与此类似的问题,我建议首先评估您的服务所使用的 Kafka 版本,并确定是否需要更新它。

对于 sftp 连接,服务器或客户端未自动连接,因此从未启动。