0

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 ファイルのプロパティは削除されています。メソッドを使用してeditConfigurationFilePutKaraf の構成ファイルの 1 つを編集すると、期待どおりに機能します (既存のプロパティを変更せずに新しいプロパティを追加するだけです)。おそらく問題は、Pax Exam が .cfg ファイルの前に構成を変更しようとすることだと思います機能によってインストールされるため、プロパティを配置する新しいファイルが作成されます。この場合、機能が適切にインストールされた後にのみ .cfg ファイルが編集されるように、このプロセスを同期する方法はありますか?

4

1 に答える 1

1

これには 2 つの異なる理由があります。1) configfile が「編集」された後に機能がインストールされる 2) 機能には config セクションのみが含まれ、configfile セクションは含まれない

Pax Exam で機能をインストールするには実行中の Karaf が必要なので、理由 1 が最も可能性の高い原因だと思います。理由 1 を回避するには、config をテスト プロジェクトにある config ファイルに置き換えます。理由 2 については、機能が構成管理構成ではなく構成を実際に参照していることを確認するか、config-admin サービスの構成に構成を追加してください。これを実現するには、単体テストに ConfigAdmin サービスを挿入し、プロパティを構成 pid に追加します。

編集: 両方のソリューションを組み合わせる config-admin サービスを注入するか、利用可能になるまで待って、テストが config-admin サービスを取得することを確認してください。@Before メソッド内で、設定が完了するまで待ってから変更してください。これにより、構成ファイルを複製する必要がなくなります。

于 2014-05-20T12:28:37.603 に答える