def packet_test_scenario( self, zone1, zone2, sec_group1, sec_group_2, vpc1, vpc2, subnet1, subnet2, use_private, protocol, pkt_count=5, retries=2, verbose=None, ): vpc = self.default_vpc results = {} start = time.time() if verbose is None: if self.args.log_level == "DEBUG": verbose = 2 else: verbose = 0 sec_group = self.get_test_security_groups(vpc=vpc, count=1, rules=self.DEFAULT_RULES)[0] try: for zone in self.zones: self.log.info('STARTING PACKET TEST AGAINST ZONE:"{0}"'.format(zone)) ins1, ins2 = self.get_test_instances(zone=zone, group_id=sec_group.id, count=2) for retry in xrange(1, retries + 1): try: pkt_dict = packet_test( sender_ssh=ins1.ssh, receiver_ssh=ins2.ssh, protocol=1, count=pkt_count, verbose=verbose ) if pkt_dict.get("error", None) or (pkt_dict.get("count") != pkt_count): raise RuntimeError("Packet test failed, results:{0}".format(pkt_dict)) self.log.debug("Results for Zone: {0}\n{1}".format(zone, pkt_dict)) results[zone] = pkt_dict except Exception as PE: self.log.error( "{0}\nPacket Test for zone: {1} failed attempt:{2}/{3}".format( get_traceback(), zone, retry, retries ) ) wait = 30 - int(time.time() - start) if wait > 0: self.log.debug('Waiting "{0}" seconds to retry packet test'.format(wait)) time.sleep(wait) if zone not in results: raise RuntimeError("Failed packet test for zone: {0}".format(zone)) finally: for zone, pkt_dict in results.iteritems(): self.show_packet_test_results( pkt_dict, header="test2_icmp_packet_test_same_az_and_sg. " "Zone:{0}".format(zone) ) self.log.info("test2_icmp_packet_test_same_az_and_sg passed")
def packet_test_scenario(self, zone1, zone2, sec_group1, sec_group_2, vpc1, vpc2, subnets, use_private, protocol, pkt_count=5, retries=2, verbose=None): """ This method is intended to be used as the core test method. It can be fed different sets of params each representing a different test scenario. This should allow for dictionaries of params to be autogenerated and fed to this test method forming a auto-generated test matrix. Used with cli_runner each param set can be ran as a testunit providing formatted results. This method should also provide a dict of results for additional usage. :param zone1: zone name :param zone2: zone name :param sec_group1: group obj or id :param sec_group_2: group obj or id :param vpc1: vpc obj or id :param vpc2: vpc obj or id :param subnet1: subnet obj or id :param subnet2: subnet obj or id :param use_private: bool, to use private addressing or not :param protocol: a dict to be fed to 'packet_test'. Example:{'protocol': ICMP, 'count': pkt_count} :param pkt_count: number of packets :param retries: number of retries :param verbose: bool, for verbose output :return dict of results (tbd) """ vpc = self.default_vpc results = {} start = time.time() if verbose is None: if self.args.log_level == 'DEBUG': verbose = 2 else: verbose = 0 sec_group = self.get_test_security_groups(vpc=vpc, count=1, rules=self.DEFAULT_RULES)[0] try: for zone in self.zones: self.log.info('STARTING PACKET TEST AGAINST ZONE:"{0}"'.format(zone)) ins1, ins2 = self.get_test_instances(zone=zone, group_id=sec_group.id, count=2) for retry in xrange(1, retries + 1): try: pkt_dict = packet_test(sender_ssh=ins1.ssh, receiver_ssh=ins2.ssh, protocol=1, count=pkt_count, verbose=verbose) if pkt_dict.get('error', None) or (pkt_dict.get('count') != pkt_count): raise RuntimeError('Packet test failed, results:{0}'.format(pkt_dict)) self.log.debug("Results for Zone: {0}\n{1}".format(zone, pkt_dict)) results[zone] = pkt_dict except Exception as PE: self.log.error("{0}\nPacket Test for zone: {1} failed attempt:{2}/{3}" .format(get_traceback(), zone, retry, retries)) wait = 30 - int(time.time()-start) if wait > 0: self.log.debug('Waiting "{0}" seconds to retry packet test'.format(wait)) time.sleep(wait) if zone not in results: raise RuntimeError('Failed packet test for zone: {0}'.format(zone)) finally: for zone, pkt_dict in results.iteritems(): self.show_packet_test_results(pkt_dict, header='test2_icmp_packet_test_same_az_and_sg. ' 'Zone:{0}'.format(zone)) self.log.info('test2_icmp_packet_test_same_az_and_sg passed') # todo decide up results format return results