Ejemplo n.º 1
0
    def verify_traffic(self,
                       sender_vm,
                       receiver_vm,
                       proto,
                       sport,
                       dport,
                       count=None,
                       fip=None):
        # Create stream and profile
        if fip:
            stream = Stream(sport=sport,
                            dport=dport,
                            proto=proto,
                            src=sender_vm.vm_ip,
                            dst=fip)
        else:
            stream = Stream(sport=sport,
                            dport=dport,
                            proto=proto,
                            src=sender_vm.vm_ip,
                            dst=receiver_vm.vm_ip)
        profile_kwargs = {'stream': stream}
        if fip:
            profile_kwargs.update({'listener': receiver_vm.vm_ip})
        if count:
            profile_kwargs.update({'count': count})
            profile = StandardProfile(**profile_kwargs)
        else:
            profile = ContinuousProfile(**profile_kwargs)

        # Set VM credentials
        send_node = Host(
            sender_vm.vm_node_ip,
            self.inputs.host_data[sender_vm.vm_node_ip]['username'],
            self.inputs.host_data[sender_vm.vm_node_ip]['password'])
        recv_node = Host(
            receiver_vm.vm_node_ip,
            self.inputs.host_data[receiver_vm.vm_node_ip]['username'],
            self.inputs.host_data[receiver_vm.vm_node_ip]['password'])
        send_host = Host(sender_vm.local_ip, sender_vm.vm_username,
                         sender_vm.vm_password)
        recv_host = Host(receiver_vm.local_ip, receiver_vm.vm_username,
                         receiver_vm.vm_password)

        # Create send, receive helpers
        sender = Sender("send%s" % proto, profile, send_node, send_host,
                        self.inputs.logger)
        receiver = Receiver("recv%s" % proto, profile, recv_node, recv_host,
                            self.inputs.logger)

        # start traffic
        receiver.start()
        sender.start()
        sleep(5)

        # stop traffic
        sender.stop()
        receiver.stop()
        self.logger.debug("Sent: %s; Received: %s", sender.sent, receiver.recv)
        return (sender.sent, receiver.recv)
Ejemplo n.º 2
0
    def setup_and_create_streams(self, src_vn_fix, dst_vn_fix, src_vm_fix, dst_vm_fix, sport=8000, dport=9000, count=100):
        
        src_vm_node_ip = src_vm_fix.vm_node_ip
        dst_vm_node_ip = dst_vm_fix.vm_node_ip
        src_local_host = Host(
            src_vm_node_ip, self.inputs.host_data[
                src_vm_node_ip]['username'], self.inputs.host_data[
                dst_vm_node_ip]['password'])
        dst_local_host = Host(
            dst_vm_node_ip, self.inputs.host_data[
                dst_vm_node_ip]['username'], self.inputs.host_data[
                dst_vm_node_ip]['password'])
        send_host = Host(src_vm_fix.local_ip,
                              src_vm_fix.vm_username,
                              src_vm_fix.vm_password)
        recv_host = Host(dst_vm_fix.local_ip,
                              dst_vm_fix.vm_username,
                              dst_vm_fix.vm_password)
        send_file_name = 'sendudp'
        recv_file_name = 'recvudp'
        # Create traffic stream
        for i in range(3):
            sport = sport 
            dport = dport + i
            print('count=%s' % (count))
            print('dport=%s' % (dport))

            self.logger.info("Creating streams...")
            stream = Stream(
                protocol="ip",
                proto='udp',
                src=src_vm_fix.vm_ip,
                dst=dst_vm_fix.vm_ip,
                dport=dport,
                sport=sport)

            profile = StandardProfile(
                stream=stream,
                size=100,
                count=count,
                listener=dst_vm_fix.vm_ip)
            sender = Sender(
                send_file_name,
                profile,
                src_local_host,
                send_host,
                self.inputs.logger)
            receiver = Receiver(
                recv_file_name,
                profile,
                dst_local_host,
                recv_host,
                self.inputs.logger)
            receiver.start()
            sender.start()
            sender.stop()
            receiver.stop()
            print(sender.sent, receiver.recv)
            time.sleep(1)
Ejemplo n.º 3
0
    def start_traffic(self):
        # installing traffic package in vm
        self.vn1_vm1_fixture.install_pkg("Traffic")
        self.vn2_vm2_fixture.install_pkg("Traffic")
        self.fvn_vm1_fixture.install_pkg("Traffic")

        self.tx_vm_node_ip = self.vn1_vm1_fixture.vm_node_ip
        self.rx_vm_node_ip = self.vn2_vm2_fixture.vm_node_ip
        self.tx_local_host = Host(
                            self.tx_vm_node_ip, self.inputs.host_data[
                            self.tx_vm_node_ip]['username'], self.inputs.host_data[
                            self.tx_vm_node_ip]['password'])
        self.rx_local_host = Host(
                            self.rx_vm_node_ip, self.inputs.host_data[
                            self.rx_vm_node_ip]['username'], self.inputs.host_data[
                            self.rx_vm_node_ip]['password'])
        self.send_host = Host(self.vn1_vm1_fixture.local_ip,
                            self.vn1_vm1_fixture.vm_username,
                            self.vn1_vm1_fixture.vm_password)
        self.recv_host = Host(self.vn2_vm2_fixture.local_ip,
                            self.vn2_vm2_fixture.vm_username,
                            self.vn2_vm2_fixture.vm_password)
        # Create traffic stream
        self.logger.info("Creating streams...")
        stream = Stream(
            protocol="ip",
            proto="udp",
            src=self.vn1_vm1_fixture.vm_ip,
            dst=self.vn2_vm2_fixture.vm_ip,
            dport=9000)

        profile = StandardProfile(
            stream=stream,
            size=100,
            count=10,
            listener=self.vn2_vm2_fixture.vm_ip)
        self.sender = Sender(
            "sendudp",
            profile,
            self.tx_local_host,
            self.send_host,
            self.inputs.logger)
        self.receiver = Receiver(
            "recvudp",
            profile,
            self.rx_local_host,
            self.recv_host,
            self.inputs.logger)
        self.receiver.start()
        self.sender.start()
        time.sleep(10)
Ejemplo n.º 4
0
    def start_traffic_scapy(self, sender_vm, receiver_vm, proto,
				sport, dport, count=None, fip=None,
				payload=None, icmp_type=None, icmp_code=None,
				recvr=True):
        # Create stream and profile
        if fip:
            stream = Stream(
                protocol="ip", sport=sport, dport=dport, proto=proto, src=sender_vm.vm_ip,
                dst=fip,type=icmp_type,code=icmp_code)
        else:
            stream = Stream(
                protocol="ip", sport=sport, dport=dport, proto=proto, src=sender_vm.vm_ip,
                dst=receiver_vm.vm_ip,type=icmp_type,code=icmp_code)
        profile_kwargs = {'stream': stream}
        if fip:
            profile_kwargs.update({'listener': receiver_vm.vm_ip})
        if payload:
            profile_kwargs.update({'payload': payload})
        if count:
            profile_kwargs.update({'count': count})
            profile = StandardProfile(**profile_kwargs)
        else:
            profile = ContinuousProfile(**profile_kwargs)

        # Set VM credentials
        send_node = Host(sender_vm.vm_node_ip,
                         self.inputs.username, self.inputs.password)
        recv_node = Host(receiver_vm.vm_node_ip,
                         self.inputs.username, self.inputs.password)
        send_host = Host(sender_vm.local_ip,
                         sender_vm.vm_username, sender_vm.vm_password)
        recv_host = Host(receiver_vm.local_ip,
                         receiver_vm.vm_username, receiver_vm.vm_password)

        # Create send, receive helpers
        sender = Sender("send%s" %
                        proto, profile, send_node, send_host, self.inputs.logger)
        receiver = Receiver("recv%s" %
                            proto, profile, recv_node, recv_host, self.inputs.logger)

        # start traffic
        if recvr:
            receiver.start()
        sender.start()

        return (sender, receiver)
Ejemplo n.º 5
0
 def test_agent_crash_dns_malformed_received(self):
     '''Verify that Agent do not crash on sending a malformed DNS packet.
        This Test case specifically test following Bug
        Bug Id 1566067 : "Agent crash at BindUtil::DnsClass"
        Steps:
         1. Create a VN with IPAM having Virtual DNS configured.
         2. Create a VM and send a DNS query from VM to DNS server. DNS server should 
            have the Qclass field as any value other than "01"
         3. Verify that no crash happens when this malformed DNS packet reaches the server
     Pass criteria: Vrouter agent should not crash on receiving a malformed DNS packet
     Maintainer: [email protected]'''
     vm_list = ['vm1', 'vm2']
     vn_name = 'vn1'
     vn_nets = {'vn1' : '10.10.10.0/24'}
     dns_server_name = 'vdns1'
     domain_name = 'juniper.net'
     ttl = 100
     ipam_name = 'ipam1'
     dns_data = VirtualDnsType(
         domain_name=domain_name, dynamic_records_from_client=True,
         default_ttl_seconds=ttl, record_order='random', reverse_resolution=True)
     vdns_fixt1 = self.useFixture(VdnsFixture(self.inputs, self.connections, 
         vdns_name=dns_server_name, dns_data=dns_data))
     result, msg = vdns_fixt1.verify_on_setup()
     self.assertTrue(result, msg)
     dns_server = IpamDnsAddressType(
         virtual_dns_server_name=vdns_fixt1.vdns_fq_name)
     ipam_mgmt_obj = IpamType(
         ipam_dns_method='virtual-dns-server', ipam_dns_server=dns_server)
     # Associate IPAM with  VDNS server Object
     ipam_fixt1 = self.useFixture(IPAMFixture(ipam_name, vdns_obj=vdns_fixt1.obj, 
             connections=self.connections, ipamtype=ipam_mgmt_obj))
     # Launch  VM with VN Created above.
     vn_fixt = self.useFixture(VNFixture(self.connections, self.inputs, vn_name=vn_name,
                  subnets=[vn_nets['vn1']], ipam_fq_name=ipam_fixt1.fq_name, option='contrail'))
     vm_fixture1 = self.useFixture(VMFixture(project_name=self.inputs.project_name, 
                 connections=self.connections, vn_obj=vn_fixt.obj, vm_name=vm_list[0],
                 image_name = "ubuntu-traffic"))
     assert vm_fixture1.verify_vm_launched()
     assert vm_fixture1.verify_on_setup()
     assert vm_fixture1.wait_till_vm_is_up()
     # DNS payload with 1 query and qclass as "04" instead of "01"
     filters = '\'(src host %s and dst host %s and port 1234)\'' \
                 % (vm_fixture1.vm_ip,vn_fixt.get_dns_ip(ipam_fq_name = ipam_fixt1.fq_name))
     session, pcap = start_tcpdump_for_vm_intf(self, vm_fixture1, vn_fixt.vn_fq_name, filters = filters)
     dnsPayload = '\x12\x34\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x04'
     streamObj = Stream(protocol="ip", sport=1234, dport=53, proto='udp', src=vm_fixture1.vm_ip,
             dst=vn_fixt.get_dns_ip(ipam_fq_name =ipam_fixt1.fq_name))
     profile_kwargs = {'stream': streamObj, 'count' : 10, 'payload': dnsPayload}
     profileObj = StandardProfile(**profile_kwargs)
     tx_vm_node_ip = vm_fixture1.vm_node_ip
     send_node = Host(
             tx_vm_node_ip,
             self.inputs.host_data[tx_vm_node_ip]['username'],
             self.inputs.host_data[tx_vm_node_ip]['password'])
     send_host = Host(vm_fixture1.local_ip,
                          vm_fixture1.vm_username, vm_fixture1.vm_password)
     sender = Sender("senddns", profileObj, send_node, send_host, self.inputs.logger)
     sender.start()
     sleep(1)
     sender.poll()
     if not sender.sent:
         self.logger.error("Failed to Transmit packet")
         assert False, "Failed to Transmit packet"
     sender.stop()
     sleep(2)
     stop_tcpdump_for_vm_intf(self, session, pcap)
     sleep(2)
     # grep in pcap file with source port (1234) 
     assert verify_tcpdump_count(self, session, pcap, grep_string="1234", exp_count=10)
