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.
19 @file test_failover.py
20 @brief System test of stopping launchpad on master and
21 validating configuration on standby
30 from gi
.repository
import RwProjectVnfdYang
31 from gi
.repository
import RwVnfrYang
32 gi
.require_version('RwKeyspec', '1.0')
33 from gi
.repository
.RwKeyspec
import quoted_key
35 import rift
.auto
.proxy
36 from rift
.auto
.session
import NetconfSession
38 def yield_vnfd_vnfr_pairs(proxy
, nsr
=None):
40 Yields tuples of vnfd & vnfr entries.
43 proxy (callable): Launchpad proxy
44 nsr (optional): If specified, only the vnfr & vnfd records of the NSR
48 Tuple: VNFD and its corresponding VNFR entry
50 def get_vnfd(vnfd_id
):
51 xpath
= "/rw-project:project[rw-project:name='default']/vnfd-catalog/vnfd[id={}]".format(quoted_key(vnfd_id
))
52 return proxy(RwProjectVnfdYang
).get(xpath
)
54 vnfr
= "/rw-project:project[rw-project:name='default']/vnfr-catalog/vnfr"
56 vnfrs
= proxy(RwVnfrYang
).get(vnfr
, list_obj
=True)
58 for vnfr
in vnfrs
.vnfr
:
61 const_vnfr_ids
= [const_vnfr
.vnfr_id
for const_vnfr
in nsr
.constituent_vnfr_ref
]
62 if vnfr
.id not in const_vnfr_ids
:
65 vnfd
= get_vnfd(vnfr
.vnfd
.id)
68 def check_configuration_on_standby(standby_ip
):
69 print ("Start- check_configuration_on_standby")
70 mgmt_session
= NetconfSession(standby_ip
)
71 mgmt_session
.connect()
72 print ("Connected to proxy")
74 vnf_tuple
= list(yield_vnfd_vnfr_pairs(mgmt_session
.proxy
))
75 assert len(vnf_tuple
) == 2
77 if __name__
== "__main__":
78 parser
= argparse
.ArgumentParser(description
='Test launchpad failover')
79 parser
.add_argument("--master-ip", action
="store", dest
="master_ip")
80 parser
.add_argument("--standby-ip", action
="store", dest
="standby_ip")
82 args
= parser
.parse_args()
84 # 60 seconds should be more than enough time for Agent to be able
85 # to make confd as the new Master
87 print ("Try fetching configuration from the old standby or the new Master\n")
88 check_configuration_on_standby(args
.standby_ip
)