Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Simon János
/
orchestrator
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/prog2
Commit
09e73a8e
authored
Dec 17, 2016
by
Simon János
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added new resource types; changed tests accordingly
parent
553e5137
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
174 additions
and
52 deletions
+174
-52
orchestrator/model/resources.py
+78
-8
tests/test_api.py
+26
-3
tests/test_model.py
+70
-41
No files found.
orchestrator/model/resources.py
View file @
09e73a8e
import
copy
import
json
import
uuid
from
socket
import
inet_aton
from
enum
import
Enum
from
oslo_config
import
cfg
from
voluptuous
import
Schema
,
Invalid
,
MultipleInvalid
,
Any
,
ALLOW_EXTRA
,
PREVENT_EXTRA
,
re
,
Required
,
Optional
,
All
,
\
Range
from
voluptuous
import
Schema
,
Invalid
,
MultipleInvalid
,
Any
,
ALLOW_EXTRA
,
PREVENT_EXTRA
,
re
from
orchestrator.util.task_client
import
Tasks
class
Resource
(
object
):
...
...
@@ -23,7 +27,7 @@ class Resource(object):
@classmethod
def
__attributes_from_dict
(
cls
,
attributes
):
cls
.
__validate_attributes
(
attributes
,
cls
.
__schema
(
extend
=
False
))
attributes
=
copy
.
deepcopy
(
attributes
)
attributes
=
attributes
.
copy
(
)
attributes
[
'id'
]
=
attributes
.
get
(
'id'
,
Resource
.
__generate_random_id
())
attributes
[
'type'
]
=
ResourceType
.
validate
(
attributes
.
get
(
'type'
,
cls
))
return
attributes
...
...
@@ -37,17 +41,28 @@ class Resource(object):
@classmethod
def
__schema
(
cls
,
resource_type
=
None
,
extend
=
False
):
schema
=
Schema
(
schema
=
{
'id'
:
cls
.
_
_
id_validator
,
'type'
:
ResourceType
.
validate
},
extra
=
ALLOW_EXTRA
)
schema
=
Schema
(
schema
=
{
'id'
:
cls
.
_id_validator
,
'type'
:
ResourceType
.
validate
},
extra
=
ALLOW_EXTRA
)
if
extend
:
additional
=
resource_type
.
ADDITIONAL_SCHEMA
if
resource_type
else
cls
.
ADDITIONAL_SCHEMA
schema
=
schema
.
extend
(
additional
,
extra
=
PREVENT_EXTRA
)
return
schema
@staticmethod
def
_
_
id_validator
(
resource_id
):
def
_id_validator
(
resource_id
):
if
not
re
.
compile
(
'^[a-zA-Z0-9_-]{2,42}$'
)
.
match
(
resource_id
):
raise
Invalid
(
"'
%
s' is invalid"
%
resource_id
)
@staticmethod
def
_mac_validator
(
mac
):
return
re
.
match
(
"[0-9a-f]{2}([-:])[0-9a-f]{2}(
\\
1[0-9a-f]{2}){4}$"
,
mac
.
lower
())
@staticmethod
def
_ip_validator
(
ip_address
):
try
:
return
inet_aton
(
ip_address
)
except
AttributeError
:
return
False
@property
def
type
(
self
):
return
str
(
self
.
_attributes
[
'type'
])
...
...
@@ -92,7 +107,10 @@ class Resource(object):
def
flatten
(
self
,
fqn
=
None
,
flat_leaves
=
True
):
fqn
=
'
%
s.
%
s'
%
(
fqn
,
self
.
id
)
if
fqn
else
self
.
id
if
flat_leaves
:
return
{
'
%
s.
%
s'
%
(
fqn
,
key
):
str
(
value
)
for
key
,
value
in
self
.
items
()}
leaves
=
{}
for
key
,
value
in
self
.
items
():
leaves
[
'
%
s.
%
s'
%
(
fqn
,
key
)]
=
str
(
value
)
if
isinstance
(
value
,
ResourceType
)
else
value
return
leaves
return
{
fqn
:
self
}
@staticmethod
...
...
@@ -101,10 +119,13 @@ class Resource(object):
return
str
(
data
)
return
dict
(
data
)
def
deploy
(
self
,
name
):
pass
class
ResourceGroup
(
Resource
):
ADDITIONAL_SCHEMA
=
{
'resources'
:
Any
(
list
,
set
,
tuple
)
Optional
(
'resources'
)
:
Any
(
list
,
set
,
tuple
)
}
def
__init__
(
self
,
*
_
,
**
__
):
...
...
@@ -162,7 +183,53 @@ class ResourceGroup(Resource):
class
Instance
(
Resource
):
ADDITIONAL_SCHEMA
=
{
'number_of_cores'
:
int
Required
(
'cpu_count'
):
int
,
Required
(
'memory'
):
int
}
def
deploy
(
self
,
name
):
args
=
{
'name'
:
name
,
'vcpu'
:
self
.
cpu_count
,
'memory_max'
:
self
.
memory
}
result
=
Tasks
.
send_task
(
'vmdriver.create'
,
args
=
[
args
])
return
result
class
Disk
(
Resource
):
ADDITIONAL_SCHEMA
=
{
Required
(
'size'
):
All
(
int
,
Range
(
min
=
1
)),
Optional
(
'base'
):
str
}
def
deploy
(
self
,
name
):
args
=
{
'dir'
:
cfg
.
CONF
.
storage
.
datastore_root
,
'name'
:
name
,
'format'
:
'qcow2'
,
'type'
:
'normal'
,
'size'
:
self
.
size
,
'base_name'
:
self
.
base
or
None
}
task_name
=
'storagedriver.snapshot'
if
self
.
base
else
'storagedriver.create'
result
=
Tasks
.
send_task
(
task_name
,
args
=
[
args
])
return
result
class
DiskAttachment
(
Resource
):
ADDITIONAL_SCHEMA
=
{
Required
(
'instance_id'
):
Resource
.
_id_validator
,
Required
(
'stack_id'
):
Resource
.
_id_validator
}
class
NetworkConnection
(
Resource
):
ADDITIONAL_SCHEMA
=
{
Required
(
'instance_id'
):
Resource
.
_id_validator
,
Required
(
'mac'
):
Resource
.
_mac_validator
,
Required
(
'vlan'
):
All
(
int
,
Range
(
min
=
1
,
max
=
4094
)),
Required
(
'ip_address'
):
Resource
.
_ip_validator
}
...
...
@@ -170,6 +237,9 @@ class ResourceType(Enum):
null
=
Resource
group
=
ResourceGroup
instance
=
Instance
disk
=
Disk
attachment
=
DiskAttachment
connection
=
NetworkConnection
@classmethod
def
validate
(
cls
,
value
):
...
...
tests/test_api.py
View file @
09e73a8e
...
...
@@ -5,6 +5,10 @@ from falcon.testing import TestCase
from
orchestrator.api
import
stacks
TEST_INSTANCE_ARGS
=
{
'cpu_count'
:
2
,
'memory'
:
256
*
1000
*
1000
}
class
StackTest
(
TestCase
):
def
setUp
(
self
):
...
...
@@ -30,7 +34,9 @@ class StackTest(TestCase):
'resources'
:
[
{
'id'
:
'instance-1'
,
'type'
:
'instance'
'type'
:
'instance'
,
'cpu_count'
:
1
,
'memory'
:
100
},
{
'id'
:
'level-1'
,
...
...
@@ -38,11 +44,23 @@ class StackTest(TestCase):
'resources'
:
[
{
'id'
:
'instance-2'
,
'type'
:
'instance'
'type'
:
'instance'
,
'cpu_count'
:
2
,
'memory'
:
200
},
{
'id'
:
'instance-3'
,
'type'
:
'instance'
'type'
:
'instance'
,
'cpu_count'
:
3
,
'memory'
:
300
},
{
'id'
:
'connection-1'
,
'type'
:
'connection'
,
'instance_id'
:
'instance-1'
,
'vlan'
:
42
,
'mac'
:
'aa:bb:cc:dd:ee:ff'
,
'ip_address'
:
'10.0.0.42'
}
]
}
...
...
@@ -96,6 +114,7 @@ class StackTest(TestCase):
resource_id
=
'new_resource'
group1
=
{
'id'
:
stack_id
,
'type'
:
'group'
,
'resources'
:
[]}
resource
=
{
'id'
:
resource_id
,
'type'
:
'instance'
}
resource
.
update
(
TEST_INSTANCE_ARGS
)
group2
=
{
'id'
:
stack_id
,
'type'
:
'group'
,
'resources'
:
[
resource
]}
expected_diff
=
{
'added'
:
{
...
...
@@ -117,6 +136,7 @@ class StackTest(TestCase):
# given
resource_id
=
'some_resource'
resource
=
{
'id'
:
resource_id
,
'type'
:
'instance'
}
resource
.
update
(
TEST_INSTANCE_ARGS
)
# when
self
.
simulate_post
(
'/stacks'
,
body
=
json
.
dumps
(
resource
))
...
...
@@ -132,7 +152,9 @@ class StackTest(TestCase):
def
test_stacks_api_get_list
(
self
):
# given
resource1
=
{
'id'
:
'some_resource'
,
'type'
:
'instance'
}
resource1
.
update
(
TEST_INSTANCE_ARGS
)
resource2
=
{
'id'
:
'some_other_resource'
,
'type'
:
'instance'
}
resource2
.
update
(
TEST_INSTANCE_ARGS
)
# when
self
.
simulate_post
(
'/stacks'
,
body
=
json
.
dumps
(
resource1
))
...
...
@@ -148,6 +170,7 @@ class StackTest(TestCase):
# given
resource_id
=
'some_resource'
resource
=
{
'id'
:
resource_id
,
'type'
:
'instance'
}
resource
.
update
(
TEST_INSTANCE_ARGS
)
# when
self
.
simulate_post
(
'/stacks'
,
body
=
json
.
dumps
(
resource
))
...
...
tests/test_model.py
View file @
09e73a8e
...
...
@@ -4,6 +4,11 @@ from unittest.case import TestCase
from
orchestrator.model.resources
import
Resource
,
ResourceGroup
,
Instance
,
InvalidResourceException
,
ResourceType
TEST_INSTANCE_ARGS
=
{
'cpu_count'
:
2
,
'memory'
:
256
*
1000
*
1000
}
class
ResourceTest
(
TestCase
):
def
test_resource_without_args
(
self
):
...
...
@@ -16,7 +21,7 @@ class ResourceTest(TestCase):
expected_type
=
ResourceType
.
instance
# when
result
=
Resource
(
id
=
expected_id
,
type
=
expected_type
)
result
=
Resource
(
id
=
expected_id
,
type
=
expected_type
,
**
TEST_INSTANCE_ARGS
)
# then
self
.
assertEqual
(
expected_id
,
result
.
id
)
...
...
@@ -25,6 +30,7 @@ class ResourceTest(TestCase):
def
test_resource_from_dict
(
self
):
# given
resource_dict
=
{
'id'
:
'dummy_resource'
,
'type'
:
'instance'
}
resource_dict
.
update
(
TEST_INSTANCE_ARGS
)
# when
result
=
Resource
(
resource_dict
)
...
...
@@ -55,24 +61,27 @@ class ResourceTest(TestCase):
for
invalid_id
in
invalid_ids
:
with
self
.
assertRaises
(
InvalidResourceException
):
Instance
(
id
=
invalid_id
)
Instance
(
id
=
invalid_id
,
**
TEST_INSTANCE_ARGS
)
self
.
assertIsInstance
(
Instance
(
id
=
'valid_id'
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'valid-id'
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'VALID'
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'123456'
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'_id-42'
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'valid_id'
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'valid-id'
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'VALID'
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'123456'
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertIsInstance
(
Instance
(
id
=
'_id-42'
,
**
TEST_INSTANCE_ARGS
),
Instance
)
def
test_resource_type_validation
(
self
):
self
.
assertTrue
(
ResourceType
.
validate
(
'instance'
))
self
.
assertTrue
(
ResourceType
.
validate
(
Instance
))
self
.
assertTrue
(
ResourceType
.
validate
(
ResourceType
.
instance
))
self
.
assertIsInstance
(
Resource
(
type
=
'instance'
),
Instance
)
self
.
assertIsInstance
(
Resource
(
type
=
Instance
),
Instance
)
self
.
assertIsInstance
(
Resource
(
type
=
ResourceType
.
instance
),
Instance
)
self
.
assertEqual
(
Instance
(
id
=
'some_instance'
),
Resource
(
id
=
'some_instance'
,
type
=
'instance'
))
self
.
assertEqual
(
Instance
(
id
=
'some_instance'
),
Resource
(
id
=
'some_instance'
,
type
=
Instance
))
self
.
assertEqual
(
Instance
(
id
=
'some_instance'
),
Resource
(
id
=
'some_instance'
,
type
=
ResourceType
.
instance
))
self
.
assertIsInstance
(
Resource
(
type
=
'instance'
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertIsInstance
(
Resource
(
type
=
Instance
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertIsInstance
(
Resource
(
type
=
ResourceType
.
instance
,
**
TEST_INSTANCE_ARGS
),
Instance
)
self
.
assertEqual
(
Instance
(
id
=
'some_instance'
,
**
TEST_INSTANCE_ARGS
),
Resource
(
id
=
'some_instance'
,
type
=
'instance'
,
**
TEST_INSTANCE_ARGS
))
self
.
assertEqual
(
Instance
(
id
=
'some_instance'
,
**
TEST_INSTANCE_ARGS
),
Resource
(
id
=
'some_instance'
,
type
=
Instance
,
**
TEST_INSTANCE_ARGS
))
self
.
assertEqual
(
Instance
(
id
=
'some_instance'
,
**
TEST_INSTANCE_ARGS
),
Resource
(
id
=
'some_instance'
,
type
=
ResourceType
.
instance
,
**
TEST_INSTANCE_ARGS
))
def
test_resource_type_invalid
(
self
):
with
self
.
assertRaises
(
ValueError
):
...
...
@@ -80,7 +89,7 @@ class ResourceTest(TestCase):
def
test_resource_instance
(
self
):
# when
instance
=
Instance
()
instance
=
Instance
(
TEST_INSTANCE_ARGS
)
# then
self
.
assertIsInstance
(
instance
.
id
,
str
)
...
...
@@ -89,10 +98,10 @@ class ResourceTest(TestCase):
def
test_resource_equivalence
(
self
):
# given
resource1
=
Resource
(
id
=
'some_resource'
,
type
=
Instance
)
resource2
=
Resource
(
id
=
'some_resource'
,
type
=
Instance
)
resource3
=
Instance
(
id
=
'some_resource'
)
resource4
=
Resource
(
id
=
'some_other_resource'
,
type
=
Instance
)
resource1
=
Resource
(
id
=
'some_resource'
,
type
=
Instance
,
**
TEST_INSTANCE_ARGS
)
resource2
=
Resource
(
id
=
'some_resource'
,
type
=
Instance
,
**
TEST_INSTANCE_ARGS
)
resource3
=
Instance
(
id
=
'some_resource'
,
**
TEST_INSTANCE_ARGS
)
resource4
=
Resource
(
id
=
'some_other_resource'
,
type
=
Instance
,
**
TEST_INSTANCE_ARGS
)
resource5
=
Resource
(
id
=
'some_resource'
,
type
=
ResourceGroup
)
# then
...
...
@@ -107,10 +116,12 @@ class ResourceTest(TestCase):
# given
expected_json
=
'{"id": "some_resource", "type": "instance"}'
expected_dict
=
json
.
loads
(
expected_json
)
expected_dict
.
update
(
TEST_INSTANCE_ARGS
)
# when
resource
=
Resource
(
expected_dict
)
resource_dict
=
json
.
loads
(
str
(
resource
))
resource_dict
.
update
(
TEST_INSTANCE_ARGS
)
# then
self
.
assertEqual
(
expected_dict
,
resource_dict
)
...
...
@@ -118,6 +129,7 @@ class ResourceTest(TestCase):
def
test_resource_dict_representation
(
self
):
# given
expected_dict
=
{
'id'
:
'some_resource'
,
'type'
:
ResourceType
.
instance
}
expected_dict
.
update
(
TEST_INSTANCE_ARGS
)
# when
resource
=
Resource
(
expected_dict
)
...
...
@@ -128,11 +140,12 @@ class ResourceTest(TestCase):
def
test_resource_dynamic_type
(
self
):
# when
resource
=
Resource
(
type
=
'instance'
)
args
=
dict
(
type
=
'instance'
,
**
TEST_INSTANCE_ARGS
)
# then
self
.
__assert_is_instance
(
resource
)
self
.
__assert_is_instance
(
Resource
({
'type'
:
'instance'
}))
self
.
__assert_is_instance
(
Resource
(
args
))
self
.
__assert_is_instance
(
Resource
(
**
args
))
self
.
__assert_is_instance
(
Instance
(
**
args
))
with
self
.
assertRaises
(
InvalidResourceException
):
Resource
()
...
...
@@ -152,8 +165,8 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_from_resources
(
self
):
# given
resource1
=
Instance
(
id
=
'some_resource'
)
resource2
=
Instance
(
id
=
'some_other_resource'
)
resource1
=
Instance
(
id
=
'some_resource'
,
**
TEST_INSTANCE_ARGS
)
resource2
=
Instance
(
id
=
'some_other_resource'
,
**
TEST_INSTANCE_ARGS
)
# then
self
.
assertEqual
([
resource1
],
ResourceGroup
(
resources
=
[
resource1
])
.
resources
)
...
...
@@ -168,8 +181,8 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_from_dicts
(
self
):
# given
dict1
=
dict
(
id
=
'some_resource'
,
type
=
Instance
)
dict2
=
dict
(
id
=
'some_other_resource'
,
type
=
Instance
)
dict1
=
dict
(
id
=
'some_resource'
,
type
=
Instance
,
**
TEST_INSTANCE_ARGS
)
dict2
=
dict
(
id
=
'some_other_resource'
,
type
=
Instance
,
**
TEST_INSTANCE_ARGS
)
expected1
=
Instance
(
dict1
)
expected2
=
Instance
(
dict2
)
...
...
@@ -188,7 +201,7 @@ class ResourceGroupTest(TestCase):
'id'
:
expected_group_id
,
'type'
:
'group'
,
'resources'
:
[
{
'id'
:
expected_resource_id
,
'type'
:
'instance'
}
dict
(
id
=
expected_resource_id
,
type
=
'instance'
,
**
TEST_INSTANCE_ARGS
)
]
}
...
...
@@ -203,7 +216,7 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_add_resource
(
self
):
# given
group
=
ResourceGroup
()
resource
=
Instance
()
resource
=
Instance
(
TEST_INSTANCE_ARGS
)
# when
group
.
add
(
resource
)
...
...
@@ -214,7 +227,7 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_remove_resource
(
self
):
# given
resource
=
Instance
()
resource
=
Instance
(
TEST_INSTANCE_ARGS
)
group
=
ResourceGroup
()
group
.
add
(
resource
)
...
...
@@ -227,7 +240,7 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_duplicate_resource_id
(
self
):
# given
group
=
ResourceGroup
()
resource
=
Instance
()
resource
=
Instance
(
TEST_INSTANCE_ARGS
)
# then
with
self
.
assertRaises
(
KeyError
):
...
...
@@ -238,7 +251,7 @@ class ResourceGroupTest(TestCase):
# given
group1
=
ResourceGroup
()
group2
=
ResourceGroup
()
resource
=
Instance
()
resource
=
Instance
(
TEST_INSTANCE_ARGS
)
# when
result_group1
=
group1
+
group2
...
...
@@ -255,7 +268,9 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_iteration
(
self
):
# when
group
=
ResourceGroup
(
resources
=
[
Instance
(),
Instance
(),
Instance
()])
group
=
ResourceGroup
(
resources
=
[
Instance
(
TEST_INSTANCE_ARGS
),
Instance
(
TEST_INSTANCE_ARGS
),
Instance
(
TEST_INSTANCE_ARGS
)])
# then
for
index
,
resource
in
enumerate
(
group
.
resources
):
...
...
@@ -263,8 +278,8 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_equivalence
(
self
):
# given
resource1
=
Instance
(
id
=
'some_resource'
)
resource2
=
Instance
(
id
=
'some_other_resource'
)
resource1
=
Instance
(
id
=
'some_resource'
,
**
TEST_INSTANCE_ARGS
)
resource2
=
Instance
(
id
=
'some_other_resource'
,
**
TEST_INSTANCE_ARGS
)
# then
self
.
assertEqual
(
ResourceGroup
(
id
=
'some_group'
),
...
...
@@ -282,7 +297,9 @@ class ResourceGroupTest(TestCase):
'resources'
:
[
{
'id'
:
'instance-1'
,
'type'
:
'instance'
'type'
:
'instance'
,
'cpu_count'
:
1
,
'memory'
:
100
},
{
'id'
:
'level-1'
,
...
...
@@ -290,11 +307,15 @@ class ResourceGroupTest(TestCase):
'resources'
:
[
{
'id'
:
'instance-2'
,
'type'
:
'instance'
'type'
:
'instance'
,
'cpu_count'
:
2
,
'memory'
:
200
},
{
'id'
:
'instance-3'
,
'type'
:
'instance'
'type'
:
'instance'
,
'cpu_count'
:
3
,
'memory'
:
300
}
]
}
...
...
@@ -306,10 +327,16 @@ class ResourceGroupTest(TestCase):
expected_flat_dict
=
{
'root.instance-1.id'
:
'instance-1'
,
'root.instance-1.type'
:
'instance'
,
'root.instance-1.cpu_count'
:
1
,
'root.instance-1.memory'
:
100
,
'root.level-1.instance-2.id'
:
'instance-2'
,
'root.level-1.instance-2.type'
:
'instance'
,
'root.level-1.instance-2.cpu_count'
:
2
,
'root.level-1.instance-2.memory'
:
200
,
'root.level-1.instance-3.id'
:
'instance-3'
,
'root.level-1.instance-3.type'
:
'instance'
'root.level-1.instance-3.type'
:
'instance'
,
'root.level-1.instance-3.cpu_count'
:
3
,
'root.level-1.instance-3.memory'
:
300
}
# when
...
...
@@ -322,9 +349,9 @@ class ResourceGroupTest(TestCase):
def
test_resource_group_flatten_not_flat_leaves
(
self
):
# given
expected_flat_dict
=
{
'root.instance-1'
:
Instance
(
id
=
'instance-1'
),
'root.level-1.instance-2'
:
Instance
(
id
=
'instance-2'
),
'root.level-1.instance-3'
:
Instance
(
id
=
'instance-3'
)
'root.instance-1'
:
Instance
(
id
=
'instance-1'
,
cpu_count
=
1
,
memory
=
100
),
'root.level-1.instance-2'
:
Instance
(
id
=
'instance-2'
,
cpu_count
=
2
,
memory
=
200
),
'root.level-1.instance-3'
:
Instance
(
id
=
'instance-3'
,
cpu_count
=
3
,
memory
=
300
)
}
# when
...
...
@@ -345,6 +372,8 @@ class ResourceGroupTest(TestCase):
expected_diff_values
=
{
'root.instance-1.id'
:
'instance-1'
,
'root.instance-1.type'
:
'instance'
,
'root.instance-1.cpu_count'
:
1
,
'root.instance-1.memory'
:
100
}
expected_diff_added
=
{
'added'
:
expected_diff_values
,
...
...
@@ -374,7 +403,7 @@ class ResourceGroupTest(TestCase):
group2
=
ResourceGroup
(
tree_dict2
)
expected_diff_values
=
{
'root.instance-1'
:
Instance
(
id
=
removed_resource
[
'id'
])
'root.instance-1'
:
Instance
(
id
=
removed_resource
[
'id'
]
,
cpu_count
=
1
,
memory
=
100
)
}
expected_diff_added
=
{
'added'
:
expected_diff_values
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment