kensa 1.1.4 → 1.2.0rc1

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/test/sso_test.rb CHANGED
@@ -1,126 +1,72 @@
1
- require 'test/helper'
2
- require 'cgi'
3
-
1
+ $:.unshift(File.expand_path("../..",__FILE__))
2
+ require 'test/lib/dependencies'
4
3
  class SsoTest < Test::Unit::TestCase
5
- include Heroku::Kensa
6
4
 
7
- setup do
8
- @data = Manifest.new.skeleton.merge(:id => 1)
9
- @data['api']['test'] = 'http://localhost:4567/'
10
- @data['api']['sso_salt'] = 'SSO_SALT'
5
+ def setup
6
+ super
7
+ @user_id ||= manifest["user_id"] || 123
8
+ @time = Time.now.to_i
9
+ @params = { :timestamp => @time,
10
+ :token => make_token(@user_id, manifest['api']["sso_salt"], @time.to_s),
11
+ "nav-data" => "some-nav-data"
12
+ }
11
13
  end
12
14
 
13
- teardown { Timecop.return }
14
-
15
- def builds_full_url(env)
16
- url, query = @sso.full_url.split('?')
17
- data = CGI.parse(query)
18
-
19
-
20
- assert_equal "#{@data['api'][env]}heroku/resources/1", url
21
- assert_equal 'b6010f6fbb850887a396c2bc0ab23974003008f6', data['token'].first
22
- assert_equal '1262304000', data['timestamp'].first
23
- assert_equal 'username@example.com', data['user'].first
15
+ def sso_post?
16
+ manifest["api"]["test"].is_a?(Hash) &&
17
+ manifest["api"]["test"]["sso_url"]
24
18
  end
25
19
 
26
- context 'sso' do
27
- setup do
28
- Timecop.freeze Time.utc(2010, 1)
29
- @sso = Sso.new @data
30
- end
31
-
32
- test 'builds path' do
33
- assert_equal '/heroku/resources/1', @sso.path
34
- end
35
-
36
- test 'builds full url' do
37
- builds_full_url('test')
38
- end
39
-
40
- context 'with no "sso" field specified' do
41
- test "defaults to GET" do
42
- assert_equal @sso.full_url, @sso.sso_url
43
- end
20
+ def sso_url
21
+ if sso_post?
22
+ manifest["api"]["test"]["sso_url"].chomp("/")
23
+ else
24
+ "/heroku/resources"
44
25
  end
26
+ end
45
27
 
46
- context 'when sso method is GET' do
47
- setup do
48
- @data['api']['sso'] = 'GET'
49
- @sso = Sso.new(@data).start
50
- end
51
-
52
- test "#sso_url should be the #full_url" do
53
- assert_equal @sso.full_url, @sso.sso_url
54
- end
55
-
56
- test "#message is Opening <full_url>" do
57
- assert_equal "Opening #{@sso.full_url}", @sso.message
58
- end
28
+ def sso_login(params = @params, user_id = @user_id)
29
+ if sso_post?
30
+ post sso_url, params.merge(:id => user_id)
31
+ else
32
+ get "#{sso_url}/#{user_id}", params
59
33
  end
34
+ end
60
35
 
61
- context 'when sso method is POST' do
62
- setup do
63
- Timecop.freeze Time.utc(2010, 1)
64
- @data['api']['sso'] = 'post'
65
- end
66
-
67
- test "it starts the proxy server" do
68
- @sso = Sso.new(@data).start
69
- body = RestClient.get(@sso.sso_url)
70
-
71
- assert body.include? @sso.path
72
- assert body.include? 'b6010f6fbb850887a396c2bc0ab23974003008f6'
73
- assert body.include? '1262304000'
74
- assert body.include? @sso.url
75
- assert body.include? @sso.sample_nav_data
76
- end
77
-
78
- context "with the proxy working" do
79
- setup do
80
- any_instance_of(Sso, :run_proxy => false)
81
- @sso = Sso.new(@data).start
82
- end
83
-
84
- test "#sso_url should point to the proxy" do
85
- assert_equal "http://localhost:#{@sso.proxy_port}/", @sso.sso_url
86
- end
87
-
88
- test "#post_url contains url and path" do
89
- assert_equal "http://localhost:4567/heroku/resources/1/sso", @sso.post_url
90
- end
91
-
92
- test "#message is Posting <data> to <post_url> via proxy on port <proxy_port>" do
93
- assert_equal "POSTing #{@sso.query_data} to http://localhost:4567/heroku/resources/1/sso via proxy on port #{@sso.proxy_port}", @sso.message
94
- end
95
- end
96
- end
36
+ def test_validates_token
37
+ @params[:token] = "foo"
38
+ response = sso_login
39
+ assert_equal 403, response.code, "Signing in via SSO at /heroku/resources/:id must return a 403 if the token is invalid."
97
40
  end
98
41
 
99
- context 'sso without salt' do
100
- setup do
101
- @data['api'].delete 'sso_salt'
102
- @sso = Sso.new @data
103
- end
42
+ def test_validates_timestamp
43
+ @params[:timestamp] = (Time.now-60*3).to_i
44
+ @params[:token] = make_token(123, "SSO_SALT", @params[:timestamp].to_s)
45
+ response = sso_login
46
+ assert_equal 403, response.code, "Signing in via SSO at /heroku/resources/:id must return a 403 if the timestamp is expired."
104
47
 
105
- test 'builds full url' do
106
- expected = 'http://localhost:4567/heroku/resources/1'
48
+ @params[:timestamp] = "foo"
49
+ response = sso_login
50
+ assert_equal 403, response.code, "Signing in via SSO at /heroku/resources/:id must return a 403 if the timestamp is invalid."
51
+ end
107
52
 
108
- assert @sso.full_url.include?(expected)
109
- end
53
+ def test_logs_in
54
+ response = sso_login
55
+ assert response.code.to_s.match(/\A2/), "Signing in via SSO at /heroku/resources/:id must return a 2xx response if sign in was valid."
110
56
  end
111
57
 
112
- context 'sso in a specific environment' do
113
- setup do
114
- Timecop.freeze Time.utc(2010, 1)
115
- env = 'production'
116
- @data[:env] = env
117
- @data['api'][env] = 'http://localhost:7654/'
58
+ def test_creates_the_heroku_nav_data_cookie
59
+ response = sso_login
60
+ puts "Hello"
61
+ puts response.cookies.inspect
118
62
 
119
- @sso = Sso.new @data
120
- end
63
+ assert response.cookies, "SSO sign in should set the heroku-nav-data cookie to the value of the passed nav-data parameter."
64
+ assert_equal @params["nav-data"], response.cookies["heroku-nav-data"], "SSO sign in should set the heroku-nav-data cookie to the value of the passed nav-data parameter."
65
+ end
121
66
 
122
- test 'builds full url' do
123
- builds_full_url('production')
124
- end
67
+ def test_displays_the_heroku_layout
68
+ response = sso_login
69
+ document = Nokogiri::HTML.parse(response.body)
70
+ assert !document.search("div#heroku-header").empty?, "Logged in page should contain the Heroku header."
125
71
  end
126
72
  end
metadata CHANGED
@@ -1,220 +1,162 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: kensa
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 1
8
- - 4
9
- version: 1.1.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0rc1
5
+ prerelease: 5
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Blake Mizerany
13
9
  - Pedro Belo
14
10
  - Adam Wiggins
15
11
  - Chris Continanza
12
+ - Glenn Gillen
16
13
  autorequire:
17
14
  bindir: bin
18
15
  cert_chain: []
19
-
20
- date: 2011-08-22 00:00:00 -07:00
21
- default_executable: kensa
22
- dependencies:
23
- - !ruby/object:Gem::Dependency
24
- name: turn
25
- prerelease: false
26
- requirement: &id001 !ruby/object:Gem::Requirement
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- segments:
31
- - 0
32
- version: "0"
16
+ date: 2011-10-14 00:00:00.000000000Z
17
+ dependencies:
18
+ - !ruby/object:Gem::Dependency
19
+ name: json
20
+ requirement: &70119858551140 !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ! '>='
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
33
26
  type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: contest
37
27
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- segments:
43
- - 0
44
- version: "0"
28
+ version_requirements: *70119858551140
29
+ - !ruby/object:Gem::Dependency
30
+ name: sinatra
31
+ requirement: &70119858550340 !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: 1.2.6
45
37
  type: :development
46
- version_requirements: *id002
47
- - !ruby/object:Gem::Dependency
48
- name: timecop
49
38
  prerelease: false
50
- requirement: &id003 !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- segments:
55
- - 0
56
- - 3
57
- - 5
39
+ version_requirements: *70119858550340
40
+ - !ruby/object:Gem::Dependency
41
+ name: timecop
42
+ requirement: &70119858549300 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
58
47
  version: 0.3.5
59
48
  type: :development
60
- version_requirements: *id003
61
- - !ruby/object:Gem::Dependency
62
- name: sinatra
63
49
  prerelease: false
64
- requirement: &id004 !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- - 9
71
- version: "0.9"
50
+ version_requirements: *70119858549300
51
+ - !ruby/object:Gem::Dependency
52
+ name: rr
53
+ requirement: &70119858548460 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ version: 1.0.4
72
59
  type: :development
73
- version_requirements: *id004
74
- - !ruby/object:Gem::Dependency
75
- name: json
76
60
  prerelease: false
77
- requirement: &id005 !ruby/object:Gem::Requirement
78
- requirements:
79
- - - ">="
80
- - !ruby/object:Gem::Version
81
- segments:
82
- - 0
83
- version: "0"
61
+ version_requirements: *70119858548460
62
+ - !ruby/object:Gem::Dependency
63
+ name: artifice
64
+ requirement: &70119858547540 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: '0.6'
84
70
  type: :development
85
- version_requirements: *id005
86
- - !ruby/object:Gem::Dependency
87
- name: contest
88
71
  prerelease: false
89
- requirement: &id006 !ruby/object:Gem::Requirement
90
- requirements:
91
- - - ">="
92
- - !ruby/object:Gem::Version
93
- segments:
94
- - 0
95
- version: "0"
96
- type: :development
97
- version_requirements: *id006
98
- - !ruby/object:Gem::Dependency
72
+ version_requirements: *70119858547540
73
+ - !ruby/object:Gem::Dependency
99
74
  name: haml
100
- prerelease: false
101
- requirement: &id007 !ruby/object:Gem::Requirement
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- segments:
106
- - 0
107
- version: "0"
75
+ requirement: &70119858546680 !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: 3.1.3
108
81
  type: :development
109
- version_requirements: *id007
110
- - !ruby/object:Gem::Dependency
111
- name: jeweler
112
82
  prerelease: false
113
- requirement: &id008 !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- segments:
118
- - 0
119
- version: "0"
120
- type: :development
121
- version_requirements: *id008
122
- - !ruby/object:Gem::Dependency
123
- name: rr
83
+ version_requirements: *70119858546680
84
+ - !ruby/object:Gem::Dependency
85
+ name: test-unit
86
+ requirement: &70119858545920 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: 1.2.3
92
+ type: :runtime
124
93
  prerelease: false
125
- requirement: &id009 !ruby/object:Gem::Requirement
126
- requirements:
127
- - - ">="
128
- - !ruby/object:Gem::Version
129
- segments:
130
- - 0
131
- version: "0"
132
- type: :development
133
- version_requirements: *id009
134
- - !ruby/object:Gem::Dependency
94
+ version_requirements: *70119858545920
95
+ - !ruby/object:Gem::Dependency
135
96
  name: rest-client
136
- prerelease: false
137
- requirement: &id010 !ruby/object:Gem::Requirement
138
- requirements:
139
- - - <
140
- - !ruby/object:Gem::Version
141
- segments:
142
- - 1
143
- - 7
144
- - 0
145
- version: 1.7.0
146
- - - ">="
147
- - !ruby/object:Gem::Version
148
- segments:
149
- - 1
150
- - 4
151
- - 0
152
- version: 1.4.0
97
+ requirement: &70119858545100 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: 1.6.7
153
103
  type: :runtime
154
- version_requirements: *id010
155
- - !ruby/object:Gem::Dependency
156
- name: yajl-ruby
157
104
  prerelease: false
158
- requirement: &id011 !ruby/object:Gem::Requirement
159
- requirements:
105
+ version_requirements: *70119858545100
106
+ - !ruby/object:Gem::Dependency
107
+ name: yajl-ruby
108
+ requirement: &70119858544180 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
160
111
  - - ~>
161
- - !ruby/object:Gem::Version
162
- segments:
163
- - 0
164
- - 6
165
- version: "0.6"
112
+ - !ruby/object:Gem::Version
113
+ version: 0.8.3
166
114
  type: :runtime
167
- version_requirements: *id011
168
- - !ruby/object:Gem::Dependency
169
- name: term-ansicolor
170
115
  prerelease: false
171
- requirement: &id012 !ruby/object:Gem::Requirement
172
- requirements:
116
+ version_requirements: *70119858544180
117
+ - !ruby/object:Gem::Dependency
118
+ name: term-ansicolor
119
+ requirement: &70119858543480 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
173
122
  - - ~>
174
- - !ruby/object:Gem::Version
175
- segments:
176
- - 1
177
- - 0
178
- version: "1.0"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.0.6
179
125
  type: :runtime
180
- version_requirements: *id012
181
- - !ruby/object:Gem::Dependency
182
- name: launchy
183
126
  prerelease: false
184
- requirement: &id013 !ruby/object:Gem::Requirement
185
- requirements:
186
- - - ">="
187
- - !ruby/object:Gem::Version
188
- segments:
189
- - 0
190
- - 3
191
- - 2
192
- version: 0.3.2
127
+ version_requirements: *70119858543480
128
+ - !ruby/object:Gem::Dependency
129
+ name: launchy
130
+ requirement: &70119858542700 !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ~>
134
+ - !ruby/object:Gem::Version
135
+ version: 2.0.5
193
136
  type: :runtime
194
- version_requirements: *id013
195
- - !ruby/object:Gem::Dependency
196
- name: mechanize
197
137
  prerelease: false
