4 # Copyright 2016 RIFT.IO Inc
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
10 # http://www.apache.org/licenses/LICENSE-2.0
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
26 from gi
.repository
import RwcalYang
28 import rift
.rwcal
.cloudsim
.lvm
as lvm
29 import rift
.rwcal
.cloudsim
.lxc
as lxc
31 sys
.path
.append('../')
35 logger
= logging
.getLogger('rwcal-cloudsim')
38 class CloudsimTest(unittest
.TestCase
):
41 for container
in lxc
.containers():
44 for container
in lxc
.containers():
45 lxc
.destroy(container
)
50 def create_image(cls
):
51 image
= RwcalYang
.ImageInfoItem()
52 image
.name
= "rift-lxc-image"
53 image
.location
= "/net/sharedfiles/home1/common/vm/R0.4/rift-mano-devel-latest.qcow2"
54 image
.disk_format
= "qcow2"
55 image
.id = cls
.cal
.do_create_image(cls
.account
, image
, no_rwstatus
=True)
64 cls
.account
= RwcalYang
.CloudAccount()
65 cls
.cal
= rwcal_cloudsim
.CloudSimPlugin()
71 def create_vm(self
, image
, index
):
72 vm
= RwcalYang
.VmInfo()
73 vm
.vm_name
= 'rift-s{}'.format(index
+ 1)
74 vm
.image_id
= image
.id
75 vm
.user_tags
.node_id
= str(uuid
.uuid4())
77 self
.cal
.do_create_vm(self
.account
, vm
, no_rwstatus
=True)
81 def create_virtual_link(self
, index
):
82 link
= RwcalYang
.VirtualLinkReqParams()
83 link
.name
= 'link-{}'.format(index
+ 1)
84 link
.subnet
= '192.168.{}.0/24'.format(index
+ 1)
86 logger
.debug("Creating virtual link: %s", link
)
88 link_id
= self
.cal
.do_create_virtual_link(self
.account
, link
, no_rwstatus
=True)
91 def create_vdu(self
, image
, index
, virtual_link_ids
=None):
92 vdu_init
= RwcalYang
.VDUInitParams()
93 vdu_init
.name
= 'rift-vdu{}'.format(index
+ 1)
94 vdu_init
.node_id
= str(uuid
.uuid4())
95 vdu_init
.image_id
= image
.id
97 if virtual_link_ids
is not None:
98 for vl_id
in virtual_link_ids
:
99 cp
= vdu_init
.connection_points
.add()
100 cp
.name
= "{}_{}".format(vdu_init
.name
, vl_id
)
101 cp
.virtual_link_id
= vl_id
103 vdu_id
= self
.cal
.do_create_vdu(self
.account
, vdu_init
, no_rwstatus
=True)
105 return vdu_init
, vdu_id
107 def test_create_vm(self
):
108 self
.create_vm(self
.image
, 0)
110 def test_create_delete_virtual_link(self
):
111 link
, link_id
= self
.create_virtual_link(0)
112 get_link
= self
.cal
.do_get_virtual_link(self
.account
, link_id
, no_rwstatus
=True)
113 assert get_link
.name
== link
.name
114 assert get_link
.virtual_link_id
== link_id
115 assert len(get_link
.connection_points
) == 0
116 assert get_link
.state
== "active"
118 resources
= self
.cal
.do_get_virtual_link_list(self
.account
, no_rwstatus
=True)
119 assert len(resources
.virtual_link_info_list
) == 1
120 assert resources
.virtual_link_info_list
[0] == get_link
122 self
.cal
.do_delete_virtual_link(self
.account
, link_id
, no_rwstatus
=True)
123 resources
= self
.cal
.do_get_virtual_link_list(self
.account
, no_rwstatus
=True)
124 assert len(resources
.virtual_link_info_list
) == 0
126 def test_create_delete_vdu(self
):
127 vdu
, vdu_id
= self
.create_vdu(self
.image
, 0)
128 get_vdu
= self
.cal
.do_get_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
130 assert get_vdu
.image_id
== self
.image
.id
131 assert get_vdu
.name
== vdu
.name
132 assert get_vdu
.node_id
== vdu
.node_id
134 assert len(get_vdu
.connection_points
) == 0
136 assert get_vdu
.vm_flavor
.vcpu_count
>= 1
137 assert get_vdu
.vm_flavor
.memory_mb
>= 8 * 1024
138 assert get_vdu
.vm_flavor
.storage_gb
>= 5
140 resources
= self
.cal
.do_get_vdu_list(self
.account
, no_rwstatus
=True)
141 assert len(resources
.vdu_info_list
) == 1
142 assert resources
.vdu_info_list
[0] == get_vdu
144 resources
= self
.cal
.do_delete_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
146 resources
= self
.cal
.do_get_vdu_list(self
.account
, no_rwstatus
=True)
147 assert len(resources
.vdu_info_list
) == 0
149 def test_create_vdu_single_connection_point(self
):
150 link
, link_id
= self
.create_virtual_link(0)
151 vdu
, vdu_id
= self
.create_vdu(self
.image
, 0, [link_id
])
152 get_vdu
= self
.cal
.do_get_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
153 assert len(get_vdu
.connection_points
) == 1
154 cp
= get_vdu
.connection_points
[0]
155 assert (ipaddress
.IPv4Address(cp
.ip_address
) in
156 ipaddress
.IPv4Network(link
.subnet
))
158 get_link
= self
.cal
.do_get_virtual_link(self
.account
, link_id
, no_rwstatus
=True)
159 assert len(get_link
.connection_points
) == 1
160 assert get_link
.connection_points
[0].vdu_id
== vdu_id
161 assert get_link
.connection_points
[0].virtual_link_id
== link_id
163 self
.cal
.do_delete_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
164 get_link
= self
.cal
.do_get_virtual_link(self
.account
, link_id
, no_rwstatus
=True)
165 assert len(get_link
.connection_points
) == 0
167 self
.cal
.do_delete_virtual_link(self
.account
, link_id
)
169 def test_create_vdu_multiple_connection_point(self
):
170 link1
, link1_id
= self
.create_virtual_link(0)
171 link2
, link2_id
= self
.create_virtual_link(1)
172 link3
, link3_id
= self
.create_virtual_link(2)
173 link_id_map
= {link1_id
: link1
, link2_id
: link2
, link3_id
: link3
}
175 vdu
, vdu_id
= self
.create_vdu(self
.image
, 0, link_id_map
.keys())
176 get_vdu
= self
.cal
.do_get_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
177 assert len(get_vdu
.connection_points
) == 3
178 for cp
in get_vdu
.connection_points
:
179 assert cp
.virtual_link_id
in link_id_map
180 link
= link_id_map
[cp
.virtual_link_id
]
182 assert (ipaddress
.IPv4Address(cp
.ip_address
) in
183 ipaddress
.IPv4Network(link
.subnet
))
185 self
.do_delete_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
187 self
.do_delete_virtual_link(self
.account
, link1_id
, no_rwstatus
=True)
188 self
.do_delete_virtual_link(self
.account
, link2_id
, no_rwstatus
=True)
189 self
.do_delete_virtual_link(self
.account
, link3_id
, no_rwstatus
=True)
191 def test_modify_vdu_add_remove_connection_point(self
):
192 vdu
, vdu_id
= self
.create_vdu(self
.image
, 0)
193 link
, link_id
= self
.create_virtual_link(0)
195 get_vdu
= self
.cal
.do_get_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
196 assert len(get_vdu
.connection_points
) == 0
198 modify_vdu
= RwcalYang
.VDUModifyParams()
199 modify_vdu
.vdu_id
= vdu_id
200 cp
= modify_vdu
.connection_points_add
.add()
201 cp
.virtual_link_id
= link_id
203 self
.cal
.do_modify_vdu(self
.account
, modify_vdu
, no_rwstatus
=True)
205 get_vdu
= self
.cal
.do_get_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
206 assert len(get_vdu
.connection_points
) == 1
208 modify_vdu
= RwcalYang
.VDUModifyParams()
209 modify_vdu
.vdu_id
= vdu_id
210 cp
= modify_vdu
.connection_points_remove
.add()
211 cp
.connection_point_id
= get_vdu
.connection_points
[0].connection_point_id
212 self
.cal
.do_modify_vdu(self
.account
, modify_vdu
, no_rwstatus
=True)
214 get_vdu
= self
.cal
.do_get_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
215 assert len(get_vdu
.connection_points
) == 0
217 self
.cal
.do_delete_vdu(self
.account
, vdu_id
, no_rwstatus
=True)
218 self
.cal
.do_delete_virtual_link(self
.account
, link_id
, no_rwstatus
=True)
220 if __name__
== "__main__":
221 logging
.basicConfig(level
=logging
.DEBUG
)