Skip to content

Commit dae5c11

Browse files
committed
test: テストスクリプトにスマートウェイトを適用
既存のテストユーティリティをスマートウェイトで強化。 より効率的で信頼性の高いテスト実行を実現。 更新したスクリプト: - start_server.rb: サーバー起動待機を最適化 - verify_server_setup.rb: SSH接続待機を改善
1 parent 71893fa commit dae5c11

File tree

2 files changed

+53
-26
lines changed

2 files changed

+53
-26
lines changed

test/start_server.rb

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
require 'dotenv/load'
66
require_relative '../scripts/sakura_server_user_agent.rb'
7+
require_relative 'smart_wait_helper'
8+
9+
include SmartWaitHelper
710

811
if ARGV.empty?
912
puts "使い方: ruby #{$0} <サーバーID>"
@@ -26,26 +29,35 @@
2629
response = ssua.send(:send_request, 'put', "server/#{server_id}/power", nil)
2730
puts "✅ 起動コマンドを送信しました"
2831

29-
# 起動を待つ
30-
puts "起動中..."
31-
attempts = 0
32-
while attempts < 30 # 最大5分待つ
33-
sleep(10)
34-
status_response = ssua.send(:send_request, 'get', "server/#{server_id}/power", nil)
35-
status = status_response['Instance']['Status']
32+
# スマートウェイトで起動を待つ
33+
puts "起動を待機中..."
34+
35+
begin
36+
result = wait_for_resource("server startup", -> {
37+
status_response = ssua.send(:send_request, 'get', "server/#{server_id}/power", nil)
38+
status = status_response['Instance']['Status']
39+
40+
{
41+
state: status,
42+
ready: status == 'up',
43+
error: nil,
44+
data: status_response
45+
}
46+
}, max_wait_time: 300, initial_interval: 2, max_interval: 20)
3647

37-
puts "ステータス: #{status}"
48+
puts "✅ サーバーが起動しました!"
3849

39-
if status == 'up'
40-
puts "✅ サーバーが起動しました!"
41-
break
50+
# サーバー情報を表示
51+
server_info = ssua.send(:send_request, 'get', "server/#{server_id}", nil)
52+
if server_info['Server']['Interfaces'] && server_info['Server']['Interfaces'].any?
53+
ip = server_info['Server']['Interfaces'].first['IPAddress']
54+
puts "IPアドレス: #{ip}"
55+
puts ""
56+
puts "SSH接続: ssh ubuntu@#{ip}"
4257
end
4358

44-
attempts += 1
45-
end
46-
47-
if attempts >= 30
48-
puts "⚠️ タイムアウト: サーバーの起動に時間がかかっています"
59+
rescue => e
60+
puts "⚠️ #{e.message}"
4961
end
5062

5163
rescue => e

test/verify_server_setup.rb

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
require 'dotenv/load'
77
require 'open3'
88
require 'json'
9+
require_relative 'smart_wait_helper'
10+
11+
include SmartWaitHelper
912

1013
if ARGV.empty?
1114
puts "使い方: ruby #{$0} <IPアドレス>"
@@ -22,16 +25,28 @@
2225
puts "========================================"
2326
puts ""
2427

25-
# SSH接続テスト
26-
print "1. SSH接続テスト... "
27-
stdout, stderr, status = Open3.capture3("ssh", "-o", "ConnectTimeout=10", "-o", "StrictHostKeyChecking=no",
28-
"#{username}@#{ip_address}", "echo 'OK'")
29-
if status.success? && stdout.strip == 'OK'
30-
puts "✅ 成功"
31-
else
32-
puts "❌ 失敗"
33-
puts "エラー: #{stderr}"
34-
puts "サーバーがまだ起動中の可能性があります。数分待ってから再度お試しください。"
28+
# SSH接続テスト(スマートウェイト付き)
29+
puts "1. SSH接続テスト..."
30+
31+
begin
32+
result = wait_for_resource("SSH connection", -> {
33+
stdout, stderr, status = Open3.capture3(
34+
"ssh", "-o", "ConnectTimeout=5", "-o", "StrictHostKeyChecking=no",
35+
"-o", "BatchMode=yes", "#{username}@#{ip_address}", "echo 'OK'"
36+
)
37+
38+
{
39+
state: status.success? ? "connected" : "waiting",
40+
ready: status.success? && stdout.strip == 'OK',
41+
error: nil,
42+
data: { stdout: stdout, stderr: stderr }
43+
}
44+
}, max_wait_time: 120, initial_interval: 2, max_interval: 10)
45+
46+
puts "✅ SSH接続成功"
47+
rescue => e
48+
puts "❌ SSH接続失敗: #{e.message}"
49+
puts "サーバーの起動が完了していない可能性があります。"
3550
exit 1
3651
end
3752

0 commit comments

Comments
 (0)