af-addon-tester 0.0.4 → 0.0.5

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.
@@ -20,4 +20,5 @@ Gem::Specification.new do |s|
20
20
  s.require_paths = ["lib"]
21
21
 
22
22
  s.add_runtime_dependency 'json'
23
+ s.add_runtime_dependency 'uuid'
23
24
  end
data/bin/af-addon-tester CHANGED
@@ -8,6 +8,9 @@ require 'json'
8
8
  require 'digest/sha1'
9
9
  require 'af-addon-tester'
10
10
  require 'restclient'
11
+ require 'uuid'
12
+
13
+ puts "AppFog Addon Tester v#{AppFog::AddonTester::VERSION}"
11
14
 
12
15
  manifest_path = ARGV.last
13
16
 
@@ -20,7 +23,6 @@ begin
20
23
  manifest = JSON.parse(manifest_json)
21
24
 
22
25
  raise "Missing id" if manifest['id'].nil?
23
- username = manifest['api']['username'] || manifest['id']
24
26
  raise "Missing api section" if manifest['api'].nil?
25
27
  raise "Missing api password" if manifest['api']['password'].nil?
26
28
  raise "Missing apt test url" if manifest['api']['test'].nil?
@@ -32,20 +34,37 @@ rescue Exception => e
32
34
  exit
33
35
  end
34
36
 
37
+ customer_id = "phpfog#{UUID.new.generate}@appfog.com"
35
38
  callback_url = 'http://localhost:9990'
39
+ plan = manifest['plans'][0]['id']
36
40
  config_prefix = manifest['id'].gsub('-','_').upcase + '_'
41
+ username = manifest['api']['username'] || manifest['id']
42
+ password = manifest['api']['password']
37
43
  bad_user = 'bad_user'
38
44
  bad_password = 'bad_pass'
45
+ resource_host = manifest['api']['test']
39
46
  resources_path = (manifest['api']['path'] || 'appfog/resources').gsub(/^\/+/,'')
40
-
41
- addon = RestClient::Resource.new manifest['api']['test'], {:user => username, :password => manifest['api']['password']}
47
+ sso_salt = manifest['api']['sso_salt']
48
+
49
+ puts ""
50
+ puts " Target: #{bwhite(resource_host + resources_path)}"
51
+ puts " Customer ID: #{bwhite(customer_id)}"
52
+ puts " Plan: #{bwhite(manifest['plans'][0]['id'])}"
53
+ puts " Callback URL: #{bwhite(callback_url)}"
54
+ puts " Config Prefix: #{bwhite(config_prefix)}"
55
+ puts " Basic Auth User: #{bwhite(username)}"
56
+ puts " Basic Auth Password: #{bwhite(password[0..2]+password[3..-1].gsub(/./,'*'))}"
57
+ puts " SSO Salt: #{bwhite(sso_salt[0..2]+sso_salt[3..-1].gsub(/./,'*'))}"
58
+ puts ""
59
+
60
+ addon = RestClient::Resource.new resource_host, {:user => username, :password => password}
42
61
  headers = { :accept => "application/json", :content_type => "application/json", "User-Agent" => "af-addon-tester/#{VERSION}" }
43
62
 
44
63
  resp = nil
45
64
  code = nil
46
65
 
47
66
  validate "Provisioning" do
48
- payload = { 'customer_id' => "test@test.com", 'plan' => 'test', 'callback_url' => callback_url, 'options' => '{}' }
67
+ payload = { 'customer_id' => customer_id, 'plan' => plan, 'callback_url' => callback_url, 'options' => '{}' }
49
68
  begin
50
69
  resp = addon[resources_path].post JSON.generate(payload), headers
51
70
  failed("response code: #{resp.code}") if resp.code != 200
@@ -102,7 +121,7 @@ end
102
121
  resource_id = provision_info['id']
103
122
  unless resource_id.nil?
104
123
  validate "Update resource" do
105
- payload = { 'customer_id' => manifest['id'], 'plan' => manifest['plans'][0]['id'] }
124
+ payload = { 'customer_id' => customer_id, 'plan' => plan }
106
125
  begin
107
126
  resp = addon[File.join(resources_path, resource_id.to_s)].put JSON.generate(payload), headers
108
127
  failed("response code: #{resp.code}") if resp.code != 200
@@ -168,13 +187,14 @@ end
168
187
 
169
188
  validate "SSO link" do
170
189
  timestamp = Time.now.to_i
171
- authstring = resource_id.to_s + ':' + manifest['api']['sso_salt'] + ':' + timestamp.to_s
190
+ authstring = resource_id.to_s + ':' + sso_salt + ':' + timestamp.to_s
172
191
  token = Digest::SHA1.hexdigest(authstring)
173
- addon_sso = RestClient::Resource.new manifest['api']['test']
192
+ addon_sso = RestClient::Resource.new resource_host
174
193
  sso_headers = { :accept => "text/html", :content_type => "text/html", "User-Agent" => "af-addon-tester/#{VERSION}" }
175
194
  begin
195
+ expected = [200, 301, 302, 303, 304, 307]
176
196
  resp = addon_sso[File.join(resources_path, resource_id.to_s) + "?token=#{token}&timestamp=#{timestamp}"].get sso_headers
177
- failed("response code: #{resp.code}") if resp.code != 200
197
+ failed("response code: #{resp.code}") if !expected.include?(resp.code)
178
198
  rescue RestClient::ExceptionWithResponse => rest_err
179
199
  failed("response code: #{rest_err.message}")
180
200
  end
@@ -195,9 +215,9 @@ else
195
215
  end
196
216
 
197
217
  validate "Bad credentials test" do
198
- payload = { 'customer_id' => manifest['id'], 'plan' => manifest['plans'][0]['id'], 'callback_url' => callback_url, 'options' => '{}' }
218
+ payload = { 'customer_id' => customer_id, 'plan' => plan, 'callback_url' => callback_url, 'options' => '{}' }
199
219
 
200
- addon_bad_auth = RestClient::Resource.new manifest['api']['test'], { :username => bad_user, :password => bad_password }
220
+ addon_bad_auth = RestClient::Resource.new resource_host, { :username => bad_user, :password => bad_password }
201
221
 
202
222
  code = nil
203
223
  begin
@@ -1,5 +1,5 @@
1
1
  module AppFog
2
2
  module AddonTester
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tim Santeford
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-01-17 00:00:00 -08:00
17
+ date: 2012-01-18 00:00:00 -08:00
18
18
  default_executable: af-addon-tester
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -29,6 +29,18 @@ dependencies:
29
29
  version: "0"
30
30
  type: :runtime
31
31
  version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: uuid
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
32
44
  description: Allows developers to test App Fog add-ons
33
45
  email:
34
46
  - tim@phpfog.com