kitak · GitHub

Conversation

@kitak

Copy link Copy Markdown

Contributor

Portリソースで使えるbe_listening.with("protocol")マッチャを追加しました。
指定されたポートが与えられたプロトコルでlistenされているかどうか確認できます。
以下が記述例になります。

describe port(80) do
  it { should be_listening.with("tcp") }
end

commandsとmatcherのテストを記述して通ることを確認しています(Solarisのcommandは実際にこれでよいかどうか確かめていないです)。

@ftnk

Copy link Copy Markdown

Contributor

Solaris のコマンドを用意してもらえたのはうれしいのですが、
残念ながら、用意していただいたコマンドでは動作しません。

以下のようにすれば動くと思います。

    regexp = ".*\.#{port} "
    "netstat -an -P #{protocol} 2> /dev/null | egrep 'LISTEN|Idle' | grep -- #{escape(regexp)}"

Solaris 用のコマンドが必要だけどコマンドの確認ができない場合は、
raise NotImplementedError.new してもらえると、
Solaris 用のコマンドが必要だとわかるので助かります。

@kitak

Copy link Copy Markdown

Contributor Author

@ftnk
ありがとうございます。コマンドを修正します。
今後はraise NotImplementedError.newしますm(_ _)m

mizzy

Copy link Copy Markdown

Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

spec/<os_name>/port_spec.rb の方でコマンドのチェックもやってるので、こっちは追加しなくていいよ。
この commands_spec.rb 自体完全になくす予定です。

@kitak

Copy link Copy Markdown

Contributor Author

@mizzy

Copy link Copy Markdown

Owner

あと、be_listening.with(:tcp) じゃなく be_listening.with('tcp') にして欲しい。他のマッチャとの一貫性という意味で。

シンボルの方がオブジェクトよりもオーバーヘッド少ないだろうけど、現段階で気にすることではないし、このコードだと、文字列でもシンボルでもどちらでもいけると思うけど、あるマッチャが文字列で、別のマッチャがシンボルだと、使う人が混乱するだろうし、シンボルってRubyに慣れていない人にはわかりにくい概念なので、serverspec を利用する層の人には、わかりにくいだろうし、といった理由で、文字列で統一したいです。

それから、spec に udp のテストもあるといいな。

@kitak

Copy link Copy Markdown

Contributor Author

了解です。
テストの方を文字列で渡すように修正します。

@mizzy

Copy link Copy Markdown

Owner

Good!

mizzy added a commit that referenced this pull request

Jul 5, 2013
Add "be_listening.with(:protocol)" matcher for Port resource.

@mizzy

Labels

None yet

Read the original on github.com ↗