def test_invalid_subscriber(self): """ Try to apply an invalid policy to a subscriber, should log and error Assert: Only 1 flow gets added to the table (drop flow) """ fake_controller_setup(self.enforcement_controller) imsi = 'IMSI000000000000001' sub_ip = '192.168.128.45' flow_list = [ FlowDescription(match=FlowMatch( ip_src=convert_ipv4_str_to_ip_proto('9999.0.0.0/24')), action=FlowDescription.DENY) ] policy = PolicyRule(id='invalid', priority=2, flow_list=flow_list) invalid_sub_context = RyuDirectSubscriberContext( imsi, sub_ip, self.enforcement_controller, self._tbl_num).add_dynamic_rule(policy) isolator = RyuDirectTableIsolator( RyuForwardFlowArgsBuilder.from_subscriber( invalid_sub_context.cfg).build_requests(), self.testing_controller) flow_query = FlowQuery(self._tbl_num, self.testing_controller) num_flows_start = len(flow_query.lookup()) snapshot_verifier = SnapshotVerifier(self, self.BRIDGE, self.service_manager) with isolator, invalid_sub_context, snapshot_verifier: wait_after_send(self.testing_controller) num_flows_final = len(flow_query.lookup()) self.assertEqual(num_flows_final - num_flows_start, 0)
def packet_sender(): isolators = [ RyuDirectTableIsolator( RyuForwardFlowArgsBuilder.from_subscriber( sub).build_requests(), self.testing_controller, ) for sub in subs ] flow_query = FlowQuery(20, self.testing_controller) pkt_start = sum(flow.packets for flow in flow_query.lookup()) with ExitStack() as es: for iso in isolators: es.enter_context(iso) for packet in packets: pkt_sender.send(packet, count=count) wait_after_send(self.testing_controller) pkt_final = sum(flow.packets for flow in flow_query.lookup()) return pkt_final - pkt_start