steam-condenser 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.md +2 -1
  2. data/Rakefile +10 -1
  3. data/lib/steam-condenser/version.rb +1 -1
  4. data/lib/steam/community/app_news.rb +0 -0
  5. data/lib/steam/community/game_leaderboard.rb +199 -0
  6. data/lib/steam/community/game_leaderboard_entry.rb +43 -0
  7. data/lib/steam/community/game_stats.rb +16 -0
  8. data/lib/steam/community/steam_game.rb +18 -0
  9. data/lib/steam/community/steam_group.rb +9 -4
  10. data/lib/steam/community/steam_id.rb +45 -41
  11. data/lib/steam/community/tf2/tf2_beta_inventory.rb +22 -0
  12. data/lib/steam/community/tf2/tf2_golden_wrench.rb +0 -0
  13. data/lib/steam/community/tf2/tf2_stats.rb +10 -4
  14. data/lib/steam/community/web_api.rb +0 -0
  15. data/lib/steam/servers/master_server.rb +2 -1
  16. data/lib/steam/servers/server.rb +1 -1
  17. data/lib/steam/sockets/rcon_socket.rb +0 -1
  18. data/lib/steam/sockets/steam_socket.rb +2 -1
  19. data/steam-condenser.gemspec +5 -4
  20. data/test/core_ext/test_stringio.rb +59 -0
  21. data/test/fixtures/invalid.xml +2 -0
  22. data/test/fixtures/sonofthor.xml +882 -0
  23. data/test/fixtures/status_goldsrc +3 -0
  24. data/test/fixtures/status_source +3 -0
  25. data/test/fixtures/valve-members.xml +231 -0
  26. data/test/helper.rb +37 -0
  27. data/test/steam/communtiy/test_steam_group.rb +83 -0
  28. data/test/steam/communtiy/test_steam_id.rb +85 -0
  29. data/test/steam/communtiy/test_web_api.rb +98 -0
  30. data/test/steam/servers/test_game_server.rb +308 -0
  31. data/test/steam/servers/test_goldsrc_server.rb +59 -0
  32. data/test/steam/servers/test_master_server.rb +131 -0
  33. data/test/steam/servers/test_server.rb +72 -0
  34. data/test/steam/servers/test_source_server.rb +140 -0
  35. data/test/steam/sockets/test_goldsrc_socket.rb +127 -0
  36. data/test/steam/sockets/test_master_server_socket.rb +41 -0
  37. data/test/steam/sockets/test_rcon_socket.rb +109 -0
  38. data/test/steam/sockets/test_source_socket.rb +77 -0
  39. data/test/steam/sockets/test_steam_socket.rb +97 -0
  40. metadata +94 -34
  41. data/Gemfile.lock +0 -22
  42. data/test/query_tests.rb +0 -70
  43. data/test/rcon_tests.rb +0 -78
  44. data/test/steam/communtiy/steam_community_test_suite.rb +0 -12
  45. data/test/steam/communtiy/steam_group_tests.rb +0 -44
  46. data/test/steam/communtiy/steam_id_tests.rb +0 -49
  47. data/test/steam_community_tests.rb +0 -45
  48. data/test/stringio_additions_tests.rb +0 -77
@@ -0,0 +1,41 @@
1
+ # This code is free software; you can redistribute it and/or modify it under
2
+ # the terms of the new BSD License.
3
+ #
4
+ # Copyright (c) 2011, Sebastian Staudt
5
+
6
+ require 'helper'
7
+ require 'steam/sockets/master_server_socket'
8
+
9
+ class TestMasterServerSocket < Test::Unit::TestCase
10
+
11
+ context 'A master server socket' do
12
+
13
+ setup do
14
+ @socket = MasterServerSocket.new '127.0.0.1'
15
+ end
16
+
17
+ should 'raise an error if the packet header is incorrect' do
18
+ @socket.stubs :receive_packet
19
+ @socket.instance_variable_get(:@buffer).expects(:long).returns 1
20
+
21
+ error = assert_raises PacketFormatError do
22
+ @socket.reply
23
+ end
24
+ assert_equal 'Master query response has wrong packet header.', error.message
25
+ end
26
+
27
+ should 'receive correct packets' do
28
+ @socket.expects(:receive_packet).with 1500
29
+ buffer = @socket.instance_variable_get :@buffer
30
+ buffer.expects(:long).returns 0xFFFFFFFF
31
+ buffer.expects(:get).returns 'test'
32
+
33
+ packet = mock
34
+ SteamPacketFactory.expects(:packet_from_data).with('test').returns packet
35
+
36
+ assert_equal packet, @socket.reply
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,109 @@
1
+ # This code is free software; you can redistribute it and/or modify it under
2
+ # the terms of the new BSD License.
3
+ #
4
+ # Copyright (c) 2011, Sebastian Staudt
5
+
6
+ require 'helper'
7
+ require 'steam/sockets/rcon_socket'
8
+
9
+ class TestRCONSocket < Test::Unit::TestCase
10
+
11
+ context 'A new RCON socket' do
12
+
13
+ should 'know its IP and port, but not open a connection' do
14
+ socket = RCONSocket.new '127.0.0.1', 27015
15
+
16
+ assert_equal IPAddr.new('127.0.0.1'), socket.instance_variable_get(:@ip)
17
+ assert_equal 27015, socket.instance_variable_get(:@port)
18
+ assert_nil socket.instance_variable_get(:@socket)
19
+ end
20
+
21
+ end
22
+
23
+ context 'A disconnected RCON socket' do
24
+
25
+ setup do
26
+ @socket = RCONSocket.new '127.0.0.1', 27015
27
+ end
28
+
29
+ should 'establish the TCP connection when sending' do
30
+ tcp_socket = mock
31
+ tcp_socket.expects(:send).with 'test', 0
32
+ @socket.expects(:connect).with do
33
+ @socket.instance_variable_set :@socket, tcp_socket
34
+ end
35
+
36
+ @socket.send mock(:to_s => 'test')
37
+ end
38
+
39
+ should 're-establish the TCP connection when sending' do
40
+ tcp_socket = mock
41
+ tcp_socket.expects(:closed?).returns true
42
+ tcp_socket.expects(:send).with 'test', 0
43
+ @socket.expects :connect
44
+ @socket.instance_variable_set :@socket, tcp_socket
45
+
46
+ packet = mock
47
+ packet.expects(:to_s).returns 'test'
48
+ @socket.send packet
49
+ end
50
+
51
+ should 'be able to establish the TCP connection' do
52
+ tcp_socket = mock
53
+ TCPSocket.expects(:new).with('127.0.0.1', 27015).
54
+ returns tcp_socket
55
+
56
+ @socket.connect
57
+
58
+ assert_equal tcp_socket, @socket.instance_variable_get(:@socket)
59
+ end
60
+
61
+ should 'raise a timeout if the connection cannot be established' do
62
+ @socket.expects(:timeout).raises Timeout::Error
63
+
64
+ assert_raises SteamCondenser::TimeoutError do
65
+ @socket.connect
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+ context 'A connected RCON socket' do
72
+
73
+ setup do
74
+ @socket = RCONSocket.new '127.0.0.1', 27015
75
+ @tcp_socket = mock
76
+ @socket.instance_variable_set :@socket, @tcp_socket
77
+ end
78
+
79
+ should 'be able to close the TCP connection' do
80
+ @tcp_socket.expects :close
81
+
82
+ @socket.close
83
+ end
84
+
85
+ should 'receive responses using the TCP connection' do
86
+ buffer = mock
87
+ @socket.instance_variable_set :@buffer, buffer
88
+
89
+ buffer.expects(:long).returns 1234
90
+ buffer.expects(:get).twice.returns('test ').returns 'test'
91
+ @socket.expects(:receive_packet).with(4).returns 1
92
+ @socket.expects(:receive_packet).with(1234).returns 1000
93
+ @socket.expects(:receive_packet).with(234).returns 234
94
+ RCONPacketFactory.expects(:packet_from_data).with 'test test'
95
+
96
+ @socket.reply
97
+ end
98
+
99
+ should 'raise an error if the client has been banned' do
100
+ @socket.expects(:receive_packet).with(4).returns 0
101
+
102
+ assert_raises RCONBanError do
103
+ @socket.reply
104
+ end
105
+ end
106
+
107
+ end
108
+
109
+ end
@@ -0,0 +1,77 @@
1
+ # This code is free software; you can redistribute it and/or modify it under
2
+ # the terms of the new BSD License.
3
+ #
4
+ # Copyright (c) 2011, Sebastian Staudt
5
+
6
+ require 'helper'
7
+ require 'steam/sockets/source_socket'
8
+
9
+ class TestSourceSocket < Test::Unit::TestCase
10
+
11
+ context 'A Source socket' do
12
+
13
+ setup do
14
+ @socket = SourceSocket.new '127.0.0.1'
15
+ end
16
+
17
+ should 'be able to receive single packet replies' do
18
+ buffer = mock
19
+ @socket.instance_variable_set :@buffer, buffer
20
+
21
+ @socket.expects(:receive_packet).with 1400
22
+ data = mock
23
+ buffer.expects(:long).returns 0xFFFFFFFF
24
+ buffer.expects(:get).returns data
25
+ packet = mock
26
+ SteamPacketFactory.expects(:packet_from_data).with(data).returns packet
27
+
28
+ assert_equal packet, @socket.reply
29
+ end
30
+
31
+ should 'be able to receive split packet replies' do
32
+ buffer = mock
33
+ @socket.instance_variable_set :@buffer, buffer
34
+
35
+ @socket.expects(:receive_packet).with(1400)
36
+ @socket.expects(:receive_packet).with().returns 1400
37
+
38
+ data1, data2 = mock, mock
39
+ buffer.expects(:long).times(4).returns(0xFFFFFFFE).returns(1234).
40
+ returns(0xFFFFFFFE).returns 1234
41
+ buffer.expects(:byte).times(4).returns(0x02).returns(0x00).returns(0x02).
42
+ returns 0x01
43
+ buffer.expects(:short).twice
44
+ buffer.expects(:get).twice.returns(data1).returns(data2)
45
+
46
+ packet = mock
47
+ SteamPacketFactory.expects(:reassemble_packet).with([data1, data2]).
48
+ returns packet
49
+
50
+ assert_equal packet, @socket.reply
51
+ end
52
+
53
+ should 'be able to receive compressed replies' do
54
+ buffer = mock
55
+ @socket.instance_variable_set :@buffer, buffer
56
+
57
+ @socket.expects(:receive_packet).with(1400)
58
+ @socket.expects(:receive_packet).with().returns 1400
59
+
60
+ data1, data2 = mock, mock
61
+ buffer.expects(:long).times(8).returns(0xFFFFFFFE).returns(2147484882).
62
+ returns(0).returns(1337).returns(0xFFFFFFFE).returns(2147484882).
63
+ returns(0).returns 1337
64
+ buffer.expects(:byte).times(4).returns(0x02).returns(0x00).returns(0x02).
65
+ returns 0x01
66
+ buffer.expects(:get).twice.returns(data1).returns(data2)
67
+
68
+ packet = mock
69
+ SteamPacketFactory.expects(:reassemble_packet).
70
+ with([data1, data2], true, 1337).returns packet
71
+
72
+ assert_equal packet, @socket.reply
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -0,0 +1,97 @@
1
+ # This code is free software; you can redistribute it and/or modify it under
2
+ # the terms of the new BSD License.
3
+ #
4
+ # Copyright (c) 2011, Sebastian Staudt
5
+
6
+ require 'helper'
7
+ require 'steam/sockets/steam_socket'
8
+
9
+ class TestSteamSocket < Test::Unit::TestCase
10
+
11
+ class GenericSteamSocket
12
+ include SteamSocket
13
+ end
14
+
15
+ context 'The user timeout of a socket' do
16
+
17
+ should 'be able to change the timeout of a socket' do
18
+ SteamSocket.timeout = 2000
19
+
20
+ assert_equal 2000, SteamSocket.send(:class_variable_get, :@@timeout)
21
+ end
22
+
23
+ end
24
+
25
+ context 'A new socket' do
26
+
27
+ should 'create and connect an UDP socket' do
28
+ socket = mock
29
+ socket.expects(:connect).with '127.0.0.1', 27015
30
+ UDPSocket.expects(:new).returns socket
31
+
32
+ GenericSteamSocket.new '127.0.0.1'
33
+ end
34
+
35
+ end
36
+
37
+ context 'A socket' do
38
+
39
+ setup do
40
+ @udp_socket = mock
41
+ @udp_socket.stubs(:connect).with '127.0.0.1', 27015
42
+ UDPSocket.stubs(:new).returns @udp_socket
43
+
44
+ @socket = GenericSteamSocket.new '127.0.0.1'
45
+ end
46
+
47
+ should 'close the UDP socket if it is closed' do
48
+ @udp_socket.expects :close
49
+
50
+ @socket.close
51
+ end
52
+
53
+ should 'send packet data using the UDP socket' do
54
+ packet = mock
55
+ packet.expects(:to_s).returns 'test'
56
+ @udp_socket.expects(:send).with 'test', 0
57
+
58
+ @socket.send packet
59
+ end
60
+
61
+ should 'raise a timeout if no reply is received' do
62
+ @socket.expects(:select).with([@udp_socket], nil, nil, 1).returns nil
63
+
64
+ assert_raises SteamCondenser::TimeoutError do
65
+ @socket.receive_packet
66
+ end
67
+ end
68
+
69
+ should 'receive a packet into a new buffer' do
70
+ @socket.expects(:select).with([@udp_socket], nil, nil, 1).returns true
71
+ @udp_socket.expects(:recv).with(4).returns 'test'
72
+
73
+ assert_equal 4, @socket.receive_packet(4)
74
+
75
+ buffer = @socket.instance_variable_get :@buffer
76
+ assert_equal 0, buffer.pos
77
+ assert_equal 4, buffer.size
78
+ assert_equal 'test', buffer.string
79
+ end
80
+
81
+ should 'receive a packet into an existing buffer' do
82
+ @socket.instance_variable_set :@buffer, StringIO.alloc(10)
83
+
84
+ @socket.expects(:select).with([@udp_socket], nil, nil, 1).returns true
85
+ @udp_socket.expects(:recv).with(10).returns 'test'
86
+
87
+ assert_equal 4, @socket.receive_packet
88
+
89
+ buffer = @socket.instance_variable_get :@buffer
90
+ assert_equal 0, buffer.pos
91
+ assert_equal 4, buffer.size
92
+ assert_equal 'test', buffer.string
93
+ end
94
+
95
+ end
96
+
97
+ end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 1.0.2
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sebastian Staudt
@@ -15,10 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-10-24 00:00:00 Z
18
+ date: 2011-12-13 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ name: bzip2-ruby
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
22
24
  none: false
