gamespy_query 0.1.5 → 0.2.0pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
1
  module GamespyQuery
2
- VERSION = "0.1.5"
2
+ # Version of the library
3
+ VERSION = "0.2.0pre"
3
4
  end
data/test/teststrap.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+ require 'gamespy_query'
3
+ require 'riot'
4
+ require 'riot/rr'
@@ -0,0 +1,43 @@
1
+ require 'teststrap'
2
+
3
+ context "Base" do
4
+ setup { GamespyQuery::Base.new }
5
+
6
+ end
7
+
8
+ context "Funcs" do
9
+ setup { GamespyQuery::Funcs }
10
+
11
+ denies("TimeOutError") { topic::TimeOutError.new }.nil
12
+
13
+ # TODO: Or should we simply test the Base class who includes this already?
14
+ context "Included" do
15
+ setup { Class.new { include GamespyQuery::Funcs } }
16
+
17
+ context "Instance" do
18
+ setup { topic.new }
19
+ # TODO: This method doesnt do anything atm
20
+ asserts("strip_tags") { topic.strip_tags "test" }.equals "test"
21
+
22
+ asserts("clean integer") { topic.clean "1" }.equals 1
23
+ asserts("clean float") { topic.clean "1.5" }.equals 1.5
24
+
25
+ asserts("encode_string") { topic.encode_string("test encoding").encoding }.equals Encoding.find("UTF-8")
26
+
27
+ asserts("handle_chr") { topic.handle_chr(25 >> 8) }.equals 0
28
+
29
+ end
30
+ end
31
+ end
32
+
33
+ context "Tools" do
34
+ setup { GamespyQuery::Tools }
35
+
36
+ denies("Logger") { topic.logger }.nil
37
+
38
+ # TODO: Somehow returns strange string with unescaped double quotes embedded
39
+ asserts("dbg_msg") { topic.dbg_msg Exception.new }.equals "Exception: Exception\nBackTrace: \n"
40
+
41
+ asserts("log_exception") { topic.log_exception Exception.new }.equals true
42
+ asserts("debug") { topic.debug{"test"} }.nil
43
+ end
@@ -0,0 +1,17 @@
1
+ require 'teststrap'
2
+
3
+ context "Master" do
4
+ setup { GamespyQuery::Master.new }
5
+
6
+ asserts("geoip_path") { topic.geoip_path }.equals File.join(Dir.pwd, "config")
7
+
8
+ asserts("read returns a hash") { topic.read }.is_a?(Hash)
9
+
10
+ asserts("process returns a hash") { topic.process }.is_a?(Hash)
11
+
12
+ asserts("get_params returns a string") { topic.get_params }.is_a?(String)
13
+
14
+ asserts("handle_data") { topic.handle_data "127.0.0.1:2302\n127.0.0.1:2305" }.same_elements ["127.0.0.1:2302", "127.0.0.1:2305"]
15
+
16
+ asserts("to_hash") { topic.handle_data "127.0.0.1:2302\n127.0.0.1:2305" }.is_a?(Hash)
17
+ end
@@ -0,0 +1,27 @@
1
+ require 'teststrap'
2
+ require 'ostruct'
3
+
4
+ context "Options" do
5
+ context "Parser" do
6
+ setup { GamespyQuery::Options }
7
+
8
+ asserts("Default Params") { topic.parse([]) }.raises SystemExit
9
+
10
+ asserts("version") { topic.parse(["--version"]) }.raises SystemExit #.equals 0
11
+ asserts("help") { topic.parse(["--help"]) }.raises SystemExit #.equals 0
12
+ #asserts("no-verbose") { topic.parse([]).options.verbose? }.equals false
13
+ asserts("verbose") { topic.parse(["-v"]) }.raises SystemExit
14
+
15
+ context "Commands" do
16
+ asserts("sync") { topic.parse(["sync", "127.0.0.1:2302"]) }.nil
17
+ end
18
+
19
+ context "Master" do
20
+ context "Commands" do
21
+ asserts("list") { any_instance_of(GamespyQuery::Master) { |c| mock(c).read { "Test data" } }; topic.parse(["master", "list"]) }.nil
22
+ asserts("process") { any_instance_of(GamespyQuery::Master) { |c| mock(c).process { "Test data" } }; topic.parse(["master", "process"]) }.nil
23
+ asserts("process_master") { mock(GamespyQuery::SocketMaster).process_master("arma2oapc", "") { "Test data" }; topic.parse(["master", "process_master"]) }.nil
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,47 @@
1
+ require 'teststrap'
2
+
3
+ context "Parser" do
4
+ DEFAULT_DATA = [
5
+ "\x00\x04\x05\x06\asplitnum\x00\x00\x00gamever\x001.59.79548\x00hostname\x00-=WASP=- Warfare CO (Prime)\x00mapname\x00takistan\x00gametype\x00CTI\x00numplayers\x0046\x00numteams\x000\x00maxplayers\x0054\x00gamemode\x00openplaying\x00timelimit\x0015\x00password\x000\x00param1\x000\x00param2\x000\x00currentVersion\x00159\x00requiredVersion\x00159\x00mod\x00Arma 2;Arma 2: Operation Arrowhead;Arma 2: British Armed Forces (Lite);Arma 2: Private Military Company (Lite)\x00equalModRequired\x000\x00gameState\x007\x00dedicated\x001\x00platform\x00linux\x00language\x0065545\x00difficulty\x002\x00mission\x00[54] Warfare BE V2.069 - Takistan\x00gamename\x00arma2oapc\x00sv_battleye\x001\x00verifySignatures\x001\x00signatures\x00bi;WarFXPE;GLT_ADDONS;warFXsunlight;TGW_Zeroing;trsm_oa;soa110;SMK;jsrsfa;v2ECL;CBA_v0-7-3;ZEU_test;TRSM;TracersWAR;bi2;VopSound;cba_b158;acex_sm;WarFXLighting;gdtmod_plants2;TGW_Thermal;cba_b151;ASR;...\x00modhash\x00PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;\x00hash\x00f8c806b971abb935747da3900cab55599c0bc60c\x00\x00\x01player_\x00\x00Skilllos\x00Cool Hand\x00Viktor Reznov\x00Alchemist(HUN)\x00General Heinkel [GER]\x00Max\x00\xD0\x94\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB3\xD0\xBE\x00letchik\x00Angerbode\x00TiDus\x00DrHat\x00Kermit\x00[UaS] snicka\x00Wedel\x00Dnalir [NOR]\x00Davor\x00Cateye(GER)\x00Bamse\x00Jorj\x00POMbI4\x00Daredevil\x00DrSMOKE\x00Vollpfosten\x00Maddin\x00-=[LRRP]=-Sentinel(NL)\x00Husky\x00Scumhawk\x00Bone-CH\x00Jarzah\x00I./KG40_Razor\x00Cpl.Bouiss\x00nAh\x00Tremor\x00Diamm\x00TUROCK_(FR-VODKA)\x00j.moss\x00FOKS\x00Phoenix\x00AfterShave\x00Coupe\x00Mitradis\x00Daniel\x00Flanker\x00Sig\x00_DPVf_hinkel\x00Random Sequence\x00\x00team_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ru\x00SO\x00\x00\x00\x00\x00\x00\x00\x00TF\x00\x00\x00\x00UTGPrivates\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00score_\x00\x00",
6
+ "\x00\x04\x05\x06\asplitnum\x00\x81\x01score_\x00\x00371\x00314\x00335\x0038\x00224\x0036\x0096\x0083\x0042\x00237\x0037\x00137\x00212\x0082\x0041\x0042\x0035\x0073\x0094\x0028\x00127\x0045\x00107\x0030\x00-2\x0083\x002\x0026\x0023\x0034\x0010\x0056\x0016\x006\x0036\x001\x000\x001\x000\x003\x000\x002\x001\x000\x0020\x000\x00\x00deaths_\x00\x0024\x0017\x0018\x0015\x0028\x0025\x0027\x0029\x007\x0010\x008\x0011\x008\x0011\x0016\x0015\x0016\x006\x0010\x0023\x0038\x003\x0017\x003\x002\x007\x002\x001\x004\x0014\x002\x004\x002\x000\x0019\x005\x001\x004\x004\x000\x003\x002\x000\x000\x008\x000\x00\x00\x00\x02\x00"
7
+ ]
8
+ setup { GamespyQuery::Parser.new(DEFAULT_DATA) }
9
+
10
+ asserts("Packets assigned") { topic.packets }.same_elements DEFAULT_DATA
11
+
12
+ context "Parsed Output" do
13
+ setup { topic.parse }
14
+
15
+ context "Game Data" do
16
+ setup { topic[:game] }
17
+ denies("Game data") { topic }.empty
18
+
19
+ asserts("gamever") { topic["gamever"] }.equals "1.59.79548"
20
+ asserts("sv_battleye") { topic["sv_battleye"] }.equals "1"
21
+ end
22
+
23
+ context "Players data" do
24
+ setup { topic[:players] }
25
+ denies("Players data") { topic }.empty
26
+
27
+ denies("Names") { topic[:names] }.empty
28
+ denies("Teams") { topic[:teams] }.empty
29
+ denies("Scores") { topic[:scores] }.empty
30
+ denies("Deaths") { topic[:deaths] }.empty
31
+
32
+ context "First element" do
33
+ asserts("Name") { topic[:names][0] }.equals "Skilllos"
34
+ asserts("Team") { topic[:teams][0] }.equals ""
35
+ asserts("Score") { topic[:scores][0] }.equals 371
36
+ asserts("Deaths") { topic[:deaths][0] }.equals 24
37
+ end
38
+
39
+ context "Tenth element" do
40
+ asserts("Name") { topic[:names][10] }.equals "DrHat"
41
+ asserts("Team") { topic[:teams][10] }.equals ""
42
+ asserts("Score") { topic[:scores][10] }.equals 37
43
+ asserts("Deaths") { topic[:deaths][10] }.equals 8
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,17 @@
1
+ require 'teststrap'
2
+
3
+ context "SocketMaster" do
4
+ DEFAULT_ADDRS = [
5
+ "127.0.0.1:2302",
6
+ "127.0.0.1:2306"
7
+ ]
8
+ setup { GamespyQuery::SocketMaster }
9
+
10
+ context "Instance" do
11
+ setup { topic.new DEFAULT_ADDRS }
12
+ asserts("Process") { topic.process! }.size 2
13
+ end
14
+
15
+
16
+ asserts("Process master") { topic.process_master }.is_a?(Array)
17
+ end
@@ -0,0 +1,73 @@
1
+ require 'teststrap'
2
+
3
+ context "Socket" do
4
+ DEFAULT_DATA = [
5
+ "\x00\x04\x05\x06\asplitnum\x00\x00\x00gamever\x001.59.79548\x00hostname\x00-=WASP=- Warfare CO (Prime)\x00mapname\x00takistan\x00gametype\x00CTI\x00numplayers\x0046\x00numteams\x000\x00maxplayers\x0054\x00gamemode\x00openplaying\x00timelimit\x0015\x00password\x000\x00param1\x000\x00param2\x000\x00currentVersion\x00159\x00requiredVersion\x00159\x00mod\x00Arma 2;Arma 2: Operation Arrowhead;Arma 2: British Armed Forces (Lite);Arma 2: Private Military Company (Lite)\x00equalModRequired\x000\x00gameState\x007\x00dedicated\x001\x00platform\x00linux\x00language\x0065545\x00difficulty\x002\x00mission\x00[54] Warfare BE V2.069 - Takistan\x00gamename\x00arma2oapc\x00sv_battleye\x001\x00verifySignatures\x001\x00signatures\x00bi;WarFXPE;GLT_ADDONS;warFXsunlight;TGW_Zeroing;trsm_oa;soa110;SMK;jsrsfa;v2ECL;CBA_v0-7-3;ZEU_test;TRSM;TracersWAR;bi2;VopSound;cba_b158;acex_sm;WarFXLighting;gdtmod_plants2;TGW_Thermal;cba_b151;ASR;...\x00modhash\x00PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;\x00hash\x00f8c806b971abb935747da3900cab55599c0bc60c\x00\x00\x01player_\x00\x00Skilllos\x00Cool Hand\x00Viktor Reznov\x00Alchemist(HUN)\x00General Heinkel [GER]\x00Max\x00\xD0\x94\xD1\x80\xD0\xBE\xD0\xBD\xD0\xB3\xD0\xBE\x00letchik\x00Angerbode\x00TiDus\x00DrHat\x00Kermit\x00[UaS] snicka\x00Wedel\x00Dnalir [NOR]\x00Davor\x00Cateye(GER)\x00Bamse\x00Jorj\x00POMbI4\x00Daredevil\x00DrSMOKE\x00Vollpfosten\x00Maddin\x00-=[LRRP]=-Sentinel(NL)\x00Husky\x00Scumhawk\x00Bone-CH\x00Jarzah\x00I./KG40_Razor\x00Cpl.Bouiss\x00nAh\x00Tremor\x00Diamm\x00TUROCK_(FR-VODKA)\x00j.moss\x00FOKS\x00Phoenix\x00AfterShave\x00Coupe\x00Mitradis\x00Daniel\x00Flanker\x00Sig\x00_DPVf_hinkel\x00Random Sequence\x00\x00team_\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Ru\x00SO\x00\x00\x00\x00\x00\x00\x00\x00TF\x00\x00\x00\x00UTGPrivates\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00score_\x00\x00",
6
+ "\x00\x04\x05\x06\asplitnum\x00\x81\x01score_\x00\x00371\x00314\x00335\x0038\x00224\x0036\x0096\x0083\x0042\x00237\x0037\x00137\x00212\x0082\x0041\x0042\x0035\x0073\x0094\x0028\x00127\x0045\x00107\x0030\x00-2\x0083\x002\x0026\x0023\x0034\x0010\x0056\x0016\x006\x0036\x001\x000\x001\x000\x003\x000\x002\x001\x000\x0020\x000\x00\x00deaths_\x00\x0024\x0017\x0018\x0015\x0028\x0025\x0027\x0029\x007\x0010\x008\x0011\x008\x0011\x0016\x0015\x0016\x006\x0010\x0023\x0038\x003\x0017\x003\x002\x007\x002\x001\x004\x0014\x002\x004\x002\x000\x0019\x005\x001\x004\x004\x000\x003\x002\x000\x000\x008\x000\x00\x00\x00\x02\x00"
7
+ ]
8
+
9
+ setup { GamespyQuery::Socket.new "127.0.0.1:2302" }
10
+
11
+ denies("Confirm valid") { topic.valid? }
12
+
13
+ asserts("handle_write") { topic.state = 0; topic.handle_write }.nil
14
+ asserts("handle_read") { topic.state = 1; topic.handle_read }.nil
15
+ asserts("handle_write") { topic.state = 2; topic.handle_write }.nil
16
+ asserts("handle_read") { topic.state = 3; topic.handle_read }.nil
17
+ asserts("handle_read") { topic.state = 4; topic.handle_read }.nil
18
+ asserts("Set state 5, confirm valid") { topic.state = 5; topic.valid? }
19
+
20
+ denies("handle_write") { topic.state = 1; topic.handle_write }
21
+ denies("handle_read") { topic.state = 0; topic.handle_read }
22
+
23
+
24
+ # TODO
25
+ #asserts("handle_exc") { topic.handle_exc }
26
+
27
+ asserts("handle_splitnum") { topic.handle_splitnum "" }
28
+ asserts("handle_challenge") { topic.handle_challenge "" }
29
+ asserts("handle_state (Write)") { topic.state = 0; topic.handle_state }
30
+ denies("handle_state (Read)") { topic.state = 1; topic.handle_state }
31
+
32
+ asserts("fetch") { topic.fetch }.nil
33
+
34
+ asserts("sync") { topic.sync }
35
+
36
+ context "Sync custom" do
37
+ setup { topic.sync(DEFAULT_DATA) }
38
+ asserts("Is a hash") { topic }.is_a?(Hash)
39
+
40
+ context "Players" do
41
+ setup { topic["players"] }
42
+ asserts("Players defined") { topic }.is_a?(Hash)
43
+
44
+ context "Player 0" do
45
+ setup { topic[0] }
46
+
47
+ asserts("name") { topic[:name] }.equals "-=[LRRP]=-Sentinel(NL)"
48
+ asserts("team") { topic[:team] }.equals ""
49
+ asserts("score") { topic[:score] }.equals -2
50
+ asserts("deaths") { topic[:deaths] }.equals 2
51
+ end
52
+
53
+ context "Player 10" do
54
+ setup { topic[10] }
55
+
56
+ asserts("name") { topic[:name] }.equals "Coupe"
57
+ asserts("team") { topic[:team] }.equals ""
58
+ asserts("score") { topic[:score] }.equals 3
59
+ asserts("deaths") { topic[:deaths] }.equals 0
60
+ end
61
+
62
+ end
63
+ asserts("Hostname defined") { topic["hostname"] }.is_a?(String)
64
+ asserts("Hostname") { topic["hostname"] }.equals "-=WASP=- Warfare CO (Prime)"
65
+ asserts("Modhash") { topic["modhash"] }.equals "PMC v. 1.01;BAF v. 1.02;da39a3ee5e6b4b0d3255bfef95601890afd80709;"
66
+ end
67
+
68
+ # TODO
69
+ context "MultiSocket" do
70
+ setup { GamespyQuery::MultiSocket }
71
+
72
+ end
73
+ end
metadata CHANGED
@@ -1,20 +1,54 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gamespy_query
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
5
- prerelease:
4
+ version: 0.2.0pre
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Patrick Roza
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-24 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-03-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: cri
16
+ requirement: &7261020 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *7261020
25
+ - !ruby/object:Gem::Dependency
26
+ name: riot
27
+ requirement: &7260060 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *7260060
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: &7259340 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *7259340
14
47
  description: ''
15
48
  email:
16
49
  - sb@dev-heaven.net
17
- executables: []
50
+ executables:
51
+ - gamespy_query
18
52
  extensions: []
19
53
  extra_rdoc_files: []
20
54
  files:
@@ -22,14 +56,23 @@ files:
22
56
  - Gemfile
23
57
  - README.md
24
58
  - Rakefile
59
+ - bin/gamespy_query
25
60
  - gamespy_query.gemspec
26
61
  - lib/gamespy_query.rb
27
62
  - lib/gamespy_query/base.rb
28
63
  - lib/gamespy_query/master.rb
64
+ - lib/gamespy_query/options.rb
29
65
  - lib/gamespy_query/parser.rb
30
66
  - lib/gamespy_query/socket.rb
31
67
  - lib/gamespy_query/socket_master.rb
32
68
  - lib/gamespy_query/version.rb
69
+ - test/teststrap.rb
70
+ - test/units/base_test.rb
71
+ - test/units/master_test.rb
72
+ - test/units/options_test.rb
73
+ - test/units/parser_test.rb
74
+ - test/units/socket_master_test.rb
75
+ - test/units/socket_test.rb
33
76
  homepage: http://dev-heaven.net
34
77
  licenses: []
35
78
  post_install_message:
@@ -45,9 +88,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
45
88
  required_rubygems_version: !ruby/object:Gem::Requirement
46
89
  none: false
47
90
  requirements:
48
- - - ! '>='
91
+ - - ! '>'
49
92
  - !ruby/object:Gem::Version
50
- version: '0'
93
+ version: 1.3.1
51
94
  requirements: []
52
95
  rubyforge_project: gamespy_query
53
96
  rubygems_version: 1.8.15
@@ -55,3 +98,4 @@ signing_key:
55
98
  specification_version: 3
56
99
  summary: Ruby library for accessing Gamespy services
57
100
  test_files: []
101
+ has_rdoc: