tl;dr

前回, rspec-ftp を少し触ってみました. rspec に乗っかることで, FTP ユーザーの振る舞いをテスト出来るようにしてみたつもりです.

tl;dr FTP ユーザーの振る舞いをテストする なぜ, FTP ユーザーの振る舞いをテストしたいのか サンプルはこちらから サンプル実行 想定する FTP サーバー, FTP ユーザー 環境構築 ユーザー名, パスワードを secret.yml に定義する テストを実行する...その前に 気を...

inokara.hateblo.jp

せっかくなので, infrataster のプラグインも作ってみようということで, fukuoka.rb #110 でもくもくしてみました.

そして, インテグレーションテスト的なものを追加して gem 化してリリースしてみました.

infrataster-plugin-ftp | RubyGems.org | your community gem host

よろしければご利用頂きまして, フィードバック等を頂けると幸いですmm

詳細は

README やリポジトリ内の spec ディレクトリ以下を参考にして頂くとして, テストコードは以下のように書くことを想定しています.

require 'spec_helper'

describe server(:ftp_server) do
  describe ftp('welcome') do
    it 'check accessible' do
      expect(result.chomp).to eq('230 Login successful.')
    end
  end

  describe ftp('pwd') do
    it 'check `chroot` enabled' do
      expect(result).to eq('/')
    end
  end

  describe ftp('mkdir test_dir') do
    it 'run `mkdir`' do
      expect(result).to include '/test_dir'
    end
  end

  describe ftp('ls') do
    it 'run ls' do
      expect(result).to include 'sample.txt'
    end
  end
end

spec_helper.rb には以下のように FTP サーバーへの接続情報を記述します.

Infrataster::Server.define(
  :ftp_server,
  '192.168.0.6',
  ftp: { user: 'ftpuser', pass: 'supersecret', passive: true },
)

FTP サーバーに対して送信する FTP コマンド (lspwd 等) の挙動をテストするような感じになります. これを実行すると…以下のような結果となります.

$ docker-compose exec rspec-ruby25 rspec

server 'ftp_server'
  ftp:
    check accessible
  ftp:
    check `chroot` enabled
  ftp:
    run `mkdir`
  ftp:
    run ls

Finished in 0.07892 seconds (files took 0.7531 seconds to load)
4 examples, 0 failures

想定するユースケース

自分は FTP サーバーにユーザーを追加した際に, 追加したユーザーがそもそもログイン出来るのか, ユーザーは chroot されているのかをテストしたい場合に利用したいと考えています. その他, 単純に FTP サーバーを構築した後の基本的な動作確認にも利用出来るのではと考えています.

2018 年に FTP を利用するシチュエーションがどれだけあるか判りませんが, FTP クライアントを使って目視で確認という若干アナログな作業を Rspec というフレームワークの上でコード化出来るという意味ではこのプラグインは多少なりとも有用なのではと考えています.

以上

現場からの報告でした!ε≡≡ヘ( ´Д`)ノ

元記事はこちら

infrataster-plugin-ftp を作ってリリースしました