23
25
  requirements:
24
26
  - - ~>
@@ -29,12 +31,12 @@ dependencies:
29
31
  - 2
30
32
  - 7
31
33
  version: 0.2.7
32
- name: bzip2-ruby
33
- prerelease: false
34
34
  type: :runtime
35
- requirement: *id001
35
+ version_requirements: *id001
36
36
  - !ruby/object:Gem::Dependency
37
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
+ name: multi_json
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
38
40
  none: false
39
41
  requirements:
40
42
  - - ~>
@@ -45,12 +47,28 @@ dependencies:
45
47
  - 0
46
48
  - 3
47
49
  version: 1.0.3
48
- name: multi_json
49
- prerelease: false
50
50
  type: :runtime
51
- requirement: *id002
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: mocha
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 55
61
+ segments:
62
+ - 0
63
+ - 10
64
+ - 0
65
+ version: 0.10.0
66
+ type: :development
67
+ version_requirements: *id003
52
68
  - !ruby/object:Gem::Dependency
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
69
+ name: rake
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
54
72
  none: false
55
73
  requirements:
56
74
  - - ~>
@@ -61,12 +79,28 @@ dependencies:
61
79
  - 9
62
80
  - 2
63
81
  version: 0.9.2
64
- name: rake
82
+ type: :development
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: shoulda-context
65
86
  prerelease: false
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ~>
91
+ - !ruby/object:Gem::Version
92
+ hash: 23
93
+ segments:
94
+ - 1
95
+ - 0
96
+ - 0
97
+ version: 1.0.0
66
98
  type: :development
67
- requirement: *id003
99
+ version_requirements: *id005
68
100
  - !ruby/object:Gem::Dependency
69
- version_requirements: &id004 !ruby/object:Gem::Requirement
101
+ name: yard
102
+ prerelease: false
103
+ requirement: &id006 !ruby/object:Gem::Requirement
70
104
  none: false
71
105
  requirements:
72
106
  - - ~>
@@ -77,10 +111,8 @@ dependencies:
77
111
  - 7
78
112
  - 2
79
113
  version: 0.7.2
80
- name: yard
81
- prerelease: false
82
114
  type: :development
83
- requirement: *id004
115
+ version_requirements: *id006
84
116
  description: A multi-language library for querying the Steam Community, Source, GoldSrc servers and Steam master servers
85
117
  email:
86
118
  - koraktor@gmail.com
@@ -92,7 +124,6 @@ extra_rdoc_files: []
92
124
 
93
125
  files:
94
126
  - Gemfile
95
- - Gemfile.lock
96
127
  - lib/core_ext/stringio.rb
97
128
  - lib/errors/packet_format_error.rb
98
129
  - lib/errors/rcon_ban_error.rb
@@ -116,6 +147,8 @@ files:
116
147
  - lib/steam/community/game_class.rb
117
148
  - lib/steam/community/game_inventory.rb
