nephophobia 0.0.2 → 0.0.3
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/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/nephophobia/client.rb +8 -0
- data/lib/nephophobia/compute.rb +6 -7
- data/lib/nephophobia/image.rb +2 -2
- data/lib/nephophobia/project.rb +20 -4
- data/lib/nephophobia/role.rb +64 -0
- data/lib/nephophobia/user.rb +16 -32
- data/lib/nephophobia/version.rb +1 -1
- data/test/fixtures/cassettes/project_find_with_invalid_username.yml +30 -0
- data/test/fixtures/cassettes/project_members.yml +3 -3
- data/test/fixtures/cassettes/role_all.yml +28 -0
- data/test/fixtures/cassettes/role_all_with_no_roles.yml +28 -0
- data/test/fixtures/cassettes/role_all_with_string_into_int_error.yml +28 -0
- data/test/fixtures/cassettes/{user_add_role.yml → role_create.yml} +0 -0
- data/test/fixtures/cassettes/{user_remove_role.yml → role_destroy.yml} +2 -2
- data/test/fixtures/cassettes/user_credentials.yml +28 -0
- data/test/fixtures/cassettes/user_find_with_invalid_user_name.yml +59 -0
- data/test/lib/nephophobia/project_test.rb +27 -2
- data/test/lib/nephophobia/role_test.rb +55 -0
- data/test/lib/nephophobia/user_test.rb +20 -19
- metadata +20 -6
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
data/lib/nephophobia/client.rb
CHANGED
@@ -86,5 +86,13 @@ module Nephophobia
|
|
86
86
|
@path = "/services/Admin/"
|
87
87
|
@user ||= Nephophobia::User.new self
|
88
88
|
end
|
89
|
+
|
90
|
+
##
|
91
|
+
# Provide a simple interface to the OpenStack Role resources.
|
92
|
+
|
93
|
+
def role
|
94
|
+
@path = "/services/Admin/"
|
95
|
+
@role ||= Nephophobia::Role.new self
|
96
|
+
end
|
89
97
|
end
|
90
98
|
end
|
data/lib/nephophobia/compute.rb
CHANGED
@@ -46,7 +46,7 @@ module Nephophobia
|
|
46
46
|
end
|
47
47
|
|
48
48
|
##
|
49
|
-
# Create
|
49
|
+
# Create a compute instance with the given 'image_id'.
|
50
50
|
# Returns information about the new instance.
|
51
51
|
#
|
52
52
|
# +image_id+: A String representing the ID of the image.
|
@@ -68,8 +68,7 @@ module Nephophobia
|
|
68
68
|
end
|
69
69
|
|
70
70
|
##
|
71
|
-
#
|
72
|
-
# you terminate an instance more than once, each call will succeed.
|
71
|
+
# Removes the given 'instance_id'.
|
73
72
|
# Returns instances response to a state change.
|
74
73
|
#
|
75
74
|
# +instance_id+: A String representing the ID of the instance.
|
@@ -85,7 +84,7 @@ module Nephophobia
|
|
85
84
|
end
|
86
85
|
|
87
86
|
##
|
88
|
-
# Returns information about the given 'instance_id'
|
87
|
+
# Returns information about the given 'instance_id'.
|
89
88
|
#
|
90
89
|
# +instance_id+: A String representing the ID of the instance.
|
91
90
|
|
@@ -100,7 +99,7 @@ module Nephophobia
|
|
100
99
|
end
|
101
100
|
|
102
101
|
##
|
103
|
-
# Reboot the
|
102
|
+
# Reboot the given 'instance_id'.
|
104
103
|
# Returns instances response to a state change.
|
105
104
|
#
|
106
105
|
# +instance_id+: A String representing the ID of the instance.
|
@@ -116,7 +115,7 @@ module Nephophobia
|
|
116
115
|
end
|
117
116
|
|
118
117
|
##
|
119
|
-
# Starts the
|
118
|
+
# Starts the given 'instance_id'.
|
120
119
|
# Returns instances current and previous state.
|
121
120
|
#
|
122
121
|
# +instance_id+: A String representing the ID of the instance.
|
@@ -132,7 +131,7 @@ module Nephophobia
|
|
132
131
|
end
|
133
132
|
|
134
133
|
##
|
135
|
-
# Stops the
|
134
|
+
# Stops the given 'instance_id'
|
136
135
|
# Returns instances current and previous state.
|
137
136
|
#
|
138
137
|
# +instance_id+: A String representing the ID of the instance.
|
data/lib/nephophobia/image.rb
CHANGED
@@ -44,7 +44,7 @@ module Nephophobia
|
|
44
44
|
end
|
45
45
|
|
46
46
|
##
|
47
|
-
# Returns information about the
|
47
|
+
# Returns information about the given 'image_id'.
|
48
48
|
#
|
49
49
|
# +image_id+: A String representing the ID of the image.
|
50
50
|
|
@@ -69,7 +69,7 @@ module Nephophobia
|
|
69
69
|
|
70
70
|
private
|
71
71
|
##
|
72
|
-
#
|
72
|
+
# Images which do not have a valid kernel_id are not runnable.
|
73
73
|
|
74
74
|
def public? image
|
75
75
|
image.is_public == "true" && image.kernel_id != "true"
|
data/lib/nephophobia/project.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module Nephophobia
|
2
2
|
class ProjectData
|
3
|
-
attr_reader :name, :manager_id, :description
|
3
|
+
attr_reader :name, :manager_id, :description, :member
|
4
4
|
|
5
5
|
def initialize hash
|
6
6
|
@name = hash['projectname']
|
7
7
|
@manager_id = hash['projectManagerId']
|
8
8
|
@description = hash['description']
|
9
|
+
@member = hash['member']
|
9
10
|
end
|
10
11
|
end
|
11
12
|
|
@@ -37,7 +38,7 @@ module Nephophobia
|
|
37
38
|
end
|
38
39
|
|
39
40
|
##
|
40
|
-
# Creates the given 'project_name'.
|
41
|
+
# Creates the given 'project_name' and adds the specified 'user_name' as the manager.
|
41
42
|
# Returns a response to the state change.
|
42
43
|
#
|
43
44
|
# +user_name+: A String representing a nova user_name.
|
@@ -75,19 +76,34 @@ module Nephophobia
|
|
75
76
|
response = @client.action "DescribeProject", "Name" => project_name
|
76
77
|
|
77
78
|
ProjectData.new response.body['DescribeProjectResponse']
|
79
|
+
rescue Hugs::Errors::BadRequest
|
78
80
|
end
|
79
81
|
|
80
82
|
##
|
81
83
|
# Returns information about all members of the given 'project_name'.
|
84
|
+
#
|
85
|
+
# +project_name+: A String representing a nova project name.
|
82
86
|
|
83
87
|
def members project_name
|
84
88
|
response = @client.action "DescribeProjectMembers", "Name" => project_name
|
85
89
|
|
86
|
-
response.body['DescribeProjectMembersResponse']['members']['item']
|
90
|
+
response.body['DescribeProjectMembersResponse']['members']['item'].collect do |data|
|
91
|
+
ProjectData.new data
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
##
|
96
|
+
# Return a Boolean if the given 'user_name' is a member of the specified 'project_name'.
|
97
|
+
#
|
98
|
+
# +user_name+: A String representing a nova user_name.
|
99
|
+
# +project_name+: A String representing a nova project_name name.
|
100
|
+
|
101
|
+
def member? user_name, project_name
|
102
|
+
members(project_name).any? { |f| f.member == user_name }
|
87
103
|
end
|
88
104
|
|
89
105
|
##
|
90
|
-
# Removes the given 'user_name' from the specified
|
106
|
+
# Removes the given 'user_name' from the specified 'project_name'.
|
91
107
|
# Returns a response to the state change.
|
92
108
|
#
|
93
109
|
# +user_name+: A String representing a nova user_name.
|
data/lib/nephophobia/role.rb
CHANGED
@@ -1,5 +1,69 @@
|
|
1
1
|
module Nephophobia
|
2
|
+
class RoleData
|
3
|
+
attr_reader :name
|
4
|
+
|
5
|
+
def initialize hash
|
6
|
+
@name = hash['role']
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
2
10
|
class Role
|
11
|
+
### TODO: Add a default attr.
|
3
12
|
DEFAULT = "sysadmin"
|
13
|
+
|
14
|
+
def initialize client
|
15
|
+
@client = client
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Adds the given 'user_name' to the specified "project_name's" 'Role::DEFAULT'.
|
20
|
+
# Returns a response to the state change.
|
21
|
+
#
|
22
|
+
# +user_name+: A String representing a nova user_name.
|
23
|
+
# +project_name+: A String representing a nova project_name name.
|
24
|
+
|
25
|
+
def create user_name, project_name
|
26
|
+
modify_role user_name, "add", project_name
|
27
|
+
end
|
28
|
+
|
29
|
+
##
|
30
|
+
# Removes the given 'user_name' from the specified "project_name's" 'Role::DEFAULT'.
|
31
|
+
#
|
32
|
+
# +user_name+: A String representing a nova user_name.
|
33
|
+
# +project_name+: A String representing a nova project_name name.
|
34
|
+
|
35
|
+
def destroy user_name, project_name
|
36
|
+
modify_role user_name, "remove", project_name
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# Returns roles for the given 'user_name' and 'project_name'.
|
41
|
+
|
42
|
+
def all user_name, project_name
|
43
|
+
params = {
|
44
|
+
"User" => user_name,
|
45
|
+
"Project" => project_name
|
46
|
+
}
|
47
|
+
|
48
|
+
response = @client.action "DescribeUserRoles", params
|
49
|
+
|
50
|
+
response.body['DescribeUserRolesResponse']['roles'] &&
|
51
|
+
Nephophobia.coerce(response.body['DescribeUserRolesResponse']['roles']['item']).collect do |data|
|
52
|
+
RoleData.new data
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def modify_role user_name, operation, project_name
|
58
|
+
params = {
|
59
|
+
"User" => user_name,
|
60
|
+
"Role" => DEFAULT,
|
61
|
+
"Operation" => operation
|
62
|
+
}
|
63
|
+
|
64
|
+
response = @client.action "ModifyUserRole", params
|
65
|
+
|
66
|
+
ResponseData.new response.body['ModifyUserRoleResponse']
|
67
|
+
end
|
4
68
|
end
|
5
69
|
end
|
data/lib/nephophobia/user.rb
CHANGED
@@ -15,26 +15,32 @@ module Nephophobia
|
|
15
15
|
end
|
16
16
|
|
17
17
|
##
|
18
|
-
#
|
18
|
+
# Creates the given 'user_name'.
|
19
19
|
# Returns a response to the state change.
|
20
20
|
#
|
21
21
|
# +user_name+: A String representing a nova user_name.
|
22
|
-
# +project_name+: A String representing a nova project_name name.
|
23
22
|
|
24
|
-
def
|
25
|
-
|
23
|
+
def create user_name
|
24
|
+
response = @client.action "RegisterUser", "Name" => user_name
|
25
|
+
|
26
|
+
UserData.new response.body['RegisterUserResponse']
|
26
27
|
end
|
27
28
|
|
28
29
|
##
|
29
|
-
#
|
30
|
-
# Returns a response to the state change.
|
30
|
+
# Returns the credentials for a given 'user_name' for the specified 'project_name'.
|
31
31
|
#
|
32
32
|
# +user_name+: A String representing a nova user_name.
|
33
|
+
# +project_name+: A String representing a nova project_name name.
|
33
34
|
|
34
|
-
def
|
35
|
-
|
35
|
+
def credentials user_name, project_name
|
36
|
+
params = {
|
37
|
+
"name" => user_name,
|
38
|
+
"project" => project_name
|
39
|
+
}
|
36
40
|
|
37
|
-
|
41
|
+
response = @client.action "GenerateX509ForUser", params
|
42
|
+
|
43
|
+
Base64.decode64 response.body['GenerateX509ForUserResponse']['file']
|
38
44
|
end
|
39
45
|
|
40
46
|
##
|
@@ -58,29 +64,7 @@ module Nephophobia
|
|
58
64
|
response = @client.action "DescribeUser", "Name" => user_name
|
59
65
|
|
60
66
|
UserData.new response.body['DescribeUserResponse']
|
61
|
-
|
62
|
-
|
63
|
-
##
|
64
|
-
# Removes the given 'user_name' from the specified "project_name's" 'Role::DEFAULT'.
|
65
|
-
#
|
66
|
-
# +user_name+: A String representing a nova user_name.
|
67
|
-
# +project_name+: A String representing a nova project_name name.
|
68
|
-
|
69
|
-
def remove_role user_name, project_name
|
70
|
-
modify_role user_name, "remove", project_name
|
71
|
-
end
|
72
|
-
|
73
|
-
private
|
74
|
-
def modify_role user_name, operation, project_name
|
75
|
-
params = {
|
76
|
-
"User" => user_name,
|
77
|
-
"Role" => Role::DEFAULT,
|
78
|
-
"Operation" => operation
|
79
|
-
}
|
80
|
-
|
81
|
-
response = @client.action "ModifyUserRole", params
|
82
|
-
|
83
|
-
ResponseData.new response.body['ModifyUserRoleResponse']
|
67
|
+
rescue Hugs::Errors::BadRequest
|
84
68
|
end
|
85
69
|
end
|
86
70
|
end
|
data/lib/nephophobia/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=DescribeProject&Name=invalid_project_name&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&Version=2010-11-15&Signature=8Sk4Nu3S6eiEiftNj3jhPusdsT7%2FRpkFMGLBKaCaurw%3D
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 400
|
17
|
+
message: Bad Request
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/xml
|
21
|
+
content-length:
|
22
|
+
- "197"
|
23
|
+
date:
|
24
|
+
- Mon, 07 Mar 2011 23:40:33 GMT
|
25
|
+
connection:
|
26
|
+
- keep-alive
|
27
|
+
body: |-
|
28
|
+
<?xml version="1.0"?>
|
29
|
+
<Response><Errors><Error><Code>NotFound</Code><Message>No project with id invalid_project_name</Message></Error></Errors><RequestID>ZVKFOJ0MKX8MJ5JJO0II</RequestID></Response>
|
30
|
+
http_version: "1.1"
|
@@ -19,10 +19,10 @@
|
|
19
19
|
content-type:
|
20
20
|
- text/xml
|
21
21
|
content-length:
|
22
|
-
- "
|
22
|
+
- "563"
|
23
23
|
date:
|
24
|
-
- Tue,
|
24
|
+
- Tue, 08 Mar 2011 06:05:21 GMT
|
25
25
|
connection:
|
26
26
|
- keep-alive
|
27
|
-
body: <?xml version="1.0" ?><DescribeProjectMembersResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>
|
27
|
+
body: <?xml version="1.0" ?><DescribeProjectMembersResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>LE01AT-PG3M3UDJGO3GC</requestId><members><item><member>tr0001</member></item><item><member>jtran</member></item><item><member>jdewey</member></item><item><member>jkleinpeter</member></item><item><member>kbringard</member></item><item><member>root</member></item><item><member>jt708u</member></item><item><member>xx1234</member></item><item><member>jd265j</member></item><item><member>jk520u</member></item></members></DescribeProjectMembersResponse>
|
28
28
|
http_version: "1.1"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=DescribeUserRoles&Project=foobar_project&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&User=foobar_user&Version=2010-11-15&Signature=b27VsAcRr9dEbjffLUzb4zeztwPFRSVWM53vxFcuyzY%3D
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/xml
|
21
|
+
content-length:
|
22
|
+
- "252"
|
23
|
+
date:
|
24
|
+
- Mon, 07 Mar 2011 23:23:41 GMT
|
25
|
+
connection:
|
26
|
+
- keep-alive
|
27
|
+
body: <?xml version="1.0" ?><DescribeUserRolesResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>5P5XXDX7JWE3X1VH7XV8</requestId><roles><item><role>netadmin</role></item><item><role>sysadmin</role></item></roles></DescribeUserRolesResponse>
|
28
|
+
http_version: "1.1"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=DescribeUserRoles&Project=foobar_project&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&User=foobar_user&Version=2010-11-15&Signature=b27VsAcRr9dEbjffLUzb4zeztwPFRSVWM53vxFcuyzY%3D
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/xml
|
21
|
+
content-length:
|
22
|
+
- "177"
|
23
|
+
date:
|
24
|
+
- Tue, 08 Mar 2011 05:04:36 GMT
|
25
|
+
connection:
|
26
|
+
- keep-alive
|
27
|
+
body: <?xml version="1.0" ?><DescribeUserRolesResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>YL8TVVAIPZF4TAL3BNA-</requestId><roles/></DescribeUserRolesResponse>
|
28
|
+
http_version: "1.1"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=DescribeUserRoles&Project=foobar_project&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&User=foobar_user&Version=2010-11-15&Signature=b27VsAcRr9dEbjffLUzb4zeztwPFRSVWM53vxFcuyzY%3D
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/xml
|
21
|
+
content-length:
|
22
|
+
- "252"
|
23
|
+
date:
|
24
|
+
- Mon, 07 Mar 2011 23:23:41 GMT
|
25
|
+
connection:
|
26
|
+
- keep-alive
|
27
|
+
body: <?xml version="1.0" ?><DescribeUserRolesResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>5P5XXDX7JWE3X1VH7XV8</requestId><roles><item><role>sysadmin</role></item></roles></DescribeUserRolesResponse>
|
28
|
+
http_version: "1.1"
|
File without changes
|
@@ -21,8 +21,8 @@
|
|
21
21
|
content-length:
|
22
22
|
- "184"
|
23
23
|
date:
|
24
|
-
-
|
24
|
+
- Mon, 07 Mar 2011 23:09:07 GMT
|
25
25
|
connection:
|
26
26
|
- keep-alive
|
27
|
-
body: <?xml version="1.0" ?><ModifyUserRoleResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>
|
27
|
+
body: <?xml version="1.0" ?><ModifyUserRoleResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>J3NI8VJ2XF9WIYC7ZLSQ</requestId><return>true</return></ModifyUserRoleResponse>
|
28
28
|
http_version: "1.1"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=GenerateX509ForUser&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&Version=2010-11-15&name=foobar_user&project=production&Signature=BO8yZkptbtg6q5iaxfx%2BvRp0wQktH0oEIPHVmDtisI0%3D
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 200
|
17
|
+
message: OK
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/xml
|
21
|
+
content-length:
|
22
|
+
- "9800"
|
23
|
+
date:
|
24
|
+
- Tue, 08 Mar 2011 00:58:04 GMT
|
25
|
+
connection:
|
26
|
+
- keep-alive
|
27
|
+
body: <?xml version="1.0" ?><GenerateX509ForUserResponse xmlns="http://ec2.amazonaws.com/doc/2010-11-15/"><requestId>0B3PAS4ZCYMRW2L3EL78</requestId><username>foobar_user</username><secretkey>bd2c4c04-a2e7-4082-8482-778435b9427b</secretkey><accesskey>494e56aa-b021-4610-b7c0-e4434da1bf2f</accesskey><file>UEsDBBQAAAAAAEIHaD7YpiZC7AMAAOwDAAAGAAAAbm92YXJjTk9WQV9LRVlfRElSPSQocHVzaGQgJChkaXJuYW1lICRCQVNIX1NPVVJDRSk+L2Rldi9udWxsOyBwd2Q7IHBvcGQ+L2Rldi9udWxsKQpleHBvcnQgRUMyX0FDQ0VTU19LRVk9IjQ5NGU1NmFhLWIwMjEtNDYxMC1iN2MwLWU0NDM0ZGExYmYyZjpwcm9kdWN0aW9uIgpleHBvcnQgRUMyX1NFQ1JFVF9LRVk9ImJkMmM0YzA0LWEyZTctNDA4Mi04NDgyLTc3ODQzNWI5NDI3YiIKZXhwb3J0IEVDMl9VUkw9Imh0dHA6Ly8wLjAuMC4wOjg3NzMvc2VydmljZXMvQ2xvdWQiCmV4cG9ydCBTM19VUkw9Imh0dHA6Ly8wLjAuMC4wOjMzMzMiCmV4cG9ydCBFQzJfVVNFUl9JRD00MiAjIG5vdmEgZG9lcyBub3QgdXNlIHVzZXIgaWQsIGJ1dCBidW5kbGluZyByZXF1aXJlcyBpdApleHBvcnQgRUMyX1BSSVZBVEVfS0VZPSR7Tk9WQV9LRVlfRElSfS9way5wZW0KZXhwb3J0IEVDMl9DRVJUPSR7Tk9WQV9LRVlfRElSfS9jZXJ0LnBlbQpleHBvcnQgTk9WQV9DRVJUPSR7Tk9WQV9LRVlfRElSfS9jYWNlcnQucGVtCmV4cG9ydCBFVUNBTFlQVFVTX0NFUlQ9JHtOT1ZBX0NFUlR9ICMgZXVjYS1idW5kbGUtaW1hZ2Ugc2VlbXMgdG8gcmVxdWlyZSB0aGlzIHNldAphbGlhcyBlYzItYnVuZGxlLWltYWdlPSJlYzItYnVuZGxlLWltYWdlIC0tY2VydCAke0VDMl9DRVJUfSAtLXByaXZhdGVrZXkgJHtFQzJfUFJJVkFURV9LRVl9IC0tdXNlciA0MiAtLWVjMmNlcnQgJHtOT1ZBX0NFUlR9IgphbGlhcyBlYzItdXBsb2FkLWJ1bmRsZT0iZWMyLXVwbG9hZC1idW5kbGUgLWEgJHtFQzJfQUNDRVNTX0tFWX0gLXMgJHtFQzJfU0VDUkVUX0tFWX0gLS11cmwgJHtTM19VUkx9IC0tZWMyY2VydCAke05PVkFfQ0VSVH0iCmV4cG9ydCBDTE9VRF9TRVJWRVJTX0FQSV9LRVk9IjQ5NGU1NmFhLWIwMjEtNDYxMC1iN2MwLWU0NDM0ZGExYmYyZiIKZXhwb3J0IENMT1VEX1NFUlZFUlNfVVNFUk5BTUU9ImZvb2Jhcl91c2VyIgpleHBvcnQgQ0xPVURfU0VSVkVSU19VUkw9Imh0dHA6Ly8wLjAuMC4wOjg3NzQvdjEuMC8iCgpQSwMEFAAAAAAAQgdoPngFLUt7AwAAewMAAAYAAABway5wZW0tLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCk1JSUNYd0lCQUFLQmdRRE9mTGJudDlKYi9NTHpWRzYrRGNaSDRsV1NyMDlyNklHeWRoTHNnQVJ4M0VmNG1jZXYKKzExblBNSEZicDV5NDk3RFZVUEpjc1A5K29vSzcwRzUranErZVdlZDVNN28yS3MrenVXbVV2NjYvZ3FleVBRUQpFZExvWHYyZDlXdXVTeVl2SjEydFBZSGVMQ01rRGJZWUY5UWtIWWZld0ZBeUZyaCtJZjdQRXJ3c0JRSURBUUFCCkFvR0JBS1M0dHN5cFJ1WGRBTVJPc2IxcGphamd0TFU4cHhZRk9CbmV1WC96TEJpTXl0bFdEQWVtZGIrYXAxWFIKeGhNUEZ6RXFQdFpnZUZ1TzF6cWIzUW40eFl5bjVyRkdIVG5DQmVRV0s4VnZvU2hTUE4xSWo0aFJUT0RudkNtSQpmaE43L3l0MFRRU3dabFkwRUE3MUhUVFhLWFNBdjRNdFFYZ24zM1pzaFRZeldtSU5Ba0VBOW1GRXEwMk5BdVg1CnRLTDVkd00xNjlmbnFkcUhGYW1PSGhHdGdQdUQyUGRxYmFWbzZacnY0YkN2MlBmUm5YUWlVVjBRYTFrbVRkTnYKSmIxOGwxNU94d0pCQU5hTXNQVlFCV09TeTRuejlZcnZpYnhTQWMxMjJic2tyMkRXWTFFRFZxL0U1WUdKNFoxago3disxY0lYZW5pQXJDWDAyenRaZW9JWE8zdG9LRmJlTzB0TUNRUUNSaWFtZnEwTEYySVdsbjdQUENwVjZpR0l2CllvZnpVdUpCZnQzSDJFcnRDbEhURFNlby9yMyt5bmxGcURZcFZXWEVQRDRydTFDMkhsU0VyYWNBWDFRWEFrRUEKdXBYaWM0VWpHcVNZVktJUW9jS09NM1BTVTRDUC9GdjhGYWg4K1FDQlRCMWRSeG5GVjE2SWhHT2p0eGlTeGdFSApvSmlncXZmaWZGd2JuTjMyWXd0WHR3SkJBTUI2VWk3cW5ua3dsb3JZS2pSYm4zeWlUWER3cVZRYWpFbkU1L2pZCmkvN0dhTW5jRlNhdUhwcy8rWlJlR2dPR2lnM0dZQlh4em8rZnE3TC9QUklPZGVBPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpQSwMEFAAAAAAAQgdoPmgxUxDWCQAA1gkAAAgAAABjZXJ0LnBlbUNlcnRpZmljYXRlOgogICAgRGF0YToKICAgICAgICBWZXJzaW9uOiAxICgweDApCiAgICAgICAgU2VyaWFsIE51bWJlcjogMjkgKDB4MWQpCiAgICAgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQ1V2l0aFJTQUVuY3J5cHRpb24KICAgICAgICBJc3N1ZXI6IE89Tk9WQSBST09ULCBMPU1vdW50YWluIFZpZXcsIFNUPUNhbGlmb3JuaWEsIEM9VVMKICAgICAgICBWYWxpZGl0eQogICAgICAgICAgICBOb3QgQmVmb3JlOiBNYXIgIDggMDA6NTg6MDQgMjAxMSBHTVQKICAgICAgICAgICAgTm90IEFmdGVyIDogTWFyICA3IDAwOjU4OjA0IDIwMTIgR01UCiAgICAgICAgU3ViamVjdDogQz1VUywgU1Q9Q2FsaWZvcm5pYSwgTz1BbnNvTGFicywgT1U9Tm92YURldiwgQ049cHJvZHVjdGlvbi1mb29iYXJfdXNlci0yMDExLTAzLTA4VDAwOjU4OjA0WgogICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgogICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgogICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQogICAgICAgICAgICAgICAgTW9kdWx1czoKICAgICAgICAgICAgICAgICAgICAwMDpjZTo3YzpiNjplNzpiNzpkMjo1YjpmYzpjMjpmMzo1NDo2ZTpiZTowZDoKICAgICAgICAgICAgICAgICAgICBjNjo0NzplMjo1NTo5MjphZjo0Zjo2YjplODo4MTpiMjo3NjoxMjplYzo4MDoKICAgICAgICAgICAgICAgICAgICAwNDo3MTpkYzo0NzpmODo5OTpjNzphZjpmYjo1ZDo2NzozYzpjMTpjNTo2ZToKICAgICAgICAgICAgICAgICAgICA5ZTo3MjplMzpkZTpjMzo1NTo0MzpjOTo3MjpjMzpmZDpmYTo4YTowYTplZjoKICAgICAgICAgICAgICAgICAgICA0MTpiOTpmYTozYTpiZTo3OTo2Nzo5ZDplNDpjZTplODpkODphYjozZTpjZToKICAgICAgICAgICAgICAgICAgICBlNTphNjo1MjpmZTpiYTpmZTowYTo5ZTpjODpmNDoxMDoxMTpkMjplODo1ZToKICAgICAgICAgICAgICAgICAgICBmZDo5ZDpmNTo2YjphZTo0YjoyNjoyZjoyNzo1ZDphZDozZDo4MTpkZToyYzoKICAgICAgICAgICAgICAgICAgICAyMzoyNDowZDpiNjoxODoxNzpkNDoyNDoxZDo4NzpkZTpjMDo1MDozMjoxNjoKICAgICAgICAgICAgICAgICAgICBiODo3ZToyMTpmZTpjZjoxMjpiYzoyYzowNQogICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQogICAgU2lnbmF0dXJlIEFsZ29yaXRobTogbWQ1V2l0aFJTQUVuY3J5cHRpb24KICAgICAgICA5NDplZTpiMzozZDpmZjpmNjo1NzowNjpjZDo0MTo2YTplNjo0MDoxMDoxMDpiNDpjNjo0ZToKICAgICAgICBiMDowNzo3ZTpjNjo2MTpkODpkODo5ZjoxZDo5MDozYzoyNzpiODpiYzo0NjpmOTo3YjozZDoKICAgICAgICBmYjo4YjoyOTowYjoxMjpkOTpjODo1NDpmNzoyMDoxZTowMTpmYjozNzowODo4NzowZjo0ZDoKICAgICAgICA5NzozZTpiNDphZDo5NzpjYTpmYjpkNDpjMzpmNjpkODowYjpkNjo4NTozZDo2Yjo5ZTphNToKICAgICAgICA2NjoyYToyZTowOTo3ZDowNToxNjo4MzozZDoyNDozNDphMzo4MDplYjo4MzozODoyNTo2MToKICAgICAgICA2Mzo2MDoyNzo3Mzo1Yjo0MzpiNzplODowNzo2NDphNzozNTpkMDoyYzpiNzoxMzpkZjo2NDoKICAgICAgICA3ZTplYTpiMTo3YTowMjpkZTpmYzozNjo4Njo2Zjo3Yjo4YTowNjoxNjo0MTozODpmMjoyMDoKICAgICAgICA2YTo5ZAotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJQ09qQ0NBYU1DQVIwd0RRWUpLb1pJaHZjTkFRRUVCUUF3VGpFU01CQUdBMVVFQ2hNSlRrOVdRU0JTVDA5VQpNUll3RkFZRFZRUUhFdzFOYjNWdWRHRnBiaUJXYVdWM01STXdFUVlEVlFRSUV3cERZV3hwWm05eWJtbGhNUXN3CkNRWURWUVFHRXdKVlV6QWVGdzB4TVRBek1EZ3dNRFU0TURSYUZ3MHhNakF6TURjd01EVTRNRFJhTUgweEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saE1SRXdEd1lEVlFRS0RBaEJibk52VEdGaQpjekVRTUE0R0ExVUVDd3dIVG05MllVUmxkakUwTURJR0ExVUVBd3dyY0hKdlpIVmpkR2x2YmkxbWIyOWlZWEpmCmRYTmxjaTB5TURFeExUQXpMVEE0VkRBd09qVTRPakEwV2pDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXcKZ1lrQ2dZRUF6bnkyNTdmU1cvekM4MVJ1dmczR1IrSlZrcTlQYStpQnNuWVM3SUFFY2R4SCtKbkhyL3RkWnp6Qgp4VzZlY3VQZXcxVkR5WExEL2ZxS0N1OUJ1Zm82dm5sbm5lVE82TmlyUHM3bHBsTCt1djRLbnNqMEVCSFM2Rjc5Cm5mVnJya3NtTHlkZHJUMkIzaXdqSkEyMkdCZlVKQjJIM3NCUU1oYTRmaUgrenhLOExBVUNBd0VBQVRBTkJna3EKaGtpRzl3MEJBUVFGQUFPQmdRQ1U3ck05Ly9aWEJzMUJhdVpBRUJDMHhrNndCMzdHWWRqWW54MlFQQ2U0dkViNQplejM3aXlrTEV0bklWUGNnSGdIN053aUhEMDJYUHJTdGw4cjcxTVAyMkF2V2hUMXJucVZtS2k0SmZRVVdnejBrCk5LT0E2NE00SldGallDZHpXME8zNkFka3B6WFFMTGNUMzJSKzZyRjZBdDc4Tm9admU0b0dGa0U0OGlCcW5RPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpQSwMEFAAAAAAAQgdoPvjYZrmOBAAAjgQAAA0AAABub3ZhLXZwbi5jb25mIyB2aW06IHRhYnN0b3A9NCBzaGlmdHdpZHRoPTQgc29mdHRhYnN0b3A9NAoKIyBDb3B5cmlnaHQgMjAxMCBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgdGhlCiMgQWRtaW5pc3RyYXRvciBvZiB0aGUgTmF0aW9uYWwgQWVyb25hdXRpY3MgYW5kIFNwYWNlIEFkbWluaXN0cmF0aW9uLgojIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiMKIyAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heQojICAgIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluCiMgICAgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAojCiMgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQojICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKIyAgICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKIyAgICBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwojICAgIHVuZGVyIHRoZSBMaWNlbnNlLgoKIyBOT1ZBIHVzZXIgY29ubmVjdGlvbgojIEVkaXQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBwb2ludCB0byB5b3VyIGNlcnQgZmlsZXM6CmNlcnQgY2VydC5wZW0Ka2V5IHBrLnBlbQoKY2EgY2FjZXJ0LnBlbQoKY2xpZW50CmRldiB0YXAKcHJvdG8gdWRwCgpyZW1vdGUgMTAuMS4xNzAuMzIgMTAwMApyZXNvbHYtcmV0cnkgaW5maW5pdGUKbm9iaW5kCgojIERvd25ncmFkZSBwcml2aWxlZ2VzIGFmdGVyIGluaXRpYWxpemF0aW9uIChub24tV2luZG93cyBvbmx5KQp1c2VyIG5vYm9keQpncm91cCBub2dyb3VwCmNvbXAtbHpvCgojIFNldCBsb2cgZmlsZSB2ZXJib3NpdHkuCnZlcmIgMgoKa2VlcGFsaXZlIDEwIDEyMApwaW5nLXRpbWVyLXJlbQpwZXJzaXN0LXR1bgpwZXJzaXN0LWtleQpQSwMEFAAAAAAAQgdoPjP33SUFBAAABQQAAAoAAABjYWNlcnQucGVtLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5ekNDQWpTZ0F3SUJBZ0lKQUsrVm53V2NuNU9CTUEwR0NTcUdTSWIzRFFFQkJBVUFNRTR4RWpBUUJnTlYKQkFvVENVNVBWa0VnVWs5UFZERVdNQlFHQTFVRUJ4TU5UVzkxYm5SaGFXNGdWbWxsZHpFVE1CRUdBMVVFQ0JNSwpRMkZzYVdadmNtNXBZVEVMTUFrR0ExVUVCaE1DVlZNd0hoY05NVEV3TVRJM01qRXdOVEl5V2hjTk1USXdNVEkzCk1qRXdOVEl5V2pCT01SSXdFQVlEVlFRS0V3bE9UMVpCSUZKUFQxUXhGakFVQmdOVkJBY1REVTF2ZFc1MFlXbHUKSUZacFpYY3hFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4Q3pBSkJnTlZCQVlUQWxWVE1JR2ZNQTBHQ1NxRwpTSWIzRFFFQkFRVUFBNEdOQURDQmlRS0JnUUROSDJVOXRaT05yM2dTNGsrMWtTZDFjMzFmTnRsTTJrWEhGN3RBCmxjQ21SYUxReXUvQnNFR2J5T2t4bWdyK1RrZlZpaXBiaGU1Z0VzWkxCV3piVVB0MDlsb0ZENjltNXNBcU9zbVQKbXQvUU9FZUVFdXNJSWg4UjM0QStEL1pJR3pWeGhGMnRSejhWT0l6bDdzUi9ZcnVnWkxla2Y5L2lVbmE3RzI1bwppT1RjK1FJREFRQUJvNEd3TUlHdE1Bd0dBMVVkRXdRRk1BTUJBZjh3SFFZRFZSME9CQllFRkJDeTkwVWJScTZJCk12SWoyeUc0M0ZGWGZXSWpNSDRHQTFVZEl3UjNNSFdBRkJDeTkwVWJScTZJTXZJajJ5RzQzRkZYZldJam9WS2sKVURCT01SSXdFQVlEVlFRS0V3bE9UMVpCSUZKUFQxUXhGakFVQmdOVkJBY1REVTF2ZFc1MFlXbHVJRlpwWlhjeApFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4Q3pBSkJnTlZCQVlUQWxWVGdna0FyNVdmQlp5Zms0RXdEUVlKCktvWklodmNOQVFFRUJRQURnWUVBcHZGY1REZVZFdGRYc3E2MUpENzBvaithVlBmUjdFT09iYmU5eFhySFFBaU4KVWo4c21qY1RGWXBubHFlNHZoRC9KRFpCdTNFS3JxZkpRd3pnVDMyaWZUK25GVnhqc1I4cm1GandMU3h3NUtCWgpIOUhId1d6Y0lvMXZYZGFoQnROZlZ6bWQvUjdPNzkyY1IwL3lmZXE5Z0FJQTRrdjhHZkVXM1FtencwS0lRMlE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KUEsBAhQDFAAAAAAAQgdoPtimJkLsAwAA7AMAAAYAAAAAAAAAAAAAAIABAAAAAG5vdmFyY1BLAQIUAxQAAAAAAEIHaD54BS1LewMAAHsDAAAGAAAAAAAAAAAAAACAARAEAABway5wZW1QSwECFAMUAAAAAABCB2g+aDFTENYJAADWCQAACAAAAAAAAAAAAAAAgAGvBwAAY2VydC5wZW1QSwECFAMUAAAAAABCB2g++NhmuY4EAACOBAAADQAAAAAAAAAAAAAAgAGrEQAAbm92YS12cG4uY29uZlBLAQIUAxQAAAAAAEIHaD4z990lBQQAAAUEAAAKAAAAAAAAAAAAAACAAWQWAABjYWNlcnQucGVtUEsFBgAAAAAFAAUAEQEAAJEaAAAAAA==</file></GenerateX509ForUserResponse>
|
28
|
+
http_version: "1.1"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
---
|
2
|
+
- !ruby/struct:VCR::HTTPInteraction
|
3
|
+
request: !ruby/struct:VCR::Request
|
4
|
+
method: :get
|
5
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=DescribeUser&Name=invalid_username&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&Version=2010-11-15&Signature=O4Ljcvuo%2BKnDxxWssxqGF36cNu%2B4WFRrI%2FPVD4BmAE4%3D
|
6
|
+
body:
|
7
|
+
headers:
|
8
|
+
accept:
|
9
|
+
- application/xml
|
10
|
+
connection:
|
11
|
+
- keep-alive
|
12
|
+
keep-alive:
|
13
|
+
- 30
|
14
|
+
response: !ruby/struct:VCR::Response
|
15
|
+
status: !ruby/struct:VCR::ResponseStatus
|
16
|
+
code: 400
|
17
|
+
message: Bad Request
|
18
|
+
headers:
|
19
|
+
content-type:
|
20
|
+
- text/xml
|
21
|
+
content-length:
|
22
|
+
- "189"
|
23
|
+
date:
|
24
|
+
- Mon, 07 Mar 2011 04:52:21 GMT
|
25
|
+
connection:
|
26
|
+
- keep-alive
|
27
|
+
body: |-
|
28
|
+
<?xml version="1.0"?>
|
29
|
+
<Response><Errors><Error><Code>NotFound</Code><Message>No user for id invalid_username</Message></Error></Errors><RequestID>0R2C84PAWETJ033HJLX2</RequestID></Response>
|
30
|
+
http_version: "1.1"
|
31
|
+
- !ruby/struct:VCR::HTTPInteraction
|
32
|
+
request: !ruby/struct:VCR::Request
|
33
|
+
method: :get
|
34
|
+
uri: http://10.1.170.32:8773/services/Admin/?AWSAccessKeyId=1d7a687b-0065-44d6-9611-5bf6c6c72424%3Aproduction&Action=DescribeUser&Name=invalid_user_name&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=1999-12-31T19%3A59%3A59Z&Version=2010-11-15&Signature=5K4TfIF6QONc2CZjSsZHsgixj61JYDO4c1B1TndWe9A%3D
|
35
|
+
body:
|
36
|
+
headers:
|
37
|
+
accept:
|
38
|
+
- application/xml
|
39
|
+
connection:
|
40
|
+
- keep-alive
|
41
|
+
keep-alive:
|
42
|
+
- 30
|
43
|
+
response: !ruby/struct:VCR::Response
|
44
|
+
status: !ruby/struct:VCR::ResponseStatus
|
45
|
+
code: 400
|
46
|
+
message: Bad Request
|
47
|
+
headers:
|
48
|
+
content-type:
|
49
|
+
- text/xml
|
50
|
+
content-length:
|
51
|
+
- "190"
|
52
|
+
date:
|
53
|
+
- Mon, 07 Mar 2011 23:40:04 GMT
|
54
|
+
connection:
|
55
|
+
- keep-alive
|
56
|
+
body: |-
|
57
|
+
<?xml version="1.0"?>
|
58
|
+
<Response><Errors><Error><Code>NotFound</Code><Message>No user for id invalid_user_name</Message></Error></Errors><RequestID>N3AL9FC3HF0YCKA5AZLG</RequestID></Response>
|
59
|
+
http_version: "1.1"
|
@@ -37,7 +37,7 @@ describe Nephophobia::Project do
|
|
37
37
|
end
|
38
38
|
|
39
39
|
describe "#create" do
|
40
|
-
it "creates the given 'project_name'" do
|
40
|
+
it "creates the given 'user_name' in the specified 'project_name'" do
|
41
41
|
VCR.use_cassette "project_create" do
|
42
42
|
response = @project.create @project_name, @user_name
|
43
43
|
|
@@ -80,6 +80,16 @@ describe Nephophobia::Project do
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
+
describe "#find with invalid project_name" do
|
84
|
+
it "rescues Hugs::Errors::BadRequest" do
|
85
|
+
VCR.use_cassette "project_find_with_invalid_username" do
|
86
|
+
@response = @project.find "invalid_project_name"
|
87
|
+
end
|
88
|
+
|
89
|
+
@response.must_be_nil
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
83
93
|
describe "#members" do
|
84
94
|
before { @project_name = "production" }
|
85
95
|
|
@@ -87,7 +97,22 @@ describe Nephophobia::Project do
|
|
87
97
|
VCR.use_cassette "project_members" do
|
88
98
|
response = @project.members @project_name
|
89
99
|
|
90
|
-
response.size.must_equal
|
100
|
+
response.size.must_equal 10
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "#member?" do
|
106
|
+
before do
|
107
|
+
@user_name = "jdewey"
|
108
|
+
@project_name = "production"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "returns true if the given 'user_name' is a member of the specified 'project_name'" do
|
112
|
+
VCR.use_cassette "project_members" do
|
113
|
+
response = @project.member? @user_name, @project_name
|
114
|
+
|
115
|
+
response.must_equal true
|
91
116
|
end
|
92
117
|
end
|
93
118
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
|
3
|
+
describe Nephophobia::Role do
|
4
|
+
before do
|
5
|
+
@role = ADMIN_CLIENT.role
|
6
|
+
@user_name = "foobar_user"
|
7
|
+
@project_name = "foobar_project"
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#create" do
|
11
|
+
it "adds the default role to the given 'user_name' and 'project_name'" do
|
12
|
+
VCR.use_cassette "role_create" do
|
13
|
+
response = @role.create @user_name, @project_name
|
14
|
+
|
15
|
+
response.return.must_equal true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#destroy" do
|
21
|
+
it "removes the default role to the given 'user_name' and 'project_name'" do
|
22
|
+
VCR.use_cassette "role_destroy" do
|
23
|
+
response = @role.destroy @user_name, @project_name
|
24
|
+
|
25
|
+
response.return.must_equal true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#all" do
|
31
|
+
it "returns all roles for the given 'user_name' and 'project_name'" do
|
32
|
+
VCR.use_cassette "role_all" do
|
33
|
+
response = @role.all @user_name, @project_name
|
34
|
+
|
35
|
+
response.size.must_equal 2
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "has a 'TypeError: can't convert String into Integer' error" do
|
40
|
+
VCR.use_cassette "role_all_with_string_into_int_error" do
|
41
|
+
response = @role.all @user_name, @project_name
|
42
|
+
|
43
|
+
response.size.must_equal 1
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
it "has a 'NoMethodError: undefined method `[]' for nil:NilClass' error" do
|
48
|
+
VCR.use_cassette "role_all_with_no_roles" do
|
49
|
+
response = @role.all @user_name, @project_name
|
50
|
+
|
51
|
+
response.must_be_nil
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -2,19 +2,8 @@ require "test_helper"
|
|
2
2
|
|
3
3
|
describe Nephophobia::User do
|
4
4
|
before do
|
5
|
-
@user
|
6
|
-
@user_name
|
7
|
-
@project_name = "foobar_project"
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#add_role" do
|
11
|
-
it "adds the default role to the given 'user_name'" do
|
12
|
-
VCR.use_cassette "user_add_role" do
|
13
|
-
response = @user.add_role @user_name, @project_name
|
14
|
-
|
15
|
-
response.return.must_equal true
|
16
|
-
end
|
17
|
-
end
|
5
|
+
@user = ADMIN_CLIENT.user
|
6
|
+
@user_name = "foobar_user"
|
18
7
|
end
|
19
8
|
|
20
9
|
describe "#create" do
|
@@ -27,6 +16,18 @@ describe Nephophobia::User do
|
|
27
16
|
end
|
28
17
|
end
|
29
18
|
|
19
|
+
describe "#credentials" do
|
20
|
+
before { @project_name = "production" }
|
21
|
+
|
22
|
+
it "returns the credentials for a given 'user_name' for the specified 'project_name'." do
|
23
|
+
VCR.use_cassette "user_credentials" do
|
24
|
+
response = @user.credentials @user_name, @project_name
|
25
|
+
|
26
|
+
response.must_match %r{BEGIN CERTIFICATE}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
30
31
|
describe "#destroy" do
|
31
32
|
it "destroys the given 'user_name'" do
|
32
33
|
VCR.use_cassette "user_destroy" do
|
@@ -59,13 +60,13 @@ describe Nephophobia::User do
|
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
62
|
-
describe "#
|
63
|
-
it "
|
64
|
-
VCR.use_cassette "
|
65
|
-
response = @user.
|
66
|
-
|
67
|
-
response.return.must_equal true
|
63
|
+
describe "#find with invalid user_name" do
|
64
|
+
it "rescues Hugs::Errors::BadRequest" do
|
65
|
+
VCR.use_cassette "user_find_with_invalid_user_name" do
|
66
|
+
@response = @user.find "invalid_user_name"
|
68
67
|
end
|
68
|
+
|
69
|
+
@response.must_be_nil
|
69
70
|
end
|
70
71
|
end
|
71
72
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: nephophobia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- John Dewey
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2011-03-
|
14
|
+
date: 2011-03-08 00:00:00 -08:00
|
15
15
|
default_executable:
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
@@ -140,18 +140,25 @@ files:
|
|
140
140
|
- test/fixtures/cassettes/project_create.yml
|
141
141
|
- test/fixtures/cassettes/project_destroy.yml
|
142
142
|
- test/fixtures/cassettes/project_find.yml
|
143
|
+
- test/fixtures/cassettes/project_find_with_invalid_username.yml
|
143
144
|
- test/fixtures/cassettes/project_members.yml
|
144
145
|
- test/fixtures/cassettes/project_remove_member.yml
|
145
|
-
- test/fixtures/cassettes/
|
146
|
+
- test/fixtures/cassettes/role_all.yml
|
147
|
+
- test/fixtures/cassettes/role_all_with_no_roles.yml
|
148
|
+
- test/fixtures/cassettes/role_all_with_string_into_int_error.yml
|
149
|
+
- test/fixtures/cassettes/role_create.yml
|
150
|
+
- test/fixtures/cassettes/role_destroy.yml
|
146
151
|
- test/fixtures/cassettes/user_create.yml
|
152
|
+
- test/fixtures/cassettes/user_credentials.yml
|
147
153
|
- test/fixtures/cassettes/user_destroy.yml
|
148
154
|
- test/fixtures/cassettes/user_find.yml
|
149
|
-
- test/fixtures/cassettes/
|
155
|
+
- test/fixtures/cassettes/user_find_with_invalid_user_name.yml
|
150
156
|
- test/lib/aws_test.rb
|
151
157
|
- test/lib/hashify_test.rb
|
152
158
|
- test/lib/nephophobia/compute_test.rb
|
153
159
|
- test/lib/nephophobia/image_test.rb
|
154
160
|
- test/lib/nephophobia/project_test.rb
|
161
|
+
- test/lib/nephophobia/role_test.rb
|
155
162
|
- test/lib/nephophobia/user_test.rb
|
156
163
|
- test/lib/nephophobia_test.rb
|
157
164
|
- test/test_helper.rb
|
@@ -204,18 +211,25 @@ test_files:
|
|
204
211
|
- test/fixtures/cassettes/project_create.yml
|
205
212
|
- test/fixtures/cassettes/project_destroy.yml
|
206
213
|
- test/fixtures/cassettes/project_find.yml
|
214
|
+
- test/fixtures/cassettes/project_find_with_invalid_username.yml
|
207
215
|
- test/fixtures/cassettes/project_members.yml
|
208
216
|
- test/fixtures/cassettes/project_remove_member.yml
|
209
|
-
- test/fixtures/cassettes/
|
217
|
+
- test/fixtures/cassettes/role_all.yml
|
218
|
+
- test/fixtures/cassettes/role_all_with_no_roles.yml
|
219
|
+
- test/fixtures/cassettes/role_all_with_string_into_int_error.yml
|
220
|
+
- test/fixtures/cassettes/role_create.yml
|
221
|
+
- test/fixtures/cassettes/role_destroy.yml
|
210
222
|
- test/fixtures/cassettes/user_create.yml
|
223
|
+
- test/fixtures/cassettes/user_credentials.yml
|
211
224
|
- test/fixtures/cassettes/user_destroy.yml
|
212
225
|
- test/fixtures/cassettes/user_find.yml
|
213
|
-
- test/fixtures/cassettes/
|
226
|
+
- test/fixtures/cassettes/user_find_with_invalid_user_name.yml
|
214
227
|
- test/lib/aws_test.rb
|
215
228
|
- test/lib/hashify_test.rb
|
216
229
|
- test/lib/nephophobia/compute_test.rb
|
217
230
|
- test/lib/nephophobia/image_test.rb
|
218
231
|
- test/lib/nephophobia/project_test.rb
|
232
|
+
- test/lib/nephophobia/role_test.rb
|
219
233
|
- test/lib/nephophobia/user_test.rb
|
220
234
|
- test/lib/nephophobia_test.rb
|
221
235
|
- test/test_helper.rb
|