gamespy_query 0.1.5 → 0.2.0pre

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.
@@ -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: