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/.gitignore +5 -0
- data/Gemfile +4 -7
- data/Gemfile.lock +59 -23
- data/README.md +1 -1
- data/Rakefile +6 -33
- data/kensa.gemspec +26 -98
- data/lib/heroku/kensa/client.rb +25 -5
- data/lib/heroku/kensa/manifest.rb +9 -3
- data/lib/heroku/kensa/sso.rb +24 -14
- data/lib/heroku/kensa/version.rb +6 -0
- data/lib/heroku/kensa.rb +10 -6
- data/test/deprovision_test.rb +30 -0
- data/test/helper.rb +11 -44
- data/test/lib/dependencies.rb +8 -0
- data/test/lib/formatter.rb +85 -0
- data/test/lib/response.rb +6 -0
- data/test/lib/test_case.rb +56 -0
- data/test/manifest_generation_test.rb +32 -0
- data/test/manifest_test.rb +36 -21
- data/test/plan_change_test.rb +30 -0
- data/test/provision_test.rb +84 -0
- data/test/resources/provider_server.rb +82 -0
- data/test/resources/views/index.haml +6 -0
- data/test/sso_launch_test.rb +130 -0
- data/test/sso_test.rb +52 -106
- metadata +161 -210
- data/lib/heroku/kensa/check.rb +0 -485
- data/test/all_check_test.rb +0 -25
- data/test/deprovision_check_test.rb +0 -36
- data/test/manifest_check_test.rb +0 -79
- data/test/plan_change_check_test.rb +0 -27
- data/test/provision_check_test.rb +0 -43
- data/test/provision_response_check_test.rb +0 -72
- data/test/resources/runner.rb +0 -1
- data/test/resources/server.rb +0 -207
- data/test/sso_check_test.rb +0 -59
data/.gitignore
ADDED
data/Gemfile
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
source
|
1
|
+
source "http://rubygems.org"
|
2
2
|
gemspec
|
3
|
-
group :development do
|
4
|
-
gem '
|
5
|
-
gem '
|
6
|
-
gem 'haml'
|
7
|
-
gem 'jeweler'
|
8
|
-
gem 'rr'
|
3
|
+
group :development do
|
4
|
+
gem 'ruby-debug', :platform => :mri_18
|
5
|
+
gem 'ruby-debug19', :platform => :mri_19
|
9
6
|
end
|
data/Gemfile.lock
CHANGED
@@ -1,58 +1,94 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
kensa (
|
5
|
-
|
6
|
-
launchy (>= 0.3.2)
|
4
|
+
kensa (2.0.0rc2)
|
5
|
+
launchy (~> 2.0.5)
|
7
6
|
mechanize (~> 1.0.0)
|
8
|
-
rest-client (
|
9
|
-
term-ansicolor (~> 1.0)
|
10
|
-
|
7
|
+
rest-client (~> 1.6.7)
|
8
|
+
term-ansicolor (~> 1.0.6)
|
9
|
+
test-unit (~> 1.2.3)
|
10
|
+
yajl-ruby (~> 0.8.3)
|
11
11
|
|
12
12
|
GEM
|
13
13
|
remote: http://rubygems.org/
|
14
14
|
specs:
|
15
15
|
addressable (2.2.6)
|
16
|
+
<<<<<<< HEAD
|
16
17
|
ansi (1.3.0)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
archive-tar-minitar (0.5.2)
|
19
|
+
=======
|
20
|
+
>>>>>>> bef831b5998868443cbed5c3bfeeb74220bdc5ba
|
21
|
+
artifice (0.6)
|
22
|
+
rack-test
|
23
|
+
haml (3.1.3)
|
24
|
+
hoe (2.12.3)
|
25
|
+
rake (~> 0.8)
|
26
|
+
json (1.6.1)
|
25
27
|
launchy (2.0.5)
|
26
28
|
addressable (~> 2.2.6)
|
29
|
+
<<<<<<< HEAD
|
30
|
+
linecache (0.43)
|
31
|
+
linecache19 (0.5.12)
|
32
|
+
ruby_core_source (>= 0.1.4)
|
33
|
+
=======
|
34
|
+
>>>>>>> bef831b5998868443cbed5c3bfeeb74220bdc5ba
|
27
35
|
mechanize (1.0.0)
|
28
36
|
nokogiri (>= 1.2.1)
|
29
37
|
mime-types (1.16)
|
30
38
|
nokogiri (1.5.0)
|
31
|
-
rack (1.3.
|
39
|
+
rack (1.3.3)
|
40
|
+
rack-test (0.6.1)
|
41
|
+
rack (>= 1.0)
|
32
42
|
rake (0.9.2)
|
33
|
-
rest-client (1.6.
|
43
|
+
rest-client (1.6.7)
|
34
44
|
mime-types (>= 1.16)
|
45
|
+
<<<<<<< HEAD
|
35
46
|
rr (1.0.3)
|
47
|
+
ruby-debug (0.10.4)
|
48
|
+
columnize (>= 0.1)
|
49
|
+
ruby-debug-base (~> 0.10.4.0)
|
50
|
+
ruby-debug-base (0.10.4)
|
51
|
+
linecache (>= 0.3)
|
52
|
+
ruby-debug-base19 (0.11.25)
|
53
|
+
columnize (>= 0.3.1)
|
54
|
+
linecache19 (>= 0.5.11)
|
55
|
+
ruby_core_source (>= 0.1.4)
|
56
|
+
ruby-debug19 (0.11.6)
|
57
|
+
columnize (>= 0.3.1)
|
58
|
+
linecache19 (>= 0.5.11)
|
59
|
+
ruby-debug-base19 (>= 0.11.19)
|
60
|
+
ruby_core_source (0.1.5)
|
61
|
+
archive-tar-minitar (>= 0.5.2)
|
62
|
+
=======
|
63
|
+
rr (1.0.4)
|
64
|
+
>>>>>>> bef831b5998868443cbed5c3bfeeb74220bdc5ba
|
36
65
|
sinatra (1.2.6)
|
37
66
|
rack (~> 1.1)
|
38
|
-
tilt (
|
67
|
+
tilt (< 2.0, >= 1.2.2)
|
39
68
|
term-ansicolor (1.0.6)
|
40
|
-
|
69
|
+
test-unit (1.2.3)
|
70
|
+
hoe (>= 1.5.1)
|
71
|
+
tilt (1.3.3)
|
41
72
|
timecop (0.3.5)
|
42
|
-
turn (0.8.2)
|
43
|
-
ansi (>= 1.2.2)
|
44
73
|
yajl-ruby (0.8.3)
|
45
74
|
|
46
75
|
PLATFORMS
|
47
76
|
ruby
|
48
77
|
|
49
78
|
DEPENDENCIES
|
50
|
-
|
51
|
-
haml
|
52
|
-
jeweler
|
79
|
+
artifice (~> 0.6)
|
80
|
+
haml (~> 3.1.3)
|
53
81
|
json
|
54
82
|
kensa!
|
83
|
+
<<<<<<< HEAD
|
55
84
|
rr
|
85
|
+
ruby-debug
|
86
|
+
ruby-debug19
|
56
87
|
sinatra (>= 0.9)
|
57
88
|
timecop (>= 0.3.5)
|
58
89
|
turn
|
90
|
+
=======
|
91
|
+
rr (~> 1.0.4)
|
92
|
+
sinatra (~> 1.2.6)
|
93
|
+
timecop (~> 0.3.5)
|
94
|
+
>>>>>>> bef831b5998868443cbed5c3bfeeb74220bdc5ba
|
data/README.md
CHANGED
@@ -24,6 +24,6 @@ http://provider.heroku.com/resources/technical/build/provisioning
|
|
24
24
|
|
25
25
|
## Meta #######################################################################
|
26
26
|
|
27
|
-
Maintained by
|
27
|
+
Maintained by Glenn Gillen.
|
28
28
|
|
29
29
|
Released under the MIT license. http://github.com/heroku/kensa
|
data/Rakefile
CHANGED
@@ -1,39 +1,12 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
1
4
|
desc 'Run all unit tests'
|
2
5
|
task :test do
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
+
puts require "test/helper"
|
7
|
+
Dir["test/*_test.rb"].each do |test_file|
|
8
|
+
require test_file
|
6
9
|
end
|
7
|
-
system "turn test"
|
8
|
-
system "ps -ax | grep test/resources/server.rb | grep -v grep | awk '{print $1}' | xargs kill"
|
9
10
|
end
|
10
11
|
|
11
12
|
task :default => :test
|
12
|
-
|
13
|
-
begin
|
14
|
-
$: << File.join(File.dirname(__FILE__), 'lib')
|
15
|
-
require 'jeweler'
|
16
|
-
require 'heroku/kensa'
|
17
|
-
Jeweler::Tasks.new do |gemspec|
|
18
|
-
gemspec.name = "kensa"
|
19
|
-
gemspec.summary = "Tool to help Heroku add-on providers integrating their services"
|
20
|
-
gemspec.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."
|
21
|
-
gemspec.email = "pedro@heroku.com"
|
22
|
-
gemspec.homepage = "http://provider.heroku.com/resources"
|
23
|
-
gemspec.authors = ["Blake Mizerany", "Pedro Belo", "Adam Wiggins", "Chris Continanza"]
|
24
|
-
|
25
|
-
gemspec.add_development_dependency(%q<turn>, [">= 0"])
|
26
|
-
gemspec.add_development_dependency(%q<contest>, [">= 0"])
|
27
|
-
gemspec.add_development_dependency(%q<timecop>, [">= 0.3.5"])
|
28
|
-
gemspec.add_development_dependency(%q<sinatra>, [">= 0.9"])
|
29
|
-
gemspec.add_dependency(%q<rest-client>, [">= 1.4.0", "< 1.7.0"])
|
30
|
-
gemspec.add_dependency(%q<yajl-ruby>, ["~> 0.6"])
|
31
|
-
gemspec.add_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
32
|
-
gemspec.add_dependency(%q<launchy>, [">= 0.3.2"])
|
33
|
-
gemspec.add_dependency(%q<mechanize>, ["~> 1.0.0"])
|
34
|
-
|
35
|
-
gemspec.version = Heroku::Kensa::VERSION
|
36
|
-
end
|
37
|
-
rescue LoadError
|
38
|
-
puts "Jeweler not available. Install it with: gem install jeweler"
|
39
|
-
end
|
data/kensa.gemspec
CHANGED
@@ -1,104 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "heroku/kensa/version"
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.
|
5
|
+
s.name = "kensa"
|
6
|
+
s.summary = "Tool to help Heroku add-on providers integrating their services"
|
7
|
+
s.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."
|
8
|
+
s.email = "glenn@heroku.com"
|
9
|
+
s.homepage = "http://provider.heroku.com/resources"
|
10
|
+
s.authors = ["Blake Mizerany", "Pedro Belo", "Adam Wiggins", "Chris Continanza", "Glenn Gillen"]
|
11
|
+
s.version = Heroku::Kensa::VERSION
|
9
12
|
|
10
|
-
s.
|
11
|
-
s.authors = ["Blake Mizerany", "Pedro Belo", "Adam Wiggins", 'Chris Continanza']
|
12
|
-
s.date = %q{2011-08-22}
|
13
|
-
s.default_executable = %q{kensa}
|
14
|
-
s.description = %q{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.}
|
15
|
-
s.email = %q{pedro@heroku.com}
|
16
|
-
s.executables = ["kensa"]
|
17
|
-
s.extra_rdoc_files = [
|
18
|
-
"README.md"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
"Gemfile",
|
22
|
-
"Gemfile.lock",
|
23
|
-
"README.md",
|
24
|
-
"Rakefile",
|
25
|
-
"bin/kensa",
|
26
|
-
"kensa.gemspec",
|
27
|
-
"lib/heroku/kensa.rb",
|
28
|
-
"lib/heroku/kensa/check.rb",
|
29
|
-
"lib/heroku/kensa/client.rb",
|
30
|
-
"lib/heroku/kensa/http.rb",
|
31
|
-
"lib/heroku/kensa/manifest.rb",
|
32
|
-
"lib/heroku/kensa/post_proxy.rb",
|
33
|
-
"lib/heroku/kensa/sso.rb",
|
34
|
-
"set-env.sh",
|
35
|
-
"test/all_check_test.rb",
|
36
|
-
"test/deprovision_check_test.rb",
|
37
|
-
"test/helper.rb",
|
38
|
-
"test/manifest_check_test.rb",
|
39
|
-
"test/manifest_test.rb",
|
40
|
-
"test/plan_change_check_test.rb",
|
41
|
-
"test/provision_check_test.rb",
|
42
|
-
"test/provision_response_check_test.rb",
|
43
|
-
"test/resources/runner.rb",
|
44
|
-
"test/resources/server.rb",
|
45
|
-
"test/sso_check_test.rb",
|
46
|
-
"test/sso_test.rb"
|
47
|
-
]
|
48
|
-
s.homepage = %q{http://provider.heroku.com/resources}
|
49
|
-
s.require_paths = ["lib"]
|
50
|
-
s.rubygems_version = %q{1.6.2}
|
51
|
-
s.summary = %q{Tool to help Heroku add-on providers integrating their services}
|
13
|
+
s.rubyforge_project = "kensa"
|
52
14
|
|
53
|
-
|
54
|
-
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
|
+
s.require_paths = ["lib"]
|
55
19
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
s.add_runtime_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
69
|
-
s.add_runtime_dependency(%q<launchy>, [">= 0.3.2"])
|
70
|
-
s.add_runtime_dependency(%q<mechanize>, ["~> 1.0.0"])
|
71
|
-
else
|
72
|
-
s.add_dependency(%q<turn>, [">= 0"])
|
73
|
-
s.add_dependency(%q<contest>, [">= 0"])
|
74
|
-
s.add_dependency(%q<timecop>, [">= 0.3.5"])
|
75
|
-
s.add_dependency(%q<sinatra>, [">= 0.9"])
|
76
|
-
s.add_dependency(%q<json>, [">= 0"])
|
77
|
-
s.add_dependency(%q<contest>, [">= 0"])
|
78
|
-
s.add_dependency(%q<haml>, [">= 0"])
|
79
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
80
|
-
s.add_dependency(%q<rr>, [">= 0"])
|
81
|
-
s.add_dependency(%q<rest-client>, ["< 1.7.0", ">= 1.4.0"])
|
82
|
-
s.add_dependency(%q<yajl-ruby>, ["~> 0.6"])
|
83
|
-
s.add_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
84
|
-
s.add_dependency(%q<launchy>, [">= 0.3.2"])
|
85
|
-
s.add_dependency(%q<mechanize>, ["~> 1.0.0"])
|
86
|
-
end
|
87
|
-
else
|
88
|
-
s.add_dependency(%q<turn>, [">= 0"])
|
89
|
-
s.add_dependency(%q<contest>, [">= 0"])
|
90
|
-
s.add_dependency(%q<timecop>, [">= 0.3.5"])
|
91
|
-
s.add_dependency(%q<sinatra>, [">= 0.9"])
|
92
|
-
s.add_dependency(%q<json>, [">= 0"])
|
93
|
-
s.add_dependency(%q<contest>, [">= 0"])
|
94
|
-
s.add_dependency(%q<haml>, [">= 0"])
|
95
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
96
|
-
s.add_dependency(%q<rr>, [">= 0"])
|
97
|
-
s.add_dependency(%q<rest-client>, ["< 1.7.0", ">= 1.4.0"])
|
98
|
-
s.add_dependency(%q<yajl-ruby>, ["~> 0.6"])
|
99
|
-
s.add_dependency(%q<term-ansicolor>, ["~> 1.0"])
|
100
|
-
s.add_dependency(%q<launchy>, [">= 0.3.2"])
|
101
|
-
s.add_dependency(%q<mechanize>, ["~> 1.0.0"])
|
102
|
-
end
|
20
|
+
s.add_development_dependency(%q<json>, [">= 0"])
|
21
|
+
s.add_development_dependency(%q<sinatra>, ["~> 1.2.6"])
|
22
|
+
s.add_development_dependency(%q<timecop>, ["~> 0.3.5"])
|
23
|
+
s.add_development_dependency(%q<rr>, ["~> 1.0.4"])
|
24
|
+
s.add_development_dependency(%q<artifice>, ["~> 0.6"])
|
25
|
+
s.add_development_dependency(%q<haml>, ["~> 3.1.3"])
|
26
|
+
s.add_runtime_dependency(%q<test-unit>, ["~> 1.2.3"])
|
27
|
+
s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.7"])
|
28
|
+
s.add_runtime_dependency(%q<yajl-ruby>, ["~> 0.8.3"])
|
29
|
+
s.add_runtime_dependency(%q<term-ansicolor>, ["~> 1.0.6"])
|
30
|
+
s.add_runtime_dependency(%q<launchy>, ["~> 2.0.5"])
|
31
|
+
s.add_runtime_dependency(%q<mechanize>, ["~> 1.0.0"])
|
103
32
|
end
|
104
|
-
|
data/lib/heroku/kensa/client.rb
CHANGED
@@ -31,19 +31,39 @@ module Heroku
|
|
31
31
|
def test
|
32
32
|
case check = @args.shift
|
33
33
|
when "manifest"
|
34
|
-
|
34
|
+
require "#{File.dirname(__FILE__)}/../../../test/manifest_test"
|
35
|
+
require 'test/unit/ui/console/testrunner'
|
36
|
+
$manifest = Yajl::Parser.parse(resolve_manifest)
|
37
|
+
Test::Unit.run = true
|
38
|
+
Test::Unit::UI::Console::TestRunner.new(ManifestTest.suite).start
|
35
39
|
when "provision"
|
36
|
-
|
40
|
+
require "#{File.dirname(__FILE__)}/../../../test/provision_test"
|
41
|
+
require 'test/unit/ui/console/testrunner'
|
42
|
+
$manifest = Yajl::Parser.parse(resolve_manifest)
|
43
|
+
Test::Unit.run = true
|
44
|
+
Test::Unit::UI::Console::TestRunner.new(ProvisionTest.suite).start
|
37
45
|
when "deprovision"
|
38
46
|
id = @args.shift || abort("! no id specified; see usage")
|
39
|
-
|
47
|
+
require "#{File.dirname(__FILE__)}/../../../test/deprovision_test"
|
48
|
+
require 'test/unit/ui/console/testrunner'
|
49
|
+
$manifest = Yajl::Parser.parse(resolve_manifest).merge("user_id" => id)
|
50
|
+
Test::Unit.run = true
|
51
|
+
Test::Unit::UI::Console::TestRunner.new(DeprovisionTest.suite).start
|
40
52
|
when "planchange"
|
41
53
|
id = @args.shift || abort("! no id specified; see usage")
|
42
54
|
plan = @args.shift || abort("! no plan specified; see usage")
|
43
|
-
|
55
|
+
require "#{File.dirname(__FILE__)}/../../../test/plan_change_test"
|
56
|
+
require 'test/unit/ui/console/testrunner'
|
57
|
+
$manifest = Yajl::Parser.parse(resolve_manifest).merge("user_id" => id)
|
58
|
+
Test::Unit.run = true
|
59
|
+
Test::Unit::UI::Console::TestRunner.new(PlanChangeTest.suite).start
|
44
60
|
when "sso"
|
45
61
|
id = @args.shift || abort("! no id specified; see usage")
|
46
|
-
|
62
|
+
require "#{File.dirname(__FILE__)}/../../../test/sso_test"
|
63
|
+
require 'test/unit/ui/console/testrunner'
|
64
|
+
$manifest = Yajl::Parser.parse(resolve_manifest).merge("user_id" => id)
|
65
|
+
Test::Unit.run = true
|
66
|
+
Test::Unit::UI::Console::TestRunner.new(SsoTest.suite).start
|
47
67
|
else
|
48
68
|
abort "! Unknown test '#{check}'; see usage"
|
49
69
|
end
|
@@ -11,10 +11,16 @@ module Heroku
|
|
11
11
|
{
|
12
12
|
"id": "myaddon",
|
13
13
|
"api": {
|
14
|
-
"config_vars": [ "MYADDON_URL" ],
|
14
|
+
"config_vars": [ "MYADDON_USER", "MYADDON_URL" ],
|
15
15
|
"password": "#{generate_password(16)}",#{ sso_key }
|
16
|
-
"production":
|
17
|
-
|
16
|
+
"production": {
|
17
|
+
"base_url": "https://yourapp.com/heroku/resources",
|
18
|
+
"sso_url": "https://yourapp.com/sso/login"
|
19
|
+
},
|
20
|
+
"test": {
|
21
|
+
"base_url": "http://localhost:4567/heroku/resources",
|
22
|
+
"sso_url": "http://localhost:4567/sso/login"
|
23
|
+
}
|
18
24
|
}
|
19
25
|
}
|
20
26
|
JSON
|
data/lib/heroku/kensa/sso.rb
CHANGED
@@ -3,31 +3,41 @@ require 'restclient'
|
|
3
3
|
module Heroku
|
4
4
|
module Kensa
|
5
5
|
class Sso
|
6
|
-
attr_accessor :id, :url, :proxy_port, :timestamp, :token
|
6
|
+
attr_accessor :id, :url, :proxy_port, :timestamp, :token, :sso_url
|
7
7
|
|
8
8
|
def initialize(data)
|
9
9
|
@id = data[:id]
|
10
10
|
@salt = data['api']['sso_salt']
|
11
11
|
|
12
12
|
env = data.fetch :env, 'test'
|
13
|
-
|
14
|
-
|
13
|
+
if data["api"][env].is_a?(Hash)
|
14
|
+
@url = data["api"][env]["base_url"].chomp('/')
|
15
|
+
@sso_url = data["api"][env]["sso_url"].chomp('/')
|
16
|
+
@use_post = true
|
17
|
+
else
|
18
|
+
@url = data["api"][env].chomp('/')
|
19
|
+
@use_post = false
|
20
|
+
end
|
15
21
|
@proxy_port = find_available_port
|
16
22
|
@timestamp = Time.now.to_i
|
17
23
|
@token = make_token(@timestamp)
|
18
24
|
end
|
19
25
|
|
20
26
|
def path
|
21
|
-
extra = self.
|
22
|
-
|
27
|
+
extra = self.post? ? '/sso' : ''
|
28
|
+
if self.post?
|
29
|
+
self.sso_url
|
30
|
+
else
|
31
|
+
"/heroku/resources/#{id}"
|
32
|
+
end
|
23
33
|
end
|
24
34
|
|
25
|
-
def
|
35
|
+
def post?
|
26
36
|
@use_post
|
27
37
|
end
|
28
38
|
|
29
39
|
def sso_url
|
30
|
-
if self.
|
40
|
+
if self.post?
|
31
41
|
"http://localhost:#{@proxy_port}/"
|
32
42
|
else
|
33
43
|
full_url
|
@@ -40,13 +50,13 @@ module Heroku
|
|
40
50
|
alias get_url full_url
|
41
51
|
|
42
52
|
def post_url
|
43
|
-
|
53
|
+
@sso_url
|
44
54
|
end
|
45
55
|
|
46
56
|
def timestamp=(other)
|
47
57
|
@timestamp = other
|
48
58
|
@token = make_token(@timestamp)
|
49
|
-
end
|
59
|
+
end
|
50
60
|
|
51
61
|
def make_token(t)
|
52
62
|
Digest::SHA1.hexdigest([@id, @salt, t].join(':'))
|
@@ -54,7 +64,7 @@ module Heroku
|
|
54
64
|
|
55
65
|
def querystring
|
56
66
|
return '' unless @salt
|
57
|
-
'?' + query_data
|
67
|
+
'?' + query_data
|
58
68
|
end
|
59
69
|
|
60
70
|
def query_data
|
@@ -62,7 +72,7 @@ module Heroku
|
|
62
72
|
end
|
63
73
|
|
64
74
|
def query_params
|
65
|
-
{ 'token' => @token,
|
75
|
+
{ 'token' => @token,
|
66
76
|
'timestamp' => @timestamp.to_s,
|
67
77
|
'nav-data' => sample_nav_data,
|
68
78
|
'user' => 'username@example.com' }
|
@@ -87,7 +97,7 @@ module Heroku
|
|
87
97
|
end
|
88
98
|
|
89
99
|
def message
|
90
|
-
if self.
|
100
|
+
if self.post?
|
91
101
|
"POSTing #{query_data} to #{post_url} via proxy on port #{@proxy_port}"
|
92
102
|
else
|
93
103
|
"Opening #{full_url}"
|
@@ -107,13 +117,13 @@ module Heroku
|
|
107
117
|
end
|
108
118
|
|
109
119
|
def run_proxy
|
110
|
-
return unless self.
|
120
|
+
return unless self.post?
|
111
121
|
server = PostProxy.new self
|
112
122
|
@proxy = server
|
113
123
|
|
114
124
|
trap("INT") { server.stop }
|
115
125
|
pid = fork do
|
116
|
-
server.start
|
126
|
+
server.start
|
117
127
|
end
|
118
128
|
at_exit { server.stop; Process.waitpid pid }
|
119
129
|
end
|
data/lib/heroku/kensa.rb
CHANGED
@@ -1,11 +1,15 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require '
|
4
|
-
require '
|
5
|
-
require '
|
1
|
+
require 'yajl'
|
2
|
+
require 'mechanize'
|
3
|
+
require 'socket'
|
4
|
+
require 'timeout'
|
5
|
+
require 'uri'
|
6
|
+
base_path = File.dirname(__FILE__)
|
7
|
+
%w{http manifest sso post_proxy}.each do |lib|
|
8
|
+
require "#{base_path}/kensa/#{lib}"
|
9
|
+
end
|
6
10
|
|
7
11
|
module Heroku
|
8
12
|
module Kensa
|
9
|
-
VERSION = "
|
13
|
+
VERSION = "2.0.0rc"
|
10
14
|
end
|
11
15
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
$:.unshift(File.expand_path("../..",__FILE__))
|
2
|
+
require 'test/lib/dependencies'
|
3
|
+
class DeprovisionTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
@params = {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def deprovision(auth = nil)
|
11
|
+
delete "/heroku/resources/123", auth
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_working_deprovision_call
|
15
|
+
response = deprovision
|
16
|
+
assert_equal 200, response.code, "Expects a 200 - OK response/status code when successfully deprovisioned."
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_detects_missing_auth
|
20
|
+
response = deprovision(auth = false)
|
21
|
+
assert_equal 401, response.code, "Provisioning request should require authentication."
|
22
|
+
|
23
|
+
response = deprovision(auth = [manifest["id"]+"a", manifest["api"]["password"]])
|
24
|
+
assert_equal 401, response.code, "Provisioning request appears to allow any username, should require '#{manifest["id"]}'."
|
25
|
+
|
26
|
+
response = deprovision(auth = [manifest["id"], manifest["api"]["password"]+"a"])
|
27
|
+
assert_equal 401, response.code, "Provisioning request appears to allow any password, should require '#{manifest["api"]["password"]}'."
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/test/helper.rb
CHANGED
@@ -1,54 +1,21 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
3
|
require 'timecop'
|
4
4
|
require 'rr'
|
5
|
+
require 'test/unit'
|
6
|
+
require 'lib/heroku/kensa'
|
7
|
+
require 'test/resources/provider_server'
|
5
8
|
|
6
9
|
class Test::Unit::TestCase
|
7
10
|
include RR::Adapters::TestUnit
|
8
11
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
check = create_check(data, &blk)
|
13
|
-
check.screen = @screen if @screen
|
14
|
-
assert check.call
|
12
|
+
def setup
|
13
|
+
Timecop.freeze Time.now.utc
|
14
|
+
Artifice.activate_with(ProviderServer.new(manifest))
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
18
|
-
|
19
|
-
|
20
|
-
assert !check.call
|
21
|
-
end
|
22
|
-
|
23
|
-
def create_check(data, &blk)
|
24
|
-
check = self.check.new(data)
|
25
|
-
blk.call(check) if blk
|
26
|
-
check
|
27
|
-
end
|
28
|
-
|
29
|
-
module Headerize
|
30
|
-
attr_accessor :headers
|
31
|
-
end
|
32
|
-
|
33
|
-
def to_json(data, headers={})
|
34
|
-
body = Yajl::Encoder.encode(data)
|
35
|
-
add_headers(body, headers)
|
36
|
-
end
|
37
|
-
|
38
|
-
def add_headers(o, headers={})
|
39
|
-
o.extend Headerize
|
40
|
-
o.headers = {}
|
41
|
-
o.headers["Content-Type"] ||= "application/json"
|
42
|
-
o.headers.merge!(headers)
|
43
|
-
o
|
44
|
-
end
|
45
|
-
|
46
|
-
def kensa_stub(meth, o, returns)
|
47
|
-
o.instance_eval { @returns = Array(returns) }
|
48
|
-
eval <<-EVAL
|
49
|
-
def o.#{meth}(*args)
|
50
|
-
@returns.shift or fail("Nothing else to return from stub'ed method")
|
51
|
-
end
|
52
|
-
EVAL
|
17
|
+
def teardown
|
18
|
+
Timecop.return
|
19
|
+
Artifice.deactivate
|
53
20
|
end
|
54
21
|
end
|