118
149
  - lib/steam/community/game_item.rb
150
+ - lib/steam/community/game_leaderboard.rb
151
+ - lib/steam/community/game_leaderboard_entry.rb
119
152
  - lib/steam/community/game_stats.rb
120
153
  - lib/steam/community/game_weapon.rb
121
154
  - lib/steam/community/l4d/abstract_l4d_stats.rb
@@ -133,6 +166,7 @@ files:
133
166
  - lib/steam/community/steam_game.rb
134
167
  - lib/steam/community/steam_group.rb
135
168
  - lib/steam/community/steam_id.rb
169
+ - lib/steam/community/tf2/tf2_beta_inventory.rb
136
170
  - lib/steam/community/tf2/tf2_class.rb
137
171
  - lib/steam/community/tf2/tf2_class_factory.rb
138
172
  - lib/steam/community/tf2/tf2_engineer.rb
@@ -192,13 +226,26 @@ files:
192
226
  - Rakefile
193
227
  - README.md
194
228
  - steam-condenser.gemspec
195
- - test/query_tests.rb
196
- - test/rcon_tests.rb
197
- - test/steam/communtiy/steam_community_test_suite.rb
198
- - test/steam/communtiy/steam_group_tests.rb
199
- - test/steam/communtiy/steam_id_tests.rb
200
- - test/steam_community_tests.rb
201
- - test/stringio_additions_tests.rb
229
+ - test/core_ext/test_stringio.rb
230
+ - test/fixtures/invalid.xml
231
+ - test/fixtures/sonofthor.xml
232
+ - test/fixtures/status_goldsrc
233
+ - test/fixtures/status_source
234
+ - test/fixtures/valve-members.xml
235
+ - test/helper.rb
236
+ - test/steam/communtiy/test_steam_group.rb
237
+ - test/steam/communtiy/test_steam_id.rb
238
+ - test/steam/communtiy/test_web_api.rb
239
+ - test/steam/servers/test_game_server.rb
240
+ - test/steam/servers/test_goldsrc_server.rb
241
+ - test/steam/servers/test_master_server.rb
242
+ - test/steam/servers/test_server.rb
243
+ - test/steam/servers/test_source_server.rb
244
+ - test/steam/sockets/test_goldsrc_socket.rb
245
+ - test/steam/sockets/test_master_server_socket.rb
246
+ - test/steam/sockets/test_rcon_socket.rb
247
+ - test/steam/sockets/test_source_socket.rb
248
+ - test/steam/sockets/test_steam_socket.rb
202
249
  homepage: http://koraktor.de/steam-condenser
203
250
  licenses: []
204
251
 
@@ -228,15 +275,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
275
  requirements: []
229
276
 
230
277
  rubyforge_project:
231
- rubygems_version: 1.8.11
278
+ rubygems_version: 1.8.12
232
279
  signing_key:
233
280
  specification_version: 3
234
281
  summary: Steam Condenser - A Steam query library
235
282
  test_files:
236
- - test/query_tests.rb
237
- - test/rcon_tests.rb
238
- - test/steam/communtiy/steam_community_test_suite.rb
239
- - test/steam/communtiy/steam_group_tests.rb
240
- - test/steam/communtiy/steam_id_tests.rb
241
- - test/steam_community_tests.rb
242
- - test/stringio_additions_tests.rb
283
+ - test/core_ext/test_stringio.rb
284
+ - test/fixtures/invalid.xml
285
+ - test/fixtures/sonofthor.xml
286
+ - test/fixtures/status_goldsrc
287
+ - test/fixtures/status_source
288
+ - test/fixtures/valve-members.xml
289
+ - test/helper.rb
290
+ - test/steam/communtiy/test_steam_group.rb
291
+ - test/steam/communtiy/test_steam_id.rb
292
+ - test/steam/communtiy/test_web_api.rb
293
+ - test/steam/servers/test_game_server.rb
294
+ - test/steam/servers/test_goldsrc_server.rb
295
+ - test/steam/servers/test_master_server.rb
296
+ - test/steam/servers/test_server.rb
297
+ - test/steam/servers/test_source_server.rb
298
+ - test/steam/sockets/test_goldsrc_socket.rb
299
+ - test/steam/sockets/test_master_server_socket.rb
300
+ - test/steam/sockets/test_rcon_socket.rb
301
+ - test/steam/sockets/test_source_socket.rb
302
+ - test/steam/sockets/test_steam_socket.rb