在Pax考试中编辑配置文件

时间:2014-05-07 07:21:58

标签: apache-karaf pax-exam

我正在使用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文件?

1 个答案:

答案 0 :(得分:1)

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

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

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