minecraftctl 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,80 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'minecraft'
3
+
4
+ describe Minecraft do
5
+ it "should raise Minecraft::StartupFailedError when server command is not executable" do
6
+ @m = Minecraft.new(File.dirname(__FILE__) + '/stub_minecraftxx')
7
+ lambda {
8
+ @m.start
9
+ }.should raise_error Minecraft::StartupFailedError
10
+ end
11
+
12
+ it "should raise Minecraft::StartupFailedError when server command is not returning expected output" do
13
+ @m = Minecraft.new('echo hello world')
14
+ lambda {
15
+ @m.start
16
+ }.should raise_error Minecraft::StartupFailedError
17
+ end
18
+
19
+ it "should start up" do
20
+ @m = Minecraft.new(File.dirname(__FILE__) + '/stub_server/minecraft')
21
+ @m.start
22
+
23
+ msgs = @m.history.map{|m| m.msg}
24
+
25
+ msgs.should include "Starting minecraft server version Beta 1.7.3"
26
+ msgs.should include "Done (5887241893ns)! For help, type \"help\" or \"?\""
27
+ msgs.last.should =~ /Server start finished/
28
+ end
29
+
30
+ describe 'while running' do
31
+ before :all do
32
+ @m = Minecraft.new(File.dirname(__FILE__) + '/stub_server/minecraft')
33
+ @m.start
34
+ end
35
+
36
+ it 'should provide message history' do
37
+ h = @m.history
38
+ h.first.should be_kind_of Minecraft::MessageQueue::Message::Internal
39
+ h.should have(23).items
40
+ end
41
+
42
+ it 'responds to list command' do
43
+ @m.list
44
+ msgs = @m.history.map{|m| m.msg}
45
+ msgs.last.should == 'Connected players: kazuya'
46
+ end
47
+
48
+ it 'responds to say command' do
49
+ @m.say('hello', 'world')
50
+ msgs = @m.history.map{|m| m.msg}
51
+ msgs.should include '[CONSOLE] hello world'
52
+ end
53
+
54
+ it 'responds to save_all command' do
55
+ @m.save_all
56
+ msgs = @m.history.map{|m| m.msg}
57
+ msgs.should include 'CONSOLE: Save complete.'
58
+ end
59
+
60
+ it 'should stop and start' do
61
+ @m.stop
62
+ msgs = @m.history.map{|m| m.msg}
63
+ msgs.should include 'Stopping server'
64
+ @m.running?.should == false
65
+
66
+ @m.start
67
+ msgs = @m.history.map{|m| m.msg}
68
+ msgs[-5, 5].should include 'Done (5887241893ns)! For help, type "help" or "?"'
69
+ @m.running?.should == true
70
+
71
+ @m.list
72
+ msgs = @m.history.map{|m| m.msg}
73
+ msgs.last.should == 'Connected players: kazuya'
74
+ end
75
+
76
+ after :all do
77
+ @m.stop
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,92 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'httpclient'
3
+ require 'open4'
4
+ require 'timeout'
5
+
6
+
7
+ $url = 'http://localhost:25560/'
8
+
9
+ def start_stub(wait = true)
10
+ pid, stdin, stdout, stderr = Open4::popen4(File.dirname(__FILE__) + '/../bin/minecraftctlserver -c ./minecraft ' + File.dirname(__FILE__) + '/stub_server')
11
+
12
+ if wait
13
+ c = HTTPClient.new
14
+ Timeout.timeout(10) do
15
+ begin
16
+ c.get_content($url + "status")
17
+ rescue Errno::ECONNREFUSED
18
+ sleep 0.4
19
+ retry
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ def stop_stub
26
+ HTTPClient.new.post_content($url + "shutdown", '')
27
+
28
+ Timeout.timeout(10) do
29
+ begin
30
+ loop do
31
+ HTTPClient.new.get_content($url + "status")
32
+ sleep 0.4
33
+ end
34
+ rescue Errno::ECONNREFUSED
35
+ rescue => e
36
+ puts "got different error: #{e}"
37
+ end
38
+ end
39
+ sleep 0.2
40
+ end
41
+
42
+ describe 'minecraftctlserver' do
43
+ describe 'text mode HTTP' do
44
+ describe 'server startup' do
45
+ before :all do
46
+ start_stub(false)
47
+ end
48
+
49
+ it 'should start the minecraft server and respond to status command when ready' do
50
+ Timeout.timeout(10) do
51
+ out = nil
52
+ begin
53
+ out = HTTPClient.new.get_content($url + "status")
54
+ rescue Errno::ECONNREFUSED
55
+ sleep 0.4
56
+ retry
57
+ end
58
+
59
+ out.should =~ /Minecraft server is running with pid:/
60
+ end
61
+ end
62
+
63
+ after :all do
64
+ stop_stub
65
+ end
66
+ end
67
+
68
+ describe 'while server ready' do
69
+ before :all do
70
+ start_stub
71
+ end
72
+
73
+ it 'should respond to GET /list' do
74
+ HTTPClient.new.get_content($url + "list").should == "Connected players: kazuya\n"
75
+ end
76
+
77
+ it 'should stop and start with POST /stop and POST /start' do
78
+ HTTPClient.new.post_content($url + "stop", '').should include "Server stopped\n"
79
+ HTTPClient.new.post_content($url + "start", '').should include 'Done (5887241893ns)! For help, type "help" or "?"'
80
+ end
81
+
82
+ it 'should respond to GET /help' do
83
+ HTTPClient.new.get_content($url + "help").should include "show server status\n"
84
+ end
85
+
86
+ after :all do
87
+ stop_stub
88
+ end
89
+ end
90
+ end
91
+ end
92
+
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
  $LOAD_PATH.unshift(File.dirname(__FILE__))
3
3
  require 'rspec'
4
- require 'minecraftctl'
5
4
 
6
5
  # Requires supporting files with custom matchers and macros, etc,
7
6
  # in ./support/ and its subdirectories.
@@ -0,0 +1,100 @@
1
+ #!/usr/bin/ruby
2
+
3
+ def out(line)
4
+ STDOUT << line + "\n"
5
+ STDOUT.flush
6
+ end
7
+
8
+ def err(line)
9
+ STDERR << line + "\n"
10
+ STDERR.flush
11
+ end
12
+
13
+ $expects = {}
14
+
15
+ def expect(command, &response)
16
+ $expects[command] = response
17
+ end
18
+
19
+ out '151 recipes'
20
+ out '16 achievements'
21
+ err '2011-09-10 12:58:55 [INFO] Starting minecraft server version Beta 1.7.3'
22
+ err '2011-09-10 12:58:55 [WARNING] **** NOT ENOUGH RAM!'
23
+ err '2011-09-10 12:58:55 [WARNING] To start the server with more ram, launch it as "java -Xmx1024M -Xms1024M -jar minecraft_server.jar"'
24
+ err '2011-09-10 12:58:55 [INFO] Loading properties'
25
+ err '2011-09-10 12:58:55 [INFO] Starting Minecraft server on *:25565'
26
+ err '2011-09-10 12:58:55 [WARNING] **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!'
27
+ err '2011-09-10 12:58:55 [WARNING] The server will make no attempt to authenticate usernames. Beware.'
28
+ err '2011-09-10 12:58:55 [WARNING] While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose.'
29
+ err '2011-09-10 12:58:55 [WARNING] To change this, set "online-mode" to "true" in the server.settings file.'
30
+ err '2011-09-10 12:58:55 [INFO] Preparing level "world"'
31
+ err '2011-09-10 12:58:55 [INFO] Preparing start region for level 0'
32
+ err '2011-09-10 12:58:56 [INFO] Preparing spawn area: 32%'
33
+ err '2011-09-10 12:58:57 [INFO] Preparing spawn area: 77%'
34
+ err '2011-09-10 12:58:58 [INFO] Preparing start region for level 1'
35
+ err '2011-09-10 12:58:59 [INFO] Preparing spawn area: 4%'
36
+ err '2011-09-10 12:59:00 [INFO] Preparing spawn area: 52%'
37
+ err '2011-09-10 12:59:01 [INFO] Preparing spawn area: 97%'
38
+ err '2011-09-10 12:59:01 [INFO] Done (5887241893ns)! For help, type "help" or "?"'
39
+
40
+ expect 'list' do
41
+ err '2011-09-20 14:42:04 [INFO] Connected players: kazuya'
42
+ end
43
+
44
+ expect 'stop' do
45
+ err '2011-09-19 22:12:00 [INFO] Stopping server'
46
+ err '2011-09-19 22:12:00 [INFO] Saving chunks'
47
+ err '2011-09-19 22:12:00 [INFO] Saving chunks'
48
+ exit
49
+ end
50
+
51
+ expect 'help' do
52
+ err '2011-09-21 13:33:46 [INFO] To run the server without a gui, start it like this:'
53
+ err '2011-09-21 13:33:46 [INFO] java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui'
54
+ err '2011-09-21 13:33:46 [INFO] Console commands:'
55
+ err '2011-09-21 13:33:46 [INFO] help or ? shows this message'
56
+ err '2011-09-21 13:33:46 [INFO] kick <player> removes a player from the server'
57
+ err '2011-09-21 13:33:46 [INFO] ban <player> bans a player from the server'
58
+ err '2011-09-21 13:33:46 [INFO] pardon <player> pardons a banned player so that they can connect again'
59
+ err '2011-09-21 13:33:46 [INFO] ban-ip <ip> bans an IP address from the server'
60
+ err '2011-09-21 13:33:46 [INFO] pardon-ip <ip> pardons a banned IP address so that they can connect again'
61
+ err '2011-09-21 13:33:46 [INFO] op <player> turns a player into an op'
62
+ err '2011-09-21 13:33:46 [INFO] deop <player> removes op status from a player'
63
+ err '2011-09-21 13:33:46 [INFO] tp <player1> <player2> moves one player to the same location as another player'
64
+ err '2011-09-21 13:33:46 [INFO] give <player> <id> [num] gives a player a resource'
65
+ err '2011-09-21 13:33:46 [INFO] tell <player> <message> sends a private message to a player'
66
+ err '2011-09-21 13:33:46 [INFO] stop gracefully stops the server'
67
+ err '2011-09-21 13:33:46 [INFO] save-all forces a server-wide level save'
68
+ err '2011-09-21 13:33:46 [INFO] save-off disables terrain saving (useful for backup scripts)'
69
+ err '2011-09-21 13:33:46 [INFO] save-on re-enables terrain saving'
70
+ err '2011-09-21 13:33:46 [INFO] list lists all currently connected players'
71
+ err '2011-09-21 13:33:46 [INFO] say <message> broadcasts a message to all players'
72
+ err '2011-09-21 13:33:46 [INFO] time <add|set> <amount> adds to or sets the world time (0-24000)'
73
+ err '2011-09-21 13:33:46 [INFO] gamemode <player> <mode> sets player\'s game mode (0 or 1)'
74
+ end
75
+
76
+ expect 'say' do |*args|
77
+ err "2011-09-21 14:01:18 [INFO] [CONSOLE] #{args.join(' ')}"
78
+ end
79
+
80
+ expect 'save-all' do
81
+ err '2011-09-21 14:02:22 [INFO] CONSOLE: Forcing save..'
82
+ err '2011-09-21 14:02:22 [INFO] CONSOLE: Save complete.'
83
+ end
84
+
85
+ expect 'stream' do
86
+ 10.times do |n|
87
+ err "2011-09-21 14:02:#{n} [INFO] #{n}"
88
+ sleep 1
89
+ end
90
+ end
91
+
92
+ loop do
93
+ cmd, *args = gets.split(' ')
94
+ if $expects.member? cmd
95
+ $expects[cmd].call(*args)
96
+ else
97
+ err '2011-09-20 14:42:52 [INFO] Unknown console command. Type "help" for help.'
98
+ end
99
+ end
100
+
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minecraftctl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 0
10
- version: 1.0.0
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jakub Pastuszek
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-10 00:00:00 Z
18
+ date: 2011-09-22 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -175,6 +175,38 @@ dependencies:
175
175
  name: httpclient
