OSDN Git Service

shogi_server/command.rb: Prevent a possible password from be logged in a log file...
[shogi-server/shogi-server.git] / test / TC_command.rb
index d343c8b..fb2e134 100644 (file)
@@ -1,6 +1,7 @@
 $:.unshift File.join(File.dirname(__FILE__), "..")
 $topdir = File.expand_path File.dirname(__FILE__)
 require 'test/unit'
+require 'tempfile'
 require 'mock_game'
 require 'mock_log_message'
 require 'test/mock_player'
@@ -106,11 +107,21 @@ class TestFactoryMethod < Test::Unit::TestCase
     assert_instance_of(ShogiServer::MonitorOnCommand, cmd)
   end
 
+  def test_monitor2on_command
+    cmd = ShogiServer::Command.factory("%%MONITOR2ON game_id", @p)
+    assert_instance_of(ShogiServer::Monitor2OnCommand, cmd)
+  end
+
   def test_monitoroff_command
     cmd = ShogiServer::Command.factory("%%MONITOROFF game_id", @p)
     assert_instance_of(ShogiServer::MonitorOffCommand, cmd)
   end
 
+  def test_monitor2off_command
+    cmd = ShogiServer::Command.factory("%%MONITOR2OFF game_id", @p)
+    assert_instance_of(ShogiServer::Monitor2OffCommand, cmd)
+  end
+
   def test_help_command
     cmd = ShogiServer::Command.factory("%%HELP", @p)
     assert_instance_of(ShogiServer::HelpCommand, cmd)
@@ -191,9 +202,38 @@ class TestFactoryMethod < Test::Unit::TestCase
     assert_instance_of(ShogiServer::GetBuoyCountCommand, cmd)
   end
 
+  def test_void_command
+    cmd = ShogiServer::Command.factory("%%%HOGE", @p)
+    assert_instance_of(ShogiServer::VoidCommand, cmd)
+  end
+
   def test_error
     cmd = ShogiServer::Command.factory("should_be_error", @p)
     assert_instance_of(ShogiServer::ErrorCommand, cmd)
+    cmd.call
+    assert_match /unknown command should_be_error/, cmd.msg
+  end
+
+  def test_error_login
+    cmd = ShogiServer::Command.factory("LOGIN hoge foo", @p)
+    assert_instance_of(ShogiServer::ErrorCommand, cmd)
+    cmd.call
+    assert_no_match /unknown command LOGIN hoge foo/, cmd.msg
+
+    cmd = ShogiServer::Command.factory("LOGin hoge foo", @p)
+    assert_instance_of(ShogiServer::ErrorCommand, cmd)
+    cmd.call
+    assert_no_match /unknown command LOGIN hoge foo/, cmd.msg
+
+    cmd = ShogiServer::Command.factory("LOGIN  hoge foo", @p)
+    assert_instance_of(ShogiServer::ErrorCommand, cmd)
+    cmd.call
+    assert_no_match /unknown command LOGIN hoge foo/, cmd.msg
+
+    cmd = ShogiServer::Command.factory("LOGINhoge foo", @p)
+    assert_instance_of(ShogiServer::ErrorCommand, cmd)
+    cmd.call
+    assert_no_match /unknown command LOGIN hoge foo/, cmd.msg
   end
 end
 
@@ -431,6 +471,46 @@ class TestMonitorOnCommand < Test::Unit::TestCase
 
     assert_equal(:continue, rc)
   end
+
+  def test_call_read_logfile
+    game = MockGame.new
+    cmd = ShogiServer::MonitorOnCommand.new("%%MONITORON hoge", @p, game)
+    rc = cmd.call
+    assert_equal("##[MONITOR][dummy_game_id] dummy_game_show\n##[MONITOR][dummy_game_id] line1\n##[MONITOR][dummy_game_id] line2\n##[MONITOR][dummy_game_id] +OK\n", @p.out.join)
+    assert_equal(:continue, rc)
+  end
+end
+
+#
+#
+class TestMonitor2OnCommand < Test::Unit::TestCase 
+  def setup
+    @p = MockPlayer.new
+    @game = MockGame.new
+    @p.game = @game
+  end
+
+  def test_call
+    cmd = ShogiServer::Monitor2OnCommand.new("%%MONITOR2ON hoge", @p, nil)
+    rc = cmd.call
+
+    assert_equal(:continue, rc)
+  end
+
+  def test_call_read_logfile
+    $tempfile = Tempfile.new("TC_command_test_call_read_logfile")
+    $tempfile.write "hoge\nfoo\n"
+    $tempfile.close
+    game = MockGame.new
+    def game.logfile
+      $tempfile.path
+    end
+    cmd = ShogiServer::Monitor2OnCommand.new("%%MONITOR2ON hoge", @p, game)
+    rc = cmd.call
+    assert_equal("##[MONITOR2][dummy_game_id] hoge\n##[MONITOR2][dummy_game_id] foo\n##[MONITOR2][dummy_game_id] +OK\n", @p.out.join)
+    assert_equal(:continue, rc)
+    $tempfile = nil
+  end
 end
 
 #
@@ -452,6 +532,23 @@ end
 
 #
 #
+class TestMonitor2OffCommand < Test::Unit::TestCase 
+  def setup
+    @p = MockPlayer.new
+    @game = MockGame.new
+    @p.game = @game
+  end
+
+  def test_call
+    cmd = ShogiServer::Monitor2OffCommand.new("%%MONITOR2OFF hoge", @p, nil)
+    rc = cmd.call
+
+    assert_equal(:continue, rc)
+  end
+end
+
+#
+#
 class TestHelpCommand < Test::Unit::TestCase 
   def setup
     @p = MockPlayer.new
@@ -687,9 +784,8 @@ class BaseTestBuoyCommand < Test::Unit::TestCase
   end
 
   def delete_buoy_yaml
-    if File.exist?(File.join($topdir, "buoy.yaml"))
-      File.delete File.join($topdir, "buoy.yaml")
-    end
+    file = File.join($topdir, "buoy.yaml")
+    File.delete file if File.exist? file
   end
 
   def test_dummy
@@ -707,35 +803,9 @@ class TestSetBuoyCommand < BaseTestBuoyCommand
     @p.name = "set_buoy_player"
   end
 
-  def test_split_moves1
-    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 1
-    rs = cmd.__send__ :split_moves, "+7776FU"
-    assert_equal ["+7776FU"], rs
-  end
-
-  def test_split_moves2
-    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 1
-    rs = cmd.__send__ :split_moves, "+7776FU-3334FU"
-    assert_equal ["+7776FU", "-3334FU"], rs
-  end
-
-  def test_split_moves3
-    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 1
-    assert_nothing_raised do
-      cmd.__send__ :split_moves, ""
-    end
-  end
-
-  def test_split_moves_error1
-    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 1
-    assert_raise ShogiServer::SetBuoyCommand::WrongMoves do
-      cmd.__send__ :split_moves, "dummy"
-    end
-  end
-
-  def test_call
+  def test_call_2
     assert @buoy.is_new_game?("buoy_hoge-1500-0")
-    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 1
+    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 2
     rt = cmd.call
     assert :continue, rt
     assert !@buoy.is_new_game?("buoy_hoge-1500-0")
@@ -745,6 +815,16 @@ class TestSetBuoyCommand < BaseTestBuoyCommand
     assert_equal ShogiServer::BuoyGame.new("buoy_hoge-1500-0", "+7776FU", @p.name, 1), buoy_game2
   end
 
+  def test_call_1
+    assert @buoy.is_new_game?("buoy_hoge-1500-0")
+    cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoy_hoge-1500-0", "+7776FU", 1
+    rt = cmd.call
+    assert :continue, rt
+    assert @buoy.is_new_game?("buoy_hoge-1500-0")
+    assert !$p1.out.empty?
+    assert !$p2.out.empty?
+  end
+
   def test_call_error_not_buoy_game_name
     assert @buoy.is_new_game?("buoy_hoge-1500-0")
     cmd = ShogiServer::SetBuoyCommand.new "%%SETBUOY", @p, "buoyhoge-1500-0", "+7776FU", 1
@@ -852,8 +932,98 @@ class TestGetBuoyCountCommand < BaseTestBuoyCommand
     cmd = ShogiServer::GetBuoyCountCommand.new "%%GETBUOYCOUNT", @p, buoy_game.game_name
     rt = cmd.call
     assert :continue, rt
-    assert_equal ["##[GETBUOYCOUNT] 0\n", "##[GETBUOYCOUNT] +OK\n"], @p.out
+    assert_equal ["##[GETBUOYCOUNT] -1\n", "##[GETBUOYCOUNT] +OK\n"], @p.out
   end
 end
 
+#
+#
+class TestMonitorHandler < Test::Unit::TestCase
+  def test_not_equal_players
+    @player1 = MockPlayer.new
+    @handler1 = ShogiServer::MonitorHandler1.new @player1
+    @player2 = MockPlayer.new
+    @handler2 = ShogiServer::MonitorHandler1.new @player2
+
+    assert_not_equal(@handler1, @handler2)
+  end
+
+  def test_equal
+    @player1 = MockPlayer.new
+    @handler1 = ShogiServer::MonitorHandler1.new @player1
+    @handler2 = ShogiServer::MonitorHandler1.new @player1
+
+    assert_equal(@handler1, @handler2)
+  end
+end
+
+#
+#
+class TestMonitorHandler1 < Test::Unit::TestCase
+  def setup
+    @player = MockPlayer.new
+    @handler = ShogiServer::MonitorHandler1.new @player
+  end
+
+  def test_type
+    assert_equal(1, @handler.type)
+  end
+
+  def test_header
+    assert_equal("MONITOR", @handler.header)
+  end
+  
+  def test_equal
+    assert_equal @handler, @handler
+    assert_not_equal @handler, nil
+  end
+
+  def test_not_equal
+    assert_not_equal(@handler, ShogiServer::MonitorHandler2.new(@player))
+  end
+
+  def test_write_safe
+    @handler.write_safe("game_id", "hoge")
+    assert_equal("##[MONITOR][game_id] hoge\n##[MONITOR][game_id] +OK\n", 
+                 @player.out.join)
+  end
+end
+
+#
+#
+class TestMonitorHandler2 < Test::Unit::TestCase
+  def setup
+    @player = MockPlayer.new
+    @handler = ShogiServer::MonitorHandler2.new @player
+  end
+
+  def test_type
+    assert_equal(2, @handler.type)
+  end
+
+  def test_header
+    assert_equal("MONITOR2", @handler.header)
+  end
+
+  def test_equal
+    assert_equal @handler, @handler
+    assert_not_equal @handler, nil
+  end
+
+  def test_not_equal
+    assert_not_equal(@handler, ShogiServer::MonitorHandler1.new(@player))
+  end
+
+  def test_write_safe
+    @handler.write_safe("game_id", "hoge")
+    assert_equal("##[MONITOR2][game_id] hoge\n##[MONITOR2][game_id] +OK\n", 
+                 @player.out.join)
+  end
+
+  def test_write_safe2
+    @handler.write_safe("game_id", "hoge\nfoo")
+    assert_equal("##[MONITOR2][game_id] hoge\n##[MONITOR2][game_id] foo\n##[MONITOR2][game_id] +OK\n", 
+                 @player.out.join)
+  end
+end