198
- requirement: &id014 !ruby/object:Gem::Requirement
199
- requirements:
138
+ version_requirements: *70119858542700
139
+ - !ruby/object:Gem::Dependency
140
+ name: mechanize
141
+ requirement: &70119858541620 !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
200
144
  - - ~>
201
- - !ruby/object:Gem::Version
202
- segments:
203
- - 1
204
- - 0
205
- - 0
145
+ - !ruby/object:Gem::Version
206
146
  version: 1.0.0
207
147
  type: :runtime
208
- version_requirements: *id014
209
- description: Kensa is a command-line tool to help add-on providers integrating their services with Heroku. It manages manifest files, and provides a TDD-like approach for programmers to test and develop their APIs.
210
- email: pedro@heroku.com
211
- executables:
148
+ prerelease: false
149
+ version_requirements: *70119858541620
150
+ description: Kensa is a command-line tool to help add-on providers integrating their
151
+ services with Heroku. It manages manifest files, and provides a TDD-like approach
152
+ for programmers to test and develop their APIs.
153
+ email: glenn@heroku.com
154
+ executables:
212
155
  - kensa
213
156
  extensions: []
214
-
215
- extra_rdoc_files:
216
- - README.md
217
- files:
157
+ extra_rdoc_files: []
158
+ files:
159
+ - .gitignore
218
160
  - Gemfile
219
161
  - Gemfile.lock
220
162
  - README.md
@@ -222,54 +164,63 @@ files:
222
164
  - bin/kensa
223
165
  - kensa.gemspec
224
166
  - lib/heroku/kensa.rb
225
- - lib/heroku/kensa/check.rb
226
167
  - lib/heroku/kensa/client.rb
227
168
  - lib/heroku/kensa/http.rb
228
169
  - lib/heroku/kensa/manifest.rb
229
170
  - lib/heroku/kensa/post_proxy.rb
230
171
  - lib/heroku/kensa/sso.rb
172
+ - lib/heroku/kensa/version.rb
231
173
  - set-env.sh
232
- - test/all_check_test.rb
233
- - test/deprovision_check_test.rb
174
+ - test/deprovision_test.rb
234
175
  - test/helper.rb
235
- - test/manifest_check_test.rb
176
+ - test/lib/dependencies.rb
177
+ - test/lib/formatter.rb
178
+ - test/lib/response.rb
179
+ - test/lib/test_case.rb
180
+ - test/manifest_generation_test.rb
236
181
  - test/manifest_test.rb
237
- - test/plan_change_check_test.rb
238
- - test/provision_check_test.rb
239
- - test/provision_response_check_test.rb
240
- - test/resources/runner.rb
241
- - test/resources/server.rb
242
- - test/sso_check_test.rb
182
+ - test/plan_change_test.rb
183
+ - test/provision_test.rb
184
+ - test/resources/provider_server.rb
185
+ - test/resources/views/index.haml
186
+ - test/sso_launch_test.rb
243
187
  - test/sso_test.rb
244
- has_rdoc: true
245
188
  homepage: http://provider.heroku.com/resources
246
189
  licenses: []
247
-
248
190
  post_install_message:
249
191
  rdoc_options: []
250
-
251
- require_paths:
192
+ require_paths:
252
193
  - lib
253
- required_ruby_version: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - ">="
256
- - !ruby/object:Gem::Version
257
- segments:
258
- - 0
259
- version: "0"
260
- required_rubygems_version: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - ">="
263
- - !ruby/object:Gem::Version
264
- segments:
265
- - 0
266
- version: "0"
194
+ required_ruby_version: !ruby/object:Gem::Requirement
195
+ none: false
196
+ requirements:
197
+ - - ! '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>'
204
+ - !ruby/object:Gem::Version
205
+ version: 1.3.1
267
206
  requirements: []
268
-
269
- rubyforge_project:
270
- rubygems_version: 1.3.6
207
+ rubyforge_project: kensa
208
+ rubygems_version: 1.8.10
271
209
  signing_key:
272
210
  specification_version: 3
273
211
  summary: Tool to help Heroku add-on providers integrating their services
274
- test_files: []
275
-
212
+ test_files:
213
+ - test/deprovision_test.rb
214
+ - test/helper.rb
215
+ - test/lib/dependencies.rb
216
+ - test/lib/formatter.rb
217
+ - test/lib/response.rb
218
+ - test/lib/test_case.rb
219
+ - test/manifest_generation_test.rb
220
+ - test/manifest_test.rb
221
+ - test/plan_change_test.rb
222
+ - test/provision_test.rb
223
+ - test/resources/provider_server.rb
224
+ - test/resources/views/index.haml
225
+ - test/sso_launch_test.rb
226
+ - test/sso_test.rb