visionmedia-swarm 0.0.1

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.
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format specdoc
@@ -0,0 +1,14 @@
1
+
2
+ $:.unshift File.dirname(__FILE__) + '/../lib'
3
+ ENV['RACK_ENV'] = 'testing'
4
+
5
+ require 'rubygems'
6
+ require 'swarm'
7
+ require 'rack/test'
8
+
9
+ DataMapper.setup :default, 'sqlite3::memory:'
10
+ DataMapper.auto_migrate!
11
+
12
+ Spec::Runner.configure do |conf|
13
+ conf.include Rack::Test::Methods
14
+ end
@@ -0,0 +1,142 @@
1
+
2
+ require File.dirname(__FILE__) + '/spec_helper'
3
+ require 'stringio'
4
+
5
+ describe Swarm do
6
+ def app
7
+ Swarm
8
+ end
9
+
10
+ before :each do
11
+ DataMapper.auto_migrate!
12
+ end
13
+
14
+ describe "routes" do
15
+ before :each do
16
+ $stderr = StringIO.new
17
+ @chrome = 'Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.2 Safari/532.0'
18
+ end
19
+
20
+ def last_response_should_be_invalid_as_json
21
+ last_response.should be_ok
22
+ last_response['Content-Type'].should == 'application/json'
23
+ last_response.body.should include('"status":0')
24
+ end
25
+
26
+ describe "POST /job" do
27
+ it "should create a job and respond with it's JSON" do
28
+ post '/job', { :source => 'stuff here' }, 'REMOTE_ADDR' => '127.0.0.1'
29
+ last_response['Content-Type'].should == 'application/json'
30
+ last_response.body.should include(%("id":#{Job.last.id}))
31
+ end
32
+
33
+ it "should respond with invalid json response when :source is not present" do
34
+ post '/job', {}, 'REMOTE_ADDR' => '127.0.0.1', 'ACCEPT' => 'application/json'
35
+ last_response_should_be_invalid_as_json
36
+ last_response.body.should include(':source required')
37
+ end
38
+ end
39
+
40
+ describe "PUT /job/:id" do
41
+ before :each do
42
+ @agent = Agent.create :address => '127.0.0.1', :string => @chrome, :busy => true
43
+ @job = Job.create :address => '127.0.0.1', :source => 'foo', :active => true
44
+ put "/job/#{@job.id}", { :passes => 10 }, 'REMOTE_ADDR' => '127.0.0.1', 'HTTP_USER_AGENT' => @chrome
45
+ @agent.reload
46
+ @job.reload
47
+ end
48
+
49
+ it "should update a job with params as the result" do
50
+ last_response.should be_ok
51
+ @job.results.should == [{ 'passes' => '10', 'id' => @job.id }]
52
+ end
53
+
54
+ it "should add the job update to the current agent" do
55
+ @agent.jobs.should == [@job]
56
+ end
57
+
58
+ it "should mark the agent as being no longer busy" do
59
+ @agent.should_not be_busy
60
+ end
61
+ end
62
+
63
+ describe "GET /public/*" do
64
+ it "should transfer the file" do
65
+ get '/public/jquery.js'
66
+ last_response.should be_ok
67
+ last_response['Content-Type'].should == 'application/javascript'
68
+ end
69
+ end
70
+
71
+ describe "GET /job/:id.json" do
72
+ it "should return a job's JSON" do
73
+ job = Job.create :address => '127.0.0.1', :source => 'foo', :active => true
74
+ get "/job/#{job.id}.json"
75
+ last_response.should be_ok
76
+ last_response['Content-Type'].should == 'application/json'
77
+ last_response.body.should include(%("id":#{job.id}))
78
+ end
79
+
80
+ it "should respond with invalid json response when job present" do
81
+ get '/job/999.json', {}, 'ACCEPT' => 'application/json'
82
+ last_response_should_be_invalid_as_json
83
+ end
84
+ end
85
+
86
+ describe "GET /job" do
87
+ it "should find an active job for the current agent, responding with its JSON" do
88
+ agent = Agent.create :address => '127.0.0.1', :string => @chrome
89
+ job = Job.create :address => '127.0.0.1', :source => 'foo', :active => true
90
+ get '/job', {}, 'HTTP_USER_AGENT' => @chrome, 'REMOTE_ADDR' => '127.0.0.1'
91
+ last_response.should be_ok
92
+ last_response['Content-Type'].should == 'application/json'
93
+ last_response.body.should include('"id":1')
94
+ agent.jobs.should == [job]
95
+ agent.should be_busy
96
+ end
97
+
98
+ it "should respond with invalid json response when no active job is found" do
99
+ Job.all.destroy
100
+ get '/job', {}, 'ACCEPT' => 'application/json'
101
+ last_response_should_be_invalid_as_json
102
+ end
103
+ end
104
+
105
+ describe "GET /bind" do
106
+ it "should create an Agent" do
107
+ get '/bind', {}, 'HTTP_USER_AGENT' => @chrome, 'REMOTE_ADDR' => '127.0.0.1'
108
+ last_response.should be_ok
109
+ Agent.first.name.should == :Chrome
110
+ end
111
+
112
+ it "should tranfser swarm.html" do
113
+ get '/bind', {}, 'HTTP_USER_AGENT' => @chrome, 'REMOTE_ADDR' => '127.0.0.1'
114
+ last_response.should be_ok
115
+ last_response.body.should include('<html')
116
+ end
117
+
118
+ it "should respond with 404 when the agent is not created" do
119
+ get '/bind'
120
+ last_response.should_not be_ok
121
+ last_response.body.should include('invalid user agent')
122
+ end
123
+ end
124
+ end
125
+
126
+ describe ".agents_for" do
127
+ before :each do
128
+ @safari = Agent.create :string => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en) AppleWebKit/526.9 (KHTML, like Gecko) Version/4.0dp1 Safari/526.8', :address => '127.0.0.1'
129
+ @chrome = Agent.create :string => 'Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US) AppleWebKit/532.0 (KHTML, like Gecko) Chrome/4.0.202.2 Safari/532.0', :address => '127.0.0.1'
130
+ end
131
+
132
+ it "should return unique agents related to the browser names passed" do
133
+ Swarm.agents_for(:Safari).should == [@safari]
134
+ Swarm.agents_for(:Safari, :Chrome).should == [@safari, @chrome]
135
+ end
136
+
137
+ it "should allow lowercase" do
138
+ Swarm.agents_for('safari').should == [@safari]
139
+ Swarm.agents_for('safari', 'chrome').should == [@safari, @chrome]
140
+ end
141
+ end
142
+ end
data/swarm.gemspec ADDED
@@ -0,0 +1,47 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{swarm}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["TJ Holowaychuk"]
9
+ s.date = %q{2009-09-20}
10
+ s.default_executable = %q{swarm}
11
+ s.description = %q{Ruby TestSwarm implementation}
12
+ s.email = %q{tj@vision-media.ca}
13
+ s.executables = ["swarm"]
14
+ s.extra_rdoc_files = ["bin/swarm", "lib/public/images/chrome.png", "lib/public/images/chrome.sm.png", "lib/public/images/gecko.png", "lib/public/images/gecko.sm.png", "lib/public/images/konqueror.png", "lib/public/images/konqueror.sm.png", "lib/public/images/msie.png", "lib/public/images/msie.sm.png", "lib/public/images/presto.png", "lib/public/images/presto.sm.png", "lib/public/images/webkit.png", "lib/public/images/webkit.sm.png", "lib/public/jquery.js", "lib/public/jquery.rest.js", "lib/public/jquery.smart-poll.js", "lib/public/safe.js", "lib/public/swarm.css", "lib/public/swarm.html", "lib/public/swarm.js", "lib/swarm.rb", "lib/swarm/agent.rb", "lib/swarm/job.rb", "lib/swarm/swarm.rb"]
15
+ s.files = ["History.md", "Rakefile", "Readme.md", "bin/swarm", "jspec/server.rb", "jspec/spec.dom.html", "jspec/spec.rhino.js", "jspec/spec.safe.js", "jspec/spec.server.html", "jspec/spec.swarm.js", "lib/public/images/chrome.png", "lib/public/images/chrome.sm.png", "lib/public/images/gecko.png", "lib/public/images/gecko.sm.png", "lib/public/images/konqueror.png", "lib/public/images/konqueror.sm.png", "lib/public/images/msie.png", "lib/public/images/msie.sm.png", "lib/public/images/presto.png", "lib/public/images/presto.sm.png", "lib/public/images/webkit.png", "lib/public/images/webkit.sm.png", "lib/public/jquery.js", "lib/public/jquery.rest.js", "lib/public/jquery.smart-poll.js", "lib/public/safe.js", "lib/public/swarm.css", "lib/public/swarm.html", "lib/public/swarm.js", "lib/swarm.rb", "lib/swarm/agent.rb", "lib/swarm/job.rb", "lib/swarm/swarm.rb", "spec/agent_spec.rb", "spec/job_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "spec/swarm_spec.rb", "Manifest", "swarm.gemspec"]
16
+ s.homepage = %q{}
17
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Swarm", "--main", "Readme.md"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{swarm}
20
+ s.rubygems_version = %q{1.3.5}
21
+ s.summary = %q{Ruby TestSwarm implementation}
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 3
26
+
27
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
+ s.add_runtime_dependency(%q<json>, [">= 0"])
29
+ s.add_runtime_dependency(%q<sinatra>, [">= 0.9.4"])
30
+ s.add_runtime_dependency(%q<dm-core>, [">= 0.10.0"])
31
+ s.add_runtime_dependency(%q<dm-validations>, [">= 0.10.0"])
32
+ s.add_runtime_dependency(%q<visionmedia-user-agent>, [">= 0"])
33
+ else
34
+ s.add_dependency(%q<json>, [">= 0"])
35
+ s.add_dependency(%q<sinatra>, [">= 0.9.4"])
36
+ s.add_dependency(%q<dm-core>, [">= 0.10.0"])
37
+ s.add_dependency(%q<dm-validations>, [">= 0.10.0"])
38
+ s.add_dependency(%q<visionmedia-user-agent>, [">= 0"])
39
+ end
40
+ else
41
+ s.add_dependency(%q<json>, [">= 0"])
42
+ s.add_dependency(%q<sinatra>, [">= 0.9.4"])
43
+ s.add_dependency(%q<dm-core>, [">= 0.10.0"])
44
+ s.add_dependency(%q<dm-validations>, [">= 0.10.0"])
45
+ s.add_dependency(%q<visionmedia-user-agent>, [">= 0"])
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: visionmedia-swarm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - TJ Holowaychuk
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-20 00:00:00 -07:00
13
+ default_executable: swarm
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: sinatra
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.9.4
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: dm-core
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.10.0
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: dm-validations
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.10.0
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: visionmedia-user-agent
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ description: Ruby TestSwarm implementation
66
+ email: tj@vision-media.ca
67
+ executables:
68
+ - swarm
69
+ extensions: []
70
+
71
+ extra_rdoc_files:
72
+ - bin/swarm
73
+ - lib/public/images/chrome.png
74
+ - lib/public/images/chrome.sm.png
75
+ - lib/public/images/gecko.png
76
+ - lib/public/images/gecko.sm.png
77
+ - lib/public/images/konqueror.png
78
+ - lib/public/images/konqueror.sm.png
79
+ - lib/public/images/msie.png
80
+ - lib/public/images/msie.sm.png
81
+ - lib/public/images/presto.png
82
+ - lib/public/images/presto.sm.png
83
+ - lib/public/images/webkit.png
84
+ - lib/public/images/webkit.sm.png
85
+ - lib/public/jquery.js
86
+ - lib/public/jquery.rest.js
87
+ - lib/public/jquery.smart-poll.js
88
+ - lib/public/safe.js
89
+ - lib/public/swarm.css
90
+ - lib/public/swarm.html
91
+ - lib/public/swarm.js
92
+ - lib/swarm.rb
93
+ - lib/swarm/agent.rb
94
+ - lib/swarm/job.rb
95
+ - lib/swarm/swarm.rb
96
+ files:
97
+ - History.md
98
+ - Rakefile
99
+ - Readme.md
100
+ - bin/swarm
101
+ - jspec/server.rb
102
+ - jspec/spec.dom.html
103
+ - jspec/spec.rhino.js
104
+ - jspec/spec.safe.js
105
+ - jspec/spec.server.html
106
+ - jspec/spec.swarm.js
107
+ - lib/public/images/chrome.png
108
+ - lib/public/images/chrome.sm.png
109
+ - lib/public/images/gecko.png
110
+ - lib/public/images/gecko.sm.png
111
+ - lib/public/images/konqueror.png
112
+ - lib/public/images/konqueror.sm.png
113
+ - lib/public/images/msie.png
114
+ - lib/public/images/msie.sm.png
115
+ - lib/public/images/presto.png
116
+ - lib/public/images/presto.sm.png
117
+ - lib/public/images/webkit.png
118
+ - lib/public/images/webkit.sm.png
119
+ - lib/public/jquery.js
120
+ - lib/public/jquery.rest.js
121
+ - lib/public/jquery.smart-poll.js
122
+ - lib/public/safe.js
123
+ - lib/public/swarm.css
124
+ - lib/public/swarm.html
125
+ - lib/public/swarm.js
126
+ - lib/swarm.rb
127
+ - lib/swarm/agent.rb
128
+ - lib/swarm/job.rb
129
+ - lib/swarm/swarm.rb
130
+ - spec/agent_spec.rb
131
+ - spec/job_spec.rb
132
+ - spec/spec.opts
133
+ - spec/spec_helper.rb
134
+ - spec/swarm_spec.rb
135
+ - Manifest
136
+ - swarm.gemspec
137
+ has_rdoc: false
138
+ homepage: ""
139
+ licenses:
140
+ post_install_message:
141
+ rdoc_options:
142
+ - --line-numbers
143
+ - --inline-source
144
+ - --title
145
+ - Swarm
146
+ - --main
147
+ - Readme.md
148
+ require_paths:
149
+ - lib
150
+ required_ruby_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ version: "0"
155
+ version:
156
+ required_rubygems_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: "1.2"
161
+ version:
162
+ requirements: []
163
+
164
+ rubyforge_project: swarm
165
+ rubygems_version: 1.3.5
166
+ signing_key:
167
+ specification_version: 3
168
+ summary: Ruby TestSwarm implementation
169
+ test_files: []
170
+