Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

実は簡単なFluentdプラグインのv1-config対応テストの書き方

Fluentd Advent Calendarの4日目は、Fluentdプラグインを数多くメンテナンスする@yoshi_kenがお届けします。

Fluentdはその拡張性の高さから、数多くのプラグインがリリースされております。
これをご覧になる方の中には、プラグインを自作された方もいらっしゃるかもしれません。

本日はこれからプラグインを書かれる方にも、既に自作プラグインを公開されている方にも便利なTipsをお届けします。

さて、設定ファイルの記法が拡張された、V1 Format環境下での動作を保証するためのテストコードの準備はいかがでしょうか。
筆者自身がメンテナンスするプラグインもこれから対応を進めていくといった状況です。

手を付ける前は実装の仕方は意外と大変なのでは無いかと不安でしたが、実際はとても簡単です。

STEP-1 : 既存のconfigureメソッドを拡張する

configureメソッドの第2引数にtrueを指定すると設定がv1 configとして処理されるようになります。
Fluentd本体の対応は Support use_v1 argument to enable V1 configuration in test module. fixes... · 09156a3 · fluent/fluentd にて済んでおりますので、fluentd v0.10.51以降であれば使えます。

具体的には、test/plugin/test_*****.rb にある記述を修正します。
プラグインのクラス名がGeoipOutputの場合は次のような呼び出し方となります。

-def create_driver(conf=CONFIG,tag='test')
-  Fluent::Test::OutputTestDriver.new(Fluent::GeoipOutput, tag).configure(conf)
+def create_driver(conf=CONFIG,tag='test',use_v1=false)
+  Fluent::Test::OutputTestDriver.new(Fluent::GeoipOutput, tag).configure(conf, use_v1)
 end

STEP-2 : V1-Formatで設定をパースして処理するテストを追加する

各テストの中でv1-configとして設定をパースする箇所は、次のように第3引数にtrueを付けます。

d1 = create_driver(CONFIG, 'input.access', true)

この1点の違いの他はこれまで通りに書けばテストを走らせられます。 今回実装した fluent-plugin-geoip のV1 Format対応のテストは次の通りです。

併せて、コミットと同時に自動的にテストが走るCIサービス、Travis-CIとの連携も行っておくと良いと思います!GitHubアカウントがあればすぐ使い始められますし、無料ですよ〜。

Travis-CIとの連携方法は、こちらの記事が参考になります。

まとめ

V1 Format (V1-Config)に対応するためのテストは思いの外簡単に書けます。
未対応のプラグインがあればこの機会に是非、Pull-Requestを送ってみても良いかもしれませんね!

私は年末年始休暇中にまとめて対応を進めようと画策中です!
それでは良いクリスマス・年末をお過ごしください。

ではっ (。・_・)ノ

宣伝

年末年始にFluentdを触ってみよう!という方にはこちらの書籍が手元にあると心強いですよ。