Skip to content

Instantly share code, notes, and snippets.

@tsu-nera
Created July 15, 2013 07:40
Show Gist options
  • Save tsu-nera/5998100 to your computer and use it in GitHub Desktop.
Save tsu-nera/5998100 to your computer and use it in GitHub Desktop.
Vagrant & sahara & minitest で エンドツーエンドを実施するサンプルテスト
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'pty'
require 'expect'
require 'timeout'
# expect で読み込んだ内容を標準出力に出力するおまじない
$expect_verbose=true
class MkdirExpect
def setup
# sahara rollbackで初期化
system( 'vagrant sandbox rollback' )
# SSH通信を確立
@pty = PTY.spawn("vagrant ssh")
@sin = @pty[0]
@sout= @pty[1]
@pid = @pty[2]
@sout.sync=true
end
def teardown
# SSH通信の終了
@sin.expect(/[$%#]/){@sout.puts "exit" }
@sin.expect(/[$%#]/)
end
def mkdir_testdir
# Test
@sin.expect(/[$%#]/){ @sout.puts "mkdir testdir" }
# Verify
@sin.expect(/[$%#]/){ @sout.puts "ls" }
@sin.expect("testdir")
return 0
end
def mkdir_two_directory
# Test
@sin.expect(/[$%#]/){ @sout.puts "mkdir dir1" }
@sin.expect(/[$%#]/){ @sout.puts "mkdir dir2" }
# Verify
@sin.expect(/[$%#]/){ @sout.puts "ls" }
@sin.expect("dir1")
@sin.expect(/[$%#]/){ @sout.puts "ls" }
@sin.expect("dir2")
return 0
end
def mkdir_timeout
# Test
@sin.expect(/[$%#]/){ @sout.puts "mkdir testdir" }
# Verify
@sin.expect(/[$%#]/){ @sout.puts "ls" }
begin
timeout(3) {
@sin.expect("testdir2", 5)
}
rescue Timeout::Error => ex
@sout.puts "exit"
puts ex.message
return ex.class
end
return 0
end
end
# -*- coding: utf-8 -*-
require 'minitest/unit'
require 'minitest/autorun'
require './tc_mkdir_expect'
class TestMkdirExpect < MiniTest::Unit::TestCase
def setup
@foo = MkdirExpect.new
@foo.setup
end
def teardown
@foo.teardown
@foo = nil
end
def test_testdir
assert_equal 0,@foo.mkdir_testdir
end
def test_mkdir_two_directory
assert_equal 0,@foo.mkdir_two_directory
end
def test_mkdir_timeout
# assert_equal 0,@foo.mkdir_timeout
assert_equal Timeout::Error,@foo.mkdir_timeout
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment