yao 0.13.4 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/rubocop.yml +19 -0
- data/.github/workflows/ubuntu-rvm.yml +1 -1
- data/.github/workflows/ubuntu.yml +2 -2
- data/.rubocop.yml +3 -6
- data/lib/yao/auth.rb +18 -0
- data/lib/yao/client.rb +1 -1
- data/lib/yao/config.rb +19 -0
- data/lib/yao/faraday_middlewares.rb +37 -3
- data/lib/yao/mode.rb +4 -0
- data/lib/yao/plugins/default_client_generator.rb +0 -1
- data/lib/yao/plugins/registry.rb +2 -1
- data/lib/yao/resources/action.rb +7 -0
- data/lib/yao/resources/aggregates.rb +1 -0
- data/lib/yao/resources/base.rb +39 -6
- data/lib/yao/resources/compute_services.rb +8 -1
- data/lib/yao/resources/flavor.rb +12 -0
- data/lib/yao/resources/floating_ip.rb +2 -6
- data/lib/yao/resources/hypervisor.rb +1 -1
- data/lib/yao/resources/image.rb +2 -0
- data/lib/yao/resources/loadbalancer.rb +4 -0
- data/lib/yao/resources/loadbalancer_healthmonitor.rb +3 -0
- data/lib/yao/resources/loadbalancer_listener.rb +2 -0
- data/lib/yao/resources/loadbalancer_pool.rb +13 -17
- data/lib/yao/resources/loadbalancer_pool_member.rb +21 -0
- data/lib/yao/resources/metadata_available.rb +21 -0
- data/lib/yao/resources/meter.rb +9 -2
- data/lib/yao/resources/network.rb +2 -1
- data/lib/yao/resources/network_associationable.rb +1 -0
- data/lib/yao/resources/old_sample.rb +5 -1
- data/lib/yao/resources/port.rb +3 -1
- data/lib/yao/resources/port_associationable.rb +1 -0
- data/lib/yao/resources/project.rb +11 -0
- data/lib/yao/resources/{tenant_associationable.rb → project_associationable.rb} +5 -4
- data/lib/yao/resources/resource.rb +9 -3
- data/lib/yao/resources/restfully_accessible.rb +18 -2
- data/lib/yao/resources/role.rb +6 -4
- data/lib/yao/resources/role_assignment.rb +37 -4
- data/lib/yao/resources/router.rb +26 -8
- data/lib/yao/resources/sample.rb +4 -0
- data/lib/yao/resources/security_group.rb +2 -1
- data/lib/yao/resources/security_group_rule.rb +10 -0
- data/lib/yao/resources/server.rb +21 -1
- data/lib/yao/resources/server_group.rb +1 -1
- data/lib/yao/resources/server_usage_associationable.rb +12 -0
- data/lib/yao/resources/subnet.rb +2 -1
- data/lib/yao/resources/tenant.rb +11 -0
- data/lib/yao/resources/user.rb +8 -1
- data/lib/yao/resources/volume.rb +14 -1
- data/lib/yao/resources/volume_action.rb +13 -0
- data/lib/yao/resources.rb +4 -1
- data/lib/yao/token.rb +1 -0
- data/lib/yao/version.rb +1 -1
- data/test/yao/resources/test_base.rb +32 -0
- data/test/yao/resources/test_flavor.rb +67 -33
- data/test/yao/resources/test_floating_ip.rb +5 -5
- data/test/yao/resources/test_image.rb +5 -0
- data/test/yao/resources/test_loadbalancer_pool.rb +146 -1
- data/test/yao/resources/test_meter.rb +5 -5
- data/test/yao/resources/test_network.rb +6 -6
- data/test/yao/resources/test_port.rb +6 -6
- data/test/yao/resources/test_project.rb +45 -6
- data/test/yao/resources/test_restfully_accessible.rb +46 -4
- data/test/yao/resources/test_role_assignment.rb +100 -3
- data/test/yao/resources/test_router.rb +33 -12
- data/test/yao/resources/test_security_group.rb +5 -5
- data/test/yao/resources/test_server.rb +6 -6
- data/test/yao/resources/test_server_group.rb +1 -1
- data/test/yao/resources/test_subnet.rb +6 -6
- data/test/yao/resources/test_user.rb +28 -1
- data/test/yao/resources/test_volume.rb +81 -1
- data/test/yao/test_client.rb +0 -1
- data/yao.gemspec +1 -1
- metadata +11 -8
@@ -88,13 +88,13 @@ class TestMeter < TestYaoResource
|
|
88
88
|
assert_requested(stub)
|
89
89
|
end
|
90
90
|
|
91
|
-
def
|
92
|
-
stub = stub_request(:get, "https://example.com:12345/
|
91
|
+
def test_project
|
92
|
+
stub = stub_request(:get, "https://example.com:12345/projects/00000000-0000-0000-0000-000000000000")
|
93
93
|
.to_return(
|
94
94
|
status: 200,
|
95
95
|
body: <<-JSON,
|
96
96
|
{
|
97
|
-
"
|
97
|
+
"project": {
|
98
98
|
"id": "00000000-0000-0000-0000-000000000000"
|
99
99
|
}
|
100
100
|
}
|
@@ -107,8 +107,8 @@ class TestMeter < TestYaoResource
|
|
107
107
|
}
|
108
108
|
|
109
109
|
meter = Yao::Meter.new(params)
|
110
|
-
assert_instance_of(Yao::
|
111
|
-
assert_equal("00000000-0000-0000-0000-000000000000", meter.
|
110
|
+
assert_instance_of(Yao::Project, meter.project)
|
111
|
+
assert_equal("00000000-0000-0000-0000-000000000000", meter.project.id)
|
112
112
|
|
113
113
|
assert_requested(stub)
|
114
114
|
end
|
@@ -37,14 +37,14 @@ class TestNetwork < TestYaoResource
|
|
37
37
|
assert_equal(1000, network.segmentation_id)
|
38
38
|
end
|
39
39
|
|
40
|
-
def
|
40
|
+
def test_project
|
41
41
|
|
42
|
-
stub = stub_request(:get, "https://example.com:12345/
|
42
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
43
43
|
.to_return(
|
44
44
|
status: 200,
|
45
45
|
body: <<-JSON,
|
46
46
|
{
|
47
|
-
"
|
47
|
+
"project": {
|
48
48
|
"id": "0123456789abcdef0123456789abcdef"
|
49
49
|
}
|
50
50
|
}
|
@@ -57,9 +57,9 @@ class TestNetwork < TestYaoResource
|
|
57
57
|
"tenant_id" => "0123456789abcdef0123456789abcdef",
|
58
58
|
)
|
59
59
|
|
60
|
-
assert_instance_of(Yao::
|
61
|
-
assert_instance_of(Yao::
|
62
|
-
assert_equal('0123456789abcdef0123456789abcdef', network.
|
60
|
+
assert_instance_of(Yao::Project, network.tenant)
|
61
|
+
assert_instance_of(Yao::Project, network.project)
|
62
|
+
assert_equal('0123456789abcdef0123456789abcdef', network.project.id)
|
63
63
|
|
64
64
|
assert_requested(stub)
|
65
65
|
end
|
@@ -77,14 +77,14 @@ class TestPort < TestYaoResource
|
|
77
77
|
assert_equal("10.0.0.1", port.primary_ip)
|
78
78
|
end
|
79
79
|
|
80
|
-
def
|
80
|
+
def test_project
|
81
81
|
|
82
|
-
stub = stub_request(:get, "https://example.com:12345/
|
82
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
83
83
|
.to_return(
|
84
84
|
status: 200,
|
85
85
|
body: <<-JSON,
|
86
86
|
{
|
87
|
-
"
|
87
|
+
"project": {
|
88
88
|
"id": "0123456789abcdef0123456789abcdef"
|
89
89
|
}
|
90
90
|
}
|
@@ -92,9 +92,9 @@ class TestPort < TestYaoResource
|
|
92
92
|
headers: {'Content-Type' => 'application/json'}
|
93
93
|
)
|
94
94
|
|
95
|
-
port = Yao::Port.new('
|
96
|
-
assert_instance_of(Yao::
|
97
|
-
assert_equal('0123456789abcdef0123456789abcdef', port.
|
95
|
+
port = Yao::Port.new('project_id' => '0123456789abcdef0123456789abcdef')
|
96
|
+
assert_instance_of(Yao::Project, port.project)
|
97
|
+
assert_equal('0123456789abcdef0123456789abcdef', port.project.id)
|
98
98
|
|
99
99
|
assert_requested(stub)
|
100
100
|
end
|
@@ -1,9 +1,4 @@
|
|
1
1
|
class TestProject < TestYaoResource
|
2
|
-
def setup
|
3
|
-
super
|
4
|
-
Yao.default_client.admin_pool["identity"] = Yao::Client.gen_client("https://example.com:12345/v2.0")
|
5
|
-
end
|
6
|
-
|
7
2
|
# https://docs.openstack.org/api-ref/identity/v3/?expanded=list-projects-detail#projects
|
8
3
|
def test_project
|
9
4
|
params = {
|
@@ -254,4 +249,48 @@ class TestProject < TestYaoResource
|
|
254
249
|
assert_instance_of(Array, project.servers)
|
255
250
|
assert_requested(stub)
|
256
251
|
end
|
257
|
-
|
252
|
+
|
253
|
+
def test_server_usage
|
254
|
+
stub = stub_request(:get, "https://example.com:12345/os-simple-tenant-usage/0123456789abcdef0123456789abcdef")
|
255
|
+
.to_return(
|
256
|
+
status: 200,
|
257
|
+
body: <<-JSON,
|
258
|
+
{
|
259
|
+
"tenant_usage": {
|
260
|
+
"total_memory_mb_usage": 1024
|
261
|
+
}
|
262
|
+
}
|
263
|
+
JSON
|
264
|
+
headers: {'Content-Type' => 'application/json'}
|
265
|
+
)
|
266
|
+
|
267
|
+
project = Yao::Project::new("id" => "0123456789abcdef0123456789abcdef")
|
268
|
+
usage = project.server_usage
|
269
|
+
assert_equal(1024, usage["total_memory_mb_usage"])
|
270
|
+
end
|
271
|
+
|
272
|
+
def test_role_assignment
|
273
|
+
project_id = 'aaaa166533fd49f3b11b1cdce2430000'
|
274
|
+
stub = stub_request(:get, "https://example.com:12345/role_assignments?scope.project.id=#{project_id}").
|
275
|
+
to_return(
|
276
|
+
status: 200,
|
277
|
+
body: <<-JSON,
|
278
|
+
{
|
279
|
+
"role_assignments": [{
|
280
|
+
"scope": {
|
281
|
+
"project": {
|
282
|
+
"id": "aaaa166533fd49f3b11b1cdce2430000"
|
283
|
+
}
|
284
|
+
}
|
285
|
+
}]
|
286
|
+
}
|
287
|
+
JSON
|
288
|
+
headers: {'Content-Type' => 'application/json'}
|
289
|
+
)
|
290
|
+
|
291
|
+
project = Yao::Project.new('id' => project_id)
|
292
|
+
role_assignment = project.role_assignment
|
293
|
+
assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
|
294
|
+
assert_requested(stub)
|
295
|
+
end
|
296
|
+
end
|
@@ -1,6 +1,18 @@
|
|
1
1
|
class TestRestfullyAccesible < Test::Unit::TestCase
|
2
2
|
include RestfullyAccessibleStub
|
3
3
|
class Test
|
4
|
+
def initialize(data_via_json)
|
5
|
+
@data = data_via_json
|
6
|
+
end
|
7
|
+
|
8
|
+
def id
|
9
|
+
@data['id']
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
@data['name']
|
14
|
+
end
|
15
|
+
|
4
16
|
class << self
|
5
17
|
attr_accessor :client
|
6
18
|
end
|
@@ -45,7 +57,7 @@ class TestRestfullyAccesible < Test::Unit::TestCase
|
|
45
57
|
|
46
58
|
stub_get_request_not_found([@url, @resources_name, name].join('/'))
|
47
59
|
stub_get_request([@url, "#{@resources_name}?name=dummy"].join('/'), @resources_name)
|
48
|
-
mock(Test).new("dummy_resource") { Struct.new(:id).new(uuid) }
|
60
|
+
mock(Test).new("dummy_resource") { Struct.new(:id, :name).new(uuid, name) }
|
49
61
|
stub_get_request([@url, @resources_name, uuid].join('/'), @resources_name)
|
50
62
|
mock(Test).new("dummy_resource") { "OK" }
|
51
63
|
|
@@ -60,7 +72,7 @@ class TestRestfullyAccesible < Test::Unit::TestCase
|
|
60
72
|
|
61
73
|
stub_get_request_not_found([@url, @resources_name, name].join('/'))
|
62
74
|
stub_get_request_with_json_response([@url, "#{@resources_name}?name=dummy"].join('/'), body)
|
63
|
-
mock(Test).new("dummy_resources") { Struct.new(:id).new(uuid) }
|
75
|
+
mock(Test).new("dummy_resources") { Struct.new(:id, :name).new(uuid, name) }
|
64
76
|
stub_get_request([@url, @resources_name, uuid].join('/'), @resource_name)
|
65
77
|
mock(Test).new("dummy_resource") { "OK" }
|
66
78
|
|
@@ -84,8 +96,17 @@ class TestRestfullyAccesible < Test::Unit::TestCase
|
|
84
96
|
|
85
97
|
sub_test_case 'get!' do
|
86
98
|
test 'not found' do
|
87
|
-
|
88
|
-
|
99
|
+
Test.return_single_on_querying = false
|
100
|
+
name = "dummy"
|
101
|
+
uuid = "00112233-4455-6677-8899-aabbccddeeff"
|
102
|
+
body = {@resources_name => []}
|
103
|
+
|
104
|
+
stub1 = stub_get_request_not_found([@url, @resources_name, name].join('/'))
|
105
|
+
stub2 = stub_get_request_with_json_response([@url, "#{@resources_name}?name=#{name}"].join('/'), body)
|
106
|
+
|
107
|
+
assert_equal(nil, Test.get!(name))
|
108
|
+
assert_requested(stub1)
|
109
|
+
assert_requested(stub2)
|
89
110
|
end
|
90
111
|
|
91
112
|
test 'found' do
|
@@ -103,6 +124,23 @@ class TestRestfullyAccesible < Test::Unit::TestCase
|
|
103
124
|
end
|
104
125
|
end
|
105
126
|
|
127
|
+
sub_test_case 'get_by_name' do
|
128
|
+
test 'multiple found' do
|
129
|
+
name = 'dummy'
|
130
|
+
uuid = '00112233-4455-6677-8899-aabbccddeeff'
|
131
|
+
list_body = { @resources_name => [
|
132
|
+
{ 'name' => 'dummy', 'id' => uuid },
|
133
|
+
{ 'name' => 'dummy2', 'id' => '308cb410-9c84-40ec-a3eb-583001aaa7fd' }
|
134
|
+
]}
|
135
|
+
get_body = { @resource_name => { 'name' => 'dummy', 'id' => uuid } }
|
136
|
+
stub1 = stub_get_request_not_found([@url, @resources_name, name].join('/'))
|
137
|
+
stub2 = stub_get_request_with_json_response([@url, "#{@resources_name}?name=#{name}"].join('/'), list_body)
|
138
|
+
stub3 = stub_get_request_with_json_response([@url, @resources_name, name].join('/'), get_body)
|
139
|
+
|
140
|
+
assert_equal(uuid, Test.send(:get_by_name, 'dummy').body[@resource_name]['id'])
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
106
144
|
def test_find_by_name
|
107
145
|
mock(Test).list({"name" => "dummy"}) { "dummy" }
|
108
146
|
|
@@ -116,4 +154,8 @@ class TestRestfullyAccesible < Test::Unit::TestCase
|
|
116
154
|
assert_equal(false, Test.send(:uuid?, "dummy resource"))
|
117
155
|
assert_equal(false, Test.send(:uuid?, "00112233445566778899aabbccddeeff"))
|
118
156
|
end
|
157
|
+
|
158
|
+
def test_delete
|
159
|
+
assert_equal(Test.method(:delete), Test.method(:destroy))
|
160
|
+
end
|
119
161
|
end
|
@@ -32,13 +32,110 @@ class TestRoleAssignment < TestYaoResource
|
|
32
32
|
assert_equal("313233", role_assignment.user.id)
|
33
33
|
end
|
34
34
|
|
35
|
+
def test_list
|
36
|
+
stub = stub_request(:get, "https://example.com:12345/role_assignments").
|
37
|
+
to_return(
|
38
|
+
status: 200,
|
39
|
+
body: <<-JSON,
|
40
|
+
{
|
41
|
+
"role_assignments": [{
|
42
|
+
"scope": {
|
43
|
+
"project": {
|
44
|
+
"id": "aaaa166533fd49f3b11b1cdce2430000"
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}]
|
48
|
+
}
|
49
|
+
JSON
|
50
|
+
headers: {'Content-Type' => 'application/json'}
|
51
|
+
)
|
52
|
+
role_assignment = Yao::RoleAssignment.list
|
53
|
+
assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
|
54
|
+
assert_requested(stub)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_get_user
|
58
|
+
user_id = '123456'
|
59
|
+
stub = stub_request(:get, "https://example.com:12345/role_assignments?user.id=#{user_id}").
|
60
|
+
to_return(
|
61
|
+
status: 200,
|
62
|
+
body: <<-JSON,
|
63
|
+
{
|
64
|
+
"role_assignments": [{
|
65
|
+
"scope": {
|
66
|
+
"project": {
|
67
|
+
"id": "aaaa166533fd49f3b11b1cdce2430000"
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}]
|
71
|
+
}
|
72
|
+
JSON
|
73
|
+
headers: {'Content-Type' => 'application/json'}
|
74
|
+
)
|
75
|
+
|
76
|
+
user = Yao::User.new('id' => user_id)
|
77
|
+
role_assignment = Yao::RoleAssignment.get(user: user)
|
78
|
+
assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
|
79
|
+
assert_requested(stub)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_get_project
|
83
|
+
project_id = 'aaaa166533fd49f3b11b1cdce2430000'
|
84
|
+
stub = stub_request(:get, "https://example.com:12345/role_assignments?scope.project.id=#{project_id}").
|
85
|
+
to_return(
|
86
|
+
status: 200,
|
87
|
+
body: <<-JSON,
|
88
|
+
{
|
89
|
+
"role_assignments": [{
|
90
|
+
"scope": {
|
91
|
+
"project": {
|
92
|
+
"id": "aaaa166533fd49f3b11b1cdce2430000"
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}]
|
96
|
+
}
|
97
|
+
JSON
|
98
|
+
headers: {'Content-Type' => 'application/json'}
|
99
|
+
)
|
100
|
+
|
101
|
+
project = Yao::Project.new('id' => project_id)
|
102
|
+
role_assignment = Yao::RoleAssignment.get(project: project)
|
103
|
+
assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
|
104
|
+
assert_requested(stub)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_get_tenant
|
108
|
+
tenant_id = 'aaaa166533fd49f3b11b1cdce2430000'
|
109
|
+
stub = stub_request(:get, "https://example.com:12345/role_assignments?scope.project.id=#{tenant_id}").
|
110
|
+
to_return(
|
111
|
+
status: 200,
|
112
|
+
body: <<-JSON,
|
113
|
+
{
|
114
|
+
"role_assignments": [{
|
115
|
+
"scope": {
|
116
|
+
"project": {
|
117
|
+
"id": "aaaa166533fd49f3b11b1cdce2430000"
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}]
|
121
|
+
}
|
122
|
+
JSON
|
123
|
+
headers: {'Content-Type' => 'application/json'}
|
124
|
+
)
|
125
|
+
|
126
|
+
tenant = Yao::Project.new('id' => tenant_id)
|
127
|
+
role_assignment = Yao::RoleAssignment.get(tenant: tenant)
|
128
|
+
assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
|
129
|
+
assert_requested(stub)
|
130
|
+
end
|
131
|
+
|
35
132
|
def test_project
|
36
|
-
stub = stub_request(:get, "
|
133
|
+
stub = stub_request(:get, "https://example.com:12345/projects/456789").
|
37
134
|
to_return(
|
38
135
|
status: 200,
|
39
136
|
body: <<-JSON,
|
40
137
|
{
|
41
|
-
"
|
138
|
+
"project": {
|
42
139
|
"id": "456789"
|
43
140
|
}
|
44
141
|
}
|
@@ -55,7 +152,7 @@ class TestRoleAssignment < TestYaoResource
|
|
55
152
|
}
|
56
153
|
|
57
154
|
role_assignment = Yao::RoleAssignment.new(params)
|
58
|
-
assert_instance_of(Yao::
|
155
|
+
assert_instance_of(Yao::Project, role_assignment.project)
|
59
156
|
assert_equal("456789", role_assignment.project.id)
|
60
157
|
|
61
158
|
assert_requested(stub)
|
@@ -95,12 +95,33 @@ class TestRouter < TestYaoResource
|
|
95
95
|
assert_equal([], router.availability_zone_hints)
|
96
96
|
assert_equal([ "nova" ], router.availability_zones)
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
98
|
+
stub = stub_request(:get, "https://example.com:12345/networks/ae34051f-aa6c-4c75-abf5-50dc9ac99ef3")
|
99
|
+
.to_return(
|
100
|
+
status: 200,
|
101
|
+
body: <<~JSON,
|
102
|
+
{
|
103
|
+
"network": {
|
104
|
+
"id": "ae34051f-aa6c-4c75-abf5-50dc9ac99ef3",
|
105
|
+
"name": "example-network"
|
106
|
+
}
|
107
|
+
}
|
108
|
+
JSON
|
109
|
+
headers: {'Content-Type' => 'application/json'}
|
110
|
+
)
|
111
|
+
assert_instance_of(Yao::Network, router.external_network)
|
112
|
+
assert_equal("ae34051f-aa6c-4c75-abf5-50dc9ac99ef3", router.external_network.id)
|
113
|
+
assert_equal("example-network", router.external_network.name)
|
114
|
+
assert_equal(true, router.enable_snat)
|
115
|
+
assert_equal([
|
116
|
+
{
|
117
|
+
"ip_address" => "172.24.4.3",
|
118
|
+
"subnet_id" => "b930d7f6-ceb7-40a0-8b81-a425dd994ccf"
|
119
|
+
},
|
120
|
+
{
|
121
|
+
"ip_address" => "2001:db8::c",
|
122
|
+
"subnet_id" => "0c56df5d-ace5-46c8-8f4c-45fa4e334d18"
|
123
|
+
}
|
124
|
+
], router.external_fixed_ips)
|
104
125
|
end
|
105
126
|
|
106
127
|
def test_iterfaces
|
@@ -129,14 +150,14 @@ class TestRouter < TestYaoResource
|
|
129
150
|
assert_requested(stub)
|
130
151
|
end
|
131
152
|
|
132
|
-
def
|
153
|
+
def test_project
|
133
154
|
|
134
|
-
stub = stub_request(:get, "https://example.com:12345/
|
155
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
135
156
|
.to_return(
|
136
157
|
status: 200,
|
137
158
|
body: <<-JSON,
|
138
159
|
{
|
139
|
-
"
|
160
|
+
"project": {
|
140
161
|
"id": "0123456789abcdef0123456789abcdef"
|
141
162
|
}
|
142
163
|
}
|
@@ -144,9 +165,9 @@ class TestRouter < TestYaoResource
|
|
144
165
|
headers: {'Content-Type' => 'application/json'}
|
145
166
|
)
|
146
167
|
|
147
|
-
router = Yao::Router.new('
|
148
|
-
assert_instance_of(Yao::
|
149
|
-
assert_equal('0123456789abcdef0123456789abcdef', router.
|
168
|
+
router = Yao::Router.new('project_id' => '0123456789abcdef0123456789abcdef')
|
169
|
+
assert_instance_of(Yao::Project, router.project)
|
170
|
+
assert_equal('0123456789abcdef0123456789abcdef', router.project.id)
|
150
171
|
|
151
172
|
assert_requested(stub)
|
152
173
|
end
|
@@ -25,12 +25,12 @@ class TestSecurityGroup < TestYaoResource
|
|
25
25
|
|
26
26
|
def test_sg_to_tenant
|
27
27
|
|
28
|
-
stub = stub_request(:get, "https://example.com:12345/
|
28
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
29
29
|
.to_return(
|
30
30
|
status: 200,
|
31
31
|
body: <<-JSON,
|
32
32
|
{
|
33
|
-
"
|
33
|
+
"project": {
|
34
34
|
"id": "0123456789abcdef0123456789abcdef"
|
35
35
|
}
|
36
36
|
}
|
@@ -38,9 +38,9 @@ class TestSecurityGroup < TestYaoResource
|
|
38
38
|
headers: {'Content-Type' => 'application/json'}
|
39
39
|
)
|
40
40
|
|
41
|
-
sg = Yao::SecurityGroup.new('
|
42
|
-
assert_instance_of(Yao::
|
43
|
-
assert_equal('0123456789abcdef0123456789abcdef', sg.
|
41
|
+
sg = Yao::SecurityGroup.new('project_id' => '0123456789abcdef0123456789abcdef')
|
42
|
+
assert_instance_of(Yao::Project, sg.project)
|
43
|
+
assert_equal('0123456789abcdef0123456789abcdef', sg.project.id)
|
44
44
|
|
45
45
|
assert_requested(stub)
|
46
46
|
end
|
@@ -206,14 +206,14 @@ class TestServer < TestYaoResource
|
|
206
206
|
assert_equal(Yao::Server.method(:list), Yao::Server.method(:list_detail))
|
207
207
|
end
|
208
208
|
|
209
|
-
def
|
209
|
+
def test_project
|
210
210
|
|
211
|
-
stub = stub_request(:get, "https://example.com:12345/
|
211
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
212
212
|
.to_return(
|
213
213
|
status: 200,
|
214
214
|
body: <<-JSON,
|
215
215
|
{
|
216
|
-
"
|
216
|
+
"project": {
|
217
217
|
"id": "0123456789abcdef0123456789abcdef"
|
218
218
|
}
|
219
219
|
}
|
@@ -221,9 +221,9 @@ class TestServer < TestYaoResource
|
|
221
221
|
headers: {'Content-Type' => 'application/json'}
|
222
222
|
)
|
223
223
|
|
224
|
-
server = Yao::Server.new('
|
225
|
-
assert_instance_of(Yao::
|
226
|
-
assert_equal('0123456789abcdef0123456789abcdef', server.
|
224
|
+
server = Yao::Server.new('project_id' => '0123456789abcdef0123456789abcdef')
|
225
|
+
assert_instance_of(Yao::Project, server.project)
|
226
|
+
assert_equal('0123456789abcdef0123456789abcdef', server.project.id)
|
227
227
|
|
228
228
|
assert_requested(stub)
|
229
229
|
end
|
@@ -76,13 +76,13 @@ class TestSubnet < TestYaoResource
|
|
76
76
|
assert_requested(stub)
|
77
77
|
end
|
78
78
|
|
79
|
-
def
|
80
|
-
stub = stub_request(:get, "https://example.com:12345/
|
79
|
+
def test_project
|
80
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
81
81
|
.to_return(
|
82
82
|
status: 200,
|
83
83
|
body: <<-JSON,
|
84
84
|
{
|
85
|
-
"
|
85
|
+
"project": {
|
86
86
|
"id": "0123456789abcdef0123456789abcdef"
|
87
87
|
}
|
88
88
|
}
|
@@ -90,9 +90,9 @@ class TestSubnet < TestYaoResource
|
|
90
90
|
headers: {'Content-Type' => 'application/json'}
|
91
91
|
)
|
92
92
|
|
93
|
-
subnet = Yao::Subnet.new('
|
94
|
-
assert_instance_of(Yao::
|
95
|
-
assert_equal('0123456789abcdef0123456789abcdef', subnet.
|
93
|
+
subnet = Yao::Subnet.new('project_id' => '0123456789abcdef0123456789abcdef')
|
94
|
+
assert_instance_of(Yao::Project, subnet.project)
|
95
|
+
assert_equal('0123456789abcdef0123456789abcdef', subnet.project.id)
|
96
96
|
|
97
97
|
assert_requested(stub)
|
98
98
|
end
|
@@ -1,16 +1,43 @@
|
|
1
1
|
class TestUser < TestYaoResource
|
2
|
-
def
|
2
|
+
def test_user
|
3
3
|
params = {
|
4
|
+
"id" => '1234567890',
|
4
5
|
"name" => "test_user",
|
5
6
|
"email" => "test-user@example.com",
|
6
7
|
"password" => "passw0rd"
|
7
8
|
}
|
8
9
|
|
9
10
|
user = Yao::User.new(params)
|
11
|
+
assert_equal("1234567890", user.id)
|
10
12
|
assert_equal("test_user", user.name)
|
11
13
|
assert_equal("test-user@example.com", user.email)
|
12
14
|
end
|
13
15
|
|
16
|
+
def test_role_assignment
|
17
|
+
user_id = '123456'
|
18
|
+
stub = stub_request(:get, "https://example.com:12345/role_assignments?user.id=#{user_id}").
|
19
|
+
to_return(
|
20
|
+
status: 200,
|
21
|
+
body: <<-JSON,
|
22
|
+
{
|
23
|
+
"role_assignments": [{
|
24
|
+
"scope": {
|
25
|
+
"project": {
|
26
|
+
"id": "aaaa166533fd49f3b11b1cdce2430000"
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}]
|
30
|
+
}
|
31
|
+
JSON
|
32
|
+
headers: {'Content-Type' => 'application/json'}
|
33
|
+
)
|
34
|
+
|
35
|
+
user = Yao::User.new('id' => user_id)
|
36
|
+
role_assignment = user.role_assignment
|
37
|
+
assert_equal('aaaa166533fd49f3b11b1cdce2430000', role_assignment.first.scope['project']['id'])
|
38
|
+
assert_requested(stub)
|
39
|
+
end
|
40
|
+
|
14
41
|
sub_test_case 'with keystone v2.0' do
|
15
42
|
def setup
|
16
43
|
super
|
@@ -1,13 +1,35 @@
|
|
1
1
|
class TestVolume < TestYaoResource
|
2
2
|
def test_volume
|
3
3
|
params = {
|
4
|
+
'attachments' => [],
|
5
|
+
'availability_zone' => 'test',
|
6
|
+
'bootable' => true,
|
7
|
+
'encrypted' => false,
|
8
|
+
'metadata' => {},
|
9
|
+
'multiattach' => false,
|
4
10
|
'name' => 'cinder',
|
5
|
-
'
|
11
|
+
'replication_status' => 'disabled',
|
12
|
+
'size' => 10,
|
13
|
+
'snapshot_id' => nil,
|
14
|
+
'status' => 'available',
|
15
|
+
'user_id' => 'aaaa166533fd49f3b11b1cdce2430000',
|
16
|
+
'volume_type' => 'test'
|
6
17
|
}
|
7
18
|
|
8
19
|
volume = Yao::Volume.new(params)
|
20
|
+
assert_equal(volume.attachments, [])
|
21
|
+
assert_equal(volume.availability_zone, 'test')
|
22
|
+
assert_equal(volume.bootable, true)
|
23
|
+
assert_equal(volume.encrypted, false)
|
24
|
+
assert_equal(volume.metadata, {})
|
25
|
+
assert_equal(volume.multiattach, false)
|
9
26
|
assert_equal(volume.name, 'cinder')
|
27
|
+
assert_equal(volume.replication_status, 'disabled')
|
10
28
|
assert_equal(volume.size, 10)
|
29
|
+
assert_equal(volume.snapshot_id, nil)
|
30
|
+
assert_equal(volume.user_id, 'aaaa166533fd49f3b11b1cdce2430000')
|
31
|
+
assert_equal(volume.volume_type, 'test')
|
32
|
+
assert_equal(volume.type, 'test')
|
11
33
|
end
|
12
34
|
|
13
35
|
def test_list
|
@@ -39,4 +61,62 @@ class TestVolume < TestYaoResource
|
|
39
61
|
def test_list_detail
|
40
62
|
assert_equal(Yao::Volume.method(:list), Yao::Volume.method(:list_detail))
|
41
63
|
end
|
64
|
+
|
65
|
+
def stub_action_request(id, body)
|
66
|
+
# https://docs.openstack.org/api-ref/block-storage/v3/index.html?expanded=list-accessible-volumes-with-details-detail,reset-a-volume-s-statuses-detail#reset-a-volume-s-statuses
|
67
|
+
stub_request(:post, "https://example.com:12345/volumes/#{id}/action").
|
68
|
+
with(
|
69
|
+
body: body,
|
70
|
+
headers: {
|
71
|
+
'Accept'=>'application/json',
|
72
|
+
'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
73
|
+
'Content-Type'=>'application/json',
|
74
|
+
'User-Agent'=>"Yao/#{Yao::VERSION} Faraday/#{Faraday::VERSION}"
|
75
|
+
}).
|
76
|
+
to_return(
|
77
|
+
status: 202,
|
78
|
+
body: '',
|
79
|
+
headers: {'Content-Type' => 'application/json'}
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_set_status
|
84
|
+
volume_id = '00000000-0000-0000-0000-000000000000'
|
85
|
+
|
86
|
+
stub = stub_action_request(volume_id, {'os-reset_status': {'status': 'error'}})
|
87
|
+
Yao::Volume.set_status(volume_id, 'error')
|
88
|
+
assert_requested(stub)
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_set_status_on_instance
|
92
|
+
volume_id = '00000000-0000-0000-0000-000000000000'
|
93
|
+
stub = stub_action_request(volume_id, {'os-reset_status': {'status': 'error'}})
|
94
|
+
params = {
|
95
|
+
'id' => volume_id,
|
96
|
+
}
|
97
|
+
volume = Yao::Volume.new(params)
|
98
|
+
volume.status = 'error'
|
99
|
+
assert_requested(stub)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_project
|
103
|
+
stub = stub_request(:get, "https://example.com:12345/projects/0123456789abcdef0123456789abcdef")
|
104
|
+
.to_return(
|
105
|
+
status: 200,
|
106
|
+
body: <<-JSON,
|
107
|
+
{
|
108
|
+
"project": {
|
109
|
+
"id": "0123456789abcdef0123456789abcdef"
|
110
|
+
}
|
111
|
+
}
|
112
|
+
JSON
|
113
|
+
headers: {'Content-Type' => 'application/json'}
|
114
|
+
)
|
115
|
+
|
116
|
+
volume = Yao::Volume.new('project_id' => '0123456789abcdef0123456789abcdef')
|
117
|
+
assert_instance_of(Yao::Project, volume.project)
|
118
|
+
assert_equal('0123456789abcdef0123456789abcdef', volume.project.id)
|
119
|
+
|
120
|
+
assert_requested(stub)
|
121
|
+
end
|
42
122
|
end
|