我正在使用Pax考试对我的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考试试图在.cfg文件被我的特性安装之前修改配置,从而创建一个新的文件将属性放入其中。如果是这样的话,是否有什么方法来同步这个过程,以便只有在正确安装了特性之后才对.cfg文件进行编辑?
发布于 2014-05-20 12:28:37
这有两个不同的原因。1)在configfile被“编辑”后才安装该特性。2)该特性只包含一个配置部分,而不是configfile部分。
我猜原因之一是最有可能的原因,因为它需要一个运行的Karaf通过Pax考试来安装一个特性。因此,要解决第一个原因,请将配置替换为测试项目中的配置文件。出于第二个原因,确保特性确实引用了配置而不是配置管理配置,或者将配置添加到config-admin服务的配置中。您可以通过在单元测试中注入ConfigAdmin服务并将属性添加到配置pid中来实现这一点。
编辑:合并这两种解决方案,因为因为1)配置文件实际可用所需时间更长,其余部分由config-admin服务来完成。确保您的测试通过注入配置管理服务或等待它的可用性来检索它。现在,在@a方法中,请确保等到配置完成后再进行更改。这样您就不需要复制配置文件了。
https://stackoverflow.com/questions/23511297
复制相似问题