【问题标题】:Editing configuration files in Pax Exam在 Pax Exam 中编辑配置文件
【发布时间】:2014-05-07 07:21:58
【问题描述】:

我正在使用 Pax Exam 对我的 OSGi 应用程序执行集成测试。我有一个配置工厂,我在其中指定要安装在测试容器中的应用程序的 Karaf 功能,然后修改作为我的功能的一部分安装的 .cfg 文件的一些属性。

public class TestConfigurationFactory implements ConfigurationFactory {

@Override
public Option[] createConfiguration() {
    return options(
            karafDistributionConfiguration()
                    .frameworkUrl(
                            maven().groupId("org.apache.karaf")
                                    .artifactId("apache-karaf")
                                    .version("3.0.1").type("tar.gz"))
                    .unpackDirectory(new File("target/exam"))
                    .useDeployFolder(false),
            keepRuntimeFolder(),
            // Karaf (own) features.
            KarafDistributionOption.features(
                    maven().groupId("org.apache.karaf.features")
                            .artifactId("standard").classifier("features")
                            .version("3.0.1").type("xml"), "scr"),
            // CXF features.
            KarafDistributionOption.features(maven()
                    .groupId("org.apache.cxf.karaf")
                    .artifactId("apache-cxf").version("2.7.9")
                    .classifier("features").type("xml")),
            // Application features.
            KarafDistributionOption.features(
                    maven().groupId("com.me.project")
                            .artifactId("my-karaf-features")
                            .version("1.0.0-SNAPSHOT")
                            .classifier("features").type("xml"), "my-feature"),
            KarafDistributionOption.editConfigurationFilePut(
                       "etc/com.me.test.cfg", "key", "value"));
}
}

我在editConfigurationFilePut 中指定的属性已正确修改,但 .cfg 文件的其余属性已被删除。如果我使用editConfigurationFilePut 方法编辑 Karaf 的配置文件之一,它会按预期工作(只是添加新属性而不修改现有属性)所以我认为问题可能是 Pax Exam 尝试在.cfg 文件是由我的功能安装的,因此会创建一个新文件来放入该属性。如果是这种情况,是否有某种方法可以同步此过程,以便仅在正确安装该功能后才编辑 .cfg 文件?

【问题讨论】:

    标签: apache-karaf pax-exam


    【解决方案1】:

    这有两个不同的原因。 1) 配置文件被“编辑”后,该功能才会安装 2) 该功能只包含一个配置部分而不是一个配置文件部分

    我猜原因之一是最可能的原因,因为它需要运行中的 Karaf 才能通过 Pax Exam 安装功能。因此,要解决原因一,请将配置替换为测试项目中存在的配置文件。 原因二,请确保该功能确实引用了配置而不是配置管理员配置,或者将您的配置添加到 config-admin 服务的配置中。您可以通过在单元测试中注入 ConfigAdmin 服务并将您的属性添加到配置 pid 来实现此目的。

    编辑: 结合两种解决方案 由于 1) 配置文件实际可用需要更长的时间,所以让 config-admin 服务完成其余的工作。 确保您的测试确实通过注入或等待它的可用性来检索 config-admin 服务。 现在在 @Before 方法中确保您等到您的配置完成并从那里更改它。这样你就不需要复制配置文件了。

    【讨论】:

    • 是的,我的功能有一个配置文件,所以我也假设我的问题是你提到的第一个案例。您的解决方法是我到目前为止所做的,但是我想要一个不需要我在测试项目中保留配置文件副本的解决方案。配置文件可能会经常更改,因为我们仍在开发中,只有少数属性应该被测试项目替换,因此在维护方面,仅在测试项目中替换相关的配置属性要容易得多。
    • 在编辑之后,这确实是正确的答案,因为据我了解,配置工厂中指定的选项用于设置 Karaf 在启动之前,因此我可以t 控制它们的执行顺序。不幸的是,在我的情况下我不能真正使用它,因为我需要在安装一些功能之前设置其中一些配置属性,但这是一个不同的问题......
    猜你喜欢
    • 2012-08-14
    • 2014-09-28
    • 1970-01-01
    • 2015-11-10
    • 2013-11-22
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2016-02-28
    相关资源
    最近更新 更多