176
176
  prerelease: false
177
177
  type: :development
178
+ - !ruby/object:Gem::Dependency
179
+ requirement: &id011 !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">="
183
+ - !ruby/object:Gem::Version
184
+ hash: 19
185
+ segments:
186
+ - 1
187
+ - 1
188
+ - 0
189
+ version: 1.1.0
190
+ version_requirements: *id011
191
+ name: open4
192
+ prerelease: false
193
+ type: :development
194
+ - !ruby/object:Gem::Dependency
195
+ requirement: &id012 !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ hash: 25
201
+ segments:
202
+ - 1
203
+ - 1
204
+ - 5
205
+ version: 1.1.5
206
+ version_requirements: *id012
207
+ name: mongrel
208
+ prerelease: false
209
+ type: :development
178
210
  description: Allows to send messages, start and stop Minecraft server
179
211
  email: jpastuszek@gmail.com
180
212
  executables:
@@ -196,10 +228,15 @@ files:
196
228
  - VERSION
197
229
  - bin/minecraftctl
198
230
  - bin/minecraftctlserver
199
- - lib/minecraftctl.rb
231
+ - lib/message_collector.rb
232
+ - lib/minecraft.rb
233
+ - lib/spawn.rb
200
234
  - minecraftctl.gemspec
201
- - spec/minecraftctl_spec.rb
235
+ - spec/message_collector_spec.rb
236
+ - spec/minecraft_spec.rb
237
+ - spec/minecraftctlserver_spec.rb
202
238
  - spec/spec_helper.rb
239
+ - spec/stub_server/minecraft
203
240
  homepage: http://github.com/jpastuszek/minecraftctl
204
241
  licenses:
205
242
  - MIT
data/lib/minecraftctl.rb DELETED
File without changes
@@ -1,7 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "Minecraftctl" do
4
- it "fails" do
5
- fail "hey buddy, you should probably rename this file and start specing for real"
6
- end
7
- end