steam-condenser 1.0.2 → 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.
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