Ejemplo n.º 6
0
    def start(self,
              sender_vm,
              receiver_vm,
              proto,
              sport,
              dport,
              pkt_count=None,
              fip=None,
              sender_vn_fqname=None,
              receiver_vn_fqname=None,
              af=None,
              interval=0):

        self.sender_vm = sender_vm
        self.receiver_vm = receiver_vm
        self.proto = proto
        self.sport = sport
        self.dport = dport
        self.inputs = sender_vm.inputs
        self.logger = self.inputs.logger
        self.pkt_count = pkt_count
        self.src_ip = sender_vm.get_vm_ips(vn_fq_name=sender_vn_fqname,
                                           af=af)[0]
        recv_ip = receiver_vm.get_vm_ips(vn_fq_name=receiver_vn_fqname,
                                         af=af)[0]
        self.dst_ip = self.recv_ip = recv_ip
        if fip:
            self.dst_ip = fip
        self.interval = interval

        stream = Stream(sport=self.sport,
                        dport=self.dport,
                        proto=self.proto,
                        src=self.src_ip,
                        dst=self.dst_ip,
                        inter=self.interval)
        profile_kwargs = {'stream': stream}
        if fip:
            profile_kwargs.update({'listener': self.recv_ip})
        if self.pkt_count:
            profile_kwargs.update({'count': self.pkt_count})
            profile = StandardProfile(**profile_kwargs)
        else:
            profile = ContinuousProfile(**profile_kwargs)

        # Set VM credentials
        send_node = Host(
            self.sender_vm.vm_node_ip, self.sender_vm.inputs.host_data[
                self.sender_vm.vm_node_ip]['username'],
            self.sender_vm.inputs.host_data[
                self.sender_vm.vm_node_ip]['password'])
        recv_node = Host(
            self.receiver_vm.vm_node_ip, self.sender_vm.inputs.host_data[
                self.receiver_vm.vm_node_ip]['username'],
            self.sender_vm.inputs.host_data[
                self.receiver_vm.vm_node_ip]['password'])
        send_host = Host(self.sender_vm.local_ip, self.sender_vm.vm_username,
                         self.sender_vm.vm_password)
        recv_host = Host(self.receiver_vm.local_ip,
                         self.receiver_vm.vm_username,
                         self.receiver_vm.vm_password)

        # Create send, receive helpers
        random = get_random_name()
        send_name = 'send' + self.proto + '_' + random
        recv_name = 'recv' + self.proto + '_' + random
        sender = Sender(send_name, profile, send_node, send_host, self.logger)
        receiver = Receiver(recv_name, profile, recv_node, recv_host,
                            self.logger)

        # start traffic
        receiver.start()
        sender.start()

        self.sender = sender
        self.receiver = receiver
        return True
Ejemplo n.º 7
0
    def test_verify_flow_series_table(self):
        ''' Test to validate flow series table

        '''
        vn1_name = self.res.vn1_name
        vn1_subnets = self.res.vn1_fixture.get_cidrs(af='v4')
        vn2_name = self.res.vn2_name
        vn2_subnets = self.res.vn2_fixture.get_cidrs(af='v4')
        policy1_name = 'policy1'
        policy2_name = 'policy2'
        rules = [
            {
                'direction': '<>', 'simple_action': 'pass',
                'protocol': 'udp',
                'source_network': vn1_name,
                'dest_network': vn2_name,
            },
        ]
        rev_rules = [
            {
                'direction': '<>', 'simple_action': 'pass',
                'protocol': 'udp',
                'source_network': vn2_name,
                'dest_network': vn1_name,
            },
        ]
        policy1_fixture = self.useFixture(
            PolicyFixture(
                policy_name=policy1_name,
                rules_list=rules,
                inputs=self.inputs,
                connections=self.connections))
        policy2_fixture = self.useFixture(
            PolicyFixture(
                policy_name=policy2_name,
                rules_list=rev_rules,
                inputs=self.inputs,
                connections=self.connections))
        vn1_fixture = self.res.vn1_fixture
        vn1_fixture.bind_policies(
            [policy1_fixture.policy_fq_name], vn1_fixture.vn_id)
        self.addCleanup(
            vn1_fixture.unbind_policies, vn1_fixture.vn_id, [
                policy1_fixture.policy_fq_name])

        assert vn1_fixture.verify_on_setup()
        vn2_fixture = self.res.vn2_fixture
        vn2_fixture.bind_policies(
            [policy2_fixture.policy_fq_name], vn2_fixture.vn_id)
        assert vn2_fixture.verify_on_setup()
        self.addCleanup(
            vn2_fixture.unbind_policies, vn2_fixture.vn_id, [
                policy2_fixture.policy_fq_name])
#        self.res.verify_common_objects()
        # installing traffic package in vm
        self.res.vn1_vm1_fixture.install_pkg("Traffic")
        self.res.vn2_vm2_fixture.install_pkg("Traffic")
#        self.res.fvn_vm1_fixture.install_pkg("Traffic")

        self.tx_vm_node_ip = self.res.vn1_vm1_fixture.vm_node_ip
        self.rx_vm_node_ip = self.res.vn2_vm2_fixture.vm_node_ip
        self.tx_local_host = Host(
            self.tx_vm_node_ip, self.inputs.host_data[
                self.tx_vm_node_ip]['username'], self.inputs.host_data[
                self.tx_vm_node_ip]['password'])
        self.rx_local_host = Host(
            self.rx_vm_node_ip, self.inputs.host_data[
                self.rx_vm_node_ip]['username'], self.inputs.host_data[
                self.rx_vm_node_ip]['password'])
        self.send_host = Host(self.res.vn1_vm1_fixture.local_ip,
                              self.res.vn1_vm1_fixture.vm_username,
                              self.res.vn1_vm1_fixture.vm_password)
        self.recv_host = Host(self.res.vn2_vm2_fixture.local_ip,
                              self.res.vn2_vm2_fixture.vm_username,
                              self.res.vn2_vm2_fixture.vm_password)
        # Create traffic stream
        start_time = self.analytics_obj.getstarttime(self.tx_vm_node_ip)
        self.logger.info("start time= %s" % (start_time))
        for i in range(10):
            count = 100
            dport = 9000
            count = count * (i + 1)
            dport = dport + i
            print 'count=%s' % (count)
            print 'dport=%s' % (dport)

            self.logger.info("Creating streams...")
            stream = Stream(
                protocol="ip",
                proto="udp",
                src=self.res.vn1_vm1_fixture.vm_ip,
                dst=self.res.vn2_vm2_fixture.vm_ip,
                dport=dport)

            profile = StandardProfile(
                stream=stream,
                size=100,
                count=count,
                listener=self.res.vn2_vm2_fixture.vm_ip)
            sender = Sender(
                "sendudp",
                profile,
                self.tx_local_host,
                self.send_host,
                self.inputs.logger)
            receiver = Receiver(
                "recvudp",
                profile,
                self.rx_local_host,
                self.recv_host,
                self.inputs.logger)
            receiver.start()
            sender.start()
            sender.stop()
            receiver.stop()
            print sender.sent, receiver.recv
            time.sleep(1)
        vm_node_ip = self.res.vn1_vm1_fixture.inputs.host_data[
            self.res.vn1_vm1_fixture.orch.get_host_of_vm(
                self.res.vn1_vm1_fixture.vm_obj)]['host_ip']
        vm_host = self.res.vn1_vm1_fixture.inputs.host_data[vm_node_ip]['name']
        time.sleep(300)
        # Verifying flow series table
        src_vn = 'default-domain' + ':' + \
            self.inputs.project_name + ':' + self.res.vn1_name
        dst_vn = 'default-domain' + ':' + \
            self.inputs.project_name + ':' + self.res.vn2_name
        # creating query: '(sourcevn=default-domain:admin:vn1) AND
        # (destvn=default-domain:admin:vn2)'
        query = '(' + 'sourcevn=' + src_vn + ') AND (destvn=' + dst_vn + ')'
        for ip in self.inputs.collector_ips:
            self.logger.info('setup_time= %s' % (start_time))
            # Quering flow sreies table
            self.logger.info(
                "Verifying flowSeriesTable through opserver %s" %
                (ip))
            self.res1 = self.analytics_obj.ops_inspect[ip].post_query(
                'FlowSeriesTable',
                start_time=start_time,
                end_time='now',
                select_fields=[
                    'sourcevn',
                    'sourceip',
                    'destvn',
                    'destip',
                    'sum(packets)',
                    'sport',
                    'dport',
                    'T=1'],
                where_clause=query,
                sort=2,
                limit=5,
                sort_fields=['sum(packets)'])
            assert self.res1
Ejemplo n.º 8
0
    def test_verify_flow_tables(self):
        '''
          Description:  Test to validate flow tables

            1.Creat 2 vn and 1 vm in each vn
            2.Create policy between vns
            3.send 100 udp packets from vn1 to vn2
            4.Verify in vrouter uve that active flow matches with the agent introspect - fails otherwise
            5.Query flowrecord table for the flow and verify packet count mtches 100 - fails otherwise
            6.Query flow series table or the flow and verify packet count mtches 100 - fails otherwise

         Maintainer: [email protected]
        '''
        vn1_name = self.res.vn1_name
        vn1_fq_name = '%s:%s:%s' % (
            self.inputs.project_fq_name[0], self.inputs.project_fq_name[1], self.res.vn1_name)
        vn1_subnets = self.res.vn1_fixture.get_cidrs(af='v4')
        vn2_name = self.res.vn2_name
        vn2_fq_name = '%s:%s:%s' % (
            self.inputs.project_fq_name[0], self.inputs.project_fq_name[1], self.res.vn2_name)
        vn2_subnets = self.res.vn2_fixture.get_cidrs(af='v4')
        policy1_name = 'policy1'
        policy2_name = 'policy2'
        result = True
        rules = [
            {
                'direction': '<>', 'simple_action': 'pass',
                'protocol': 'udp',
                'source_network': vn1_name,
                'dest_network': vn2_name,
            },
        ]
        rev_rules = [
            {
                'direction': '<>', 'simple_action': 'pass',
                'protocol': 'udp',
                'source_network': vn2_name,
                'dest_network': vn1_name,
            },
        ]
        policy1_fixture = self.useFixture(
            PolicyFixture(
                policy_name=policy1_name,
                rules_list=rules,
                inputs=self.inputs,
                connections=self.connections))
        policy2_fixture = self.useFixture(
            PolicyFixture(
                policy_name=policy2_name,
                rules_list=rev_rules,
                inputs=self.inputs,
                connections=self.connections))
        vn1_fixture = self.res.vn1_fixture
        vn1_fixture.bind_policies(
            [policy1_fixture.policy_fq_name], vn1_fixture.vn_id)
        self.addCleanup(
            vn1_fixture.unbind_policies, vn1_fixture.vn_id, [
                policy1_fixture.policy_fq_name])

        assert vn1_fixture.verify_on_setup()
        vn2_fixture = self.res.vn2_fixture
        vn2_fixture.bind_policies(
            [policy2_fixture.policy_fq_name], vn2_fixture.vn_id)
        assert vn2_fixture.verify_on_setup()
        self.addCleanup(
            vn2_fixture.unbind_policies, vn2_fixture.vn_id, [
                policy2_fixture.policy_fq_name])
#        self.res.verify_common_objects()
        # start_time=self.analytics_obj.getstarttime(self.tx_vm_node_ip)
        # installing traffic package in vm
        self.res.vn1_vm1_fixture.verify_on_setup()
        self.res.vn2_vm2_fixture.verify_on_setup()
        self.res.fvn_vm1_fixture.verify_on_setup()
        self.res.vn1_vm1_fixture.install_pkg("Traffic")
        self.res.vn2_vm2_fixture.install_pkg("Traffic")
        self.res.fvn_vm1_fixture.install_pkg("Traffic")

        self.tx_vm_node_ip = self.res.vn1_vm1_fixture.vm_node_ip
        self.rx_vm_node_ip = self.res.vn2_vm2_fixture.vm_node_ip
        self.tx_local_host = Host(
            self.tx_vm_node_ip, self.inputs.host_data[
                self.tx_vm_node_ip]['username'], self.inputs.host_data[
                self.tx_vm_node_ip]['password'])
        self.rx_local_host = Host(
            self.rx_vm_node_ip, self.inputs.host_data[
                self.rx_vm_node_ip]['username'], self.inputs.host_data[
                self.rx_vm_node_ip]['password'])
        self.send_host = Host(self.res.vn1_vm1_fixture.local_ip,
                              self.res.vn1_vm1_fixture.vm_username,
                              self.res.vn1_vm1_fixture.vm_password)
        self.recv_host = Host(self.res.vn2_vm2_fixture.local_ip,
                              self.res.vn2_vm2_fixture.vm_username,
                              self.res.vn2_vm2_fixture.vm_password)
        pkts_before_traffic = self.analytics_obj.get_inter_vn_stats(
            self.inputs.collector_ips[0],
            src_vn=vn1_fq_name,
            other_vn=vn2_fq_name,
            direction='in')
        if not pkts_before_traffic:
            pkts_before_traffic = 0

        self.res.vn1_vm1_fixture.wait_till_vm_is_up()
        self.res.vn1_vm2_fixture.wait_till_vm_is_up()
        # Create traffic stream
        self.logger.info("Creating streams...")
        stream = Stream(
            protocol="ip",
            proto="udp",
            src=self.res.vn1_vm1_fixture.vm_ip,
            dst=self.res.vn2_vm2_fixture.vm_ip,
            dport=9000)

        profile = StandardProfile(
            stream=stream,
            size=100,
            count=10,
            listener=self.res.vn2_vm2_fixture.vm_ip)
        sender = Sender(
            "sendudp",
            profile,
            self.tx_local_host,
            self.send_host,
            self.inputs.logger)
        receiver = Receiver(
            "recvudp",
            profile,
            self.rx_local_host,
            self.recv_host,
            self.inputs.logger)
        start_time = self.analytics_obj.getstarttime(self.tx_vm_node_ip)
        self.logger.info("start time= %s" % (start_time))
        receiver.start()
        sender.start()
        time.sleep(10)
        # Poll to make usre traffic flows, optional
        # sender.poll()
        # receiver.poll()
        sender.stop()
        receiver.stop()
        print sender.sent, receiver.recv
        for vn in [self.res.vn1_fixture.vn_fq_name,\
                    self.res.vn2_fixture.vn_fq_name]:
                 
            #ACL count        
            if not (int(self.analytics_obj.get_acl\
                    (self.inputs.collector_ips[0],vn)) > 0):
                    self.logger.error("Acl counts not received from Agent uve \
                                in %s vn uve"%(vn))
                    result = result and False

            if not (int(self.analytics_obj.get_acl\
                    (self.inputs.collector_ips[0], vn, tier = 'Config')) > 0):
                    self.logger.error("Acl counts not received from Config uve \
                                in %s vn uve"%(vn))
                    result = result and False

            #Bandwidth usage        
            if not (int(self.analytics_obj.get_bandwidth_usage\
                    (self.inputs.collector_ips[0], vn, direction = 'out')) > 0):
                    self.logger.error("Bandwidth not shown  \
                                in %s vn uve"%(vn))
                    result = result and False

            if not (int(self.analytics_obj.get_bandwidth_usage\
                    (self.inputs.collector_ips[0], vn, direction = 'in')) > 0):
                    self.logger.error("Bandwidth not shown  \
                                in %s vn uve"%(vn))
                    result = result and False

            #Flow count
            if not (int(self.analytics_obj.get_flow\
                    (self.inputs.collector_ips[0], vn, direction = 'egress')) > 0):
                    self.logger.error("egress flow  not shown  \
                                in %s vn uve"%(vn))
                    result = result and False

            if not (int(self.analytics_obj.get_flow\
                    (self.inputs.collector_ips[0], vn, direction = 'ingress')) > 0):
                    self.logger.error("ingress flow  not shown  \
                                in %s vn uve"%(vn))
                    result = result and False
                   
            #VN stats
            vns = [self.res.vn1_fixture.vn_fq_name,\
                    self.res.vn2_fixture.vn_fq_name]
            vns.remove(vn)
            other_vn = vns[0]        
            if not (self.analytics_obj.get_vn_stats\
                    (self.inputs.collector_ips[0], vn, other_vn)):
                    self.logger.error("vn_stats   not shown  \
                                in %s vn uve"%(vn))
                    result = result and False

        assert "sender.sent == receiver.recv", "UDP traffic to ip:%s failed" % self.res.vn2_vm2_fixture.vm_ip
        # Verifying the vrouter uve for the active flow
        vm_node_ip = self.res.vn1_vm1_fixture.inputs.host_data[
            self.res.vn1_vm1_fixture.orch.get_host_of_vm(
                self.res.vn1_vm1_fixture.vm_obj)]['host_ip']
        vm_host = self.res.vn1_vm1_fixture.inputs.host_data[vm_node_ip]['name']
        self.logger.info(
            "Waiting for the %s vrouter uve to be updated with active flows" %
            (vm_host))
        time.sleep(60)
        self.flow_record = self.analytics_obj.get_flows_vrouter_uve(
            vrouter=vm_host)
        self.logger.info(
            "Active flow in vrouter uve = %s" %
            (self.flow_record))
        if (self.flow_record > 0):
            self.logger.info("Flow records  updated")
            result = result and True
        else:
            self.logger.warn("Flow records NOT updated")
            result = result and False

#        assert ( self.flow_record > 0)
#        self.logger.info("Waiting for inter-vn stats to be updated...")
#        time.sleep(60)
        pkts_after_traffic = self.analytics_obj.get_inter_vn_stats(
            self.inputs.collector_ips[0],
            src_vn=vn1_fq_name,
            other_vn=vn2_fq_name,
            direction='in')
        if not pkts_after_traffic:
            pkts_after_traffic = 0
        self.logger.info("Verifying that the inter-vn stats updated")
        self.logger.info(
            "Inter vn stats before traffic %s" %
            (pkts_before_traffic))
        self.logger.info(
            "Inter vn stats after traffic %s" %
            (pkts_after_traffic))
        if ((pkts_after_traffic - pkts_before_traffic) >= 10):
            self.logger.info("Inter vn stats updated")
            result = result and True
        else:
            self.logger.warn("Inter vn stats NOT updated")
            result = result and False

        self.logger.info("Waiting for flow records to be expired...")
        time.sleep(224)
        self.flow_record = self.analytics_obj.get_flows_vrouter_uve(
            vrouter=vm_host)
#        if ( self.flow_record > 0):
#            self.logger.info("Flow records  updated")
#            result = result and True
#        else:
#            self.logger.warn("Flow records NOT updated")
#            result = result and False
        self.logger.debug(
            "Active flow in vrouter uve = %s" %
            (self.flow_record))
#        assert ( self.flow_record == 0)
        # Verifying flow series table
        src_vn = 'default-domain' + ':' + \
            self.inputs.project_name + ':' + self.res.vn1_name
        dst_vn = 'default-domain' + ':' + \
            self.inputs.project_name + ':' + self.res.vn2_name
        # creating query: '(sourcevn=default-domain:admin:vn1) AND
        # (destvn=default-domain:admin:vn2)'
        query = '(' + 'sourcevn=' + src_vn + ') AND (destvn=' + dst_vn + ')'
        for ip in self.inputs.collector_ips:
            self.logger.info(
                "Verifying flowRecordTable through opserver %s.." %
                (ip))
            self.res2 = self.analytics_obj.ops_inspect[ip].post_query(
                'FlowRecordTable',
                start_time=start_time,
                end_time='now',
                select_fields=[
                    'sourcevn',
                    'sourceip',
                    'destvn',
                    'destip',
                    'setup_time',
                    'teardown_time',
                    'agg-packets'],
                where_clause=query)

            self.logger.info("Query output: %s" % (self.res2))
            assert self.res2
            if self.res2:
                r = self.res2[0]
                s_time = r['setup_time']
                e_time = r['teardown_time']
                agg_pkts = r['agg-packets']
                assert (agg_pkts == sender.sent)
            self.logger.info(
                'setup_time= %s,teardown_time= %s' %
                (s_time, e_time))
            self.logger.info("Records=\n%s" % (self.res2))
            # Quering flow sreies table
            self.logger.info(
                "Verifying flowSeriesTable through opserver %s" %
                (ip))
            self.res1 = self.analytics_obj.ops_inspect[ip].post_query(
                'FlowSeriesTable',
                start_time=str(s_time),
                end_time='now',
                select_fields=[
                    'sourcevn',
                    'sourceip',
                    'destvn',
                    'destip',
                    'sum(packets)'],
                where_clause=query)
            self.logger.info("Query output: %s" % (self.res1))
            assert self.res1
            if self.res1:
                r1 = self.res1[0]
                sum_pkts = r1['sum(packets)']
                assert (sum_pkts == sender.sent)
            self.logger.info("Flow series Records=\n%s" % (self.res1))
            assert (sum_pkts == agg_pkts)

        assert result
        return True