# Path: capirca/lib/nacaddr.py
# def IP(ip, comment='', token='', strict=True):
# def _is_subnet_of(a, b):  # pylint: disable=invalid-name
#   def __init__(self, ip_string, comment='', token='', strict=True):
#   def subnet_of(self, other):
#   def supernet_of(self, other):
#   def __deepcopy__(self, memo):
#   def AddComment(self, comment=''):
#   def supernet(self, prefixlen_diff=1):
#   def __init__(self, ip_string, comment='', token='', strict=True):
#   def subnet_of(self, other):
#   def supernet_of(self, other):
#   def __deepcopy__(self, memo):
#   def supernet(self, prefixlen_diff=1):
#   def AddComment(self, comment=''):
# def _InNetList(adders, ip):
# def IsSuperNet(supernets, subnets):
# def CollapseAddrListPreserveTokens(addresses):
# def _SafeToMerge(address, merge_target, check_addresses):
# def _CollapseAddrListInternal(addresses, complements_by_network):
# def CollapseAddrList(addresses, complement_addresses=None):
# def SortAddrList(addresses):
# def RemoveAddressFromList(superset, exclude):
# def AddressListExclude(superset, excludes, collapse_addrs=True):
# class IPv4(ipaddress.IPv4Network):
# class IPv6(ipaddress.IPv6Network):
# class PrefixlenDiffInvalidError(ipaddress.NetmaskValueError):
# 
# Path: capirca/lib/naming.py
# class Error(Exception):
# class NamespaceCollisionError(Error):
# class BadNetmaskTypeError(Error):
# class NoDefinitionsError(Error):
# class ParseError(Error):
# class UndefinedAddressError(Error):
# class UndefinedServiceError(Error):
# class UndefinedPortError(Error):
# class UnexpectedDefinitionTypeError(Error):
# class NamingSyntaxError(Error):
# class _ItemUnit:
# class Naming:
#   def __init__(self, symbol):
#   def __init__(self, naming_dir=None, naming_file=None, naming_type=None):
#   def _CheckUnseen(self, def_type):
#   def GetIpParents(self, query):
#   def GetServiceParents(self, query):
#   def GetNetParents(self, query):
#   def _GetParents(self, query, query_group):
#   def GetNetChildren(self, query):
#   def _GetChildren(self, query, query_group):
#   def _IsIpFormat(self, item):
#   def GetServiceNames(self):
#   def GetService(self, query):
#   def GetPortParents(self, query, proto):
#   def GetServiceByProto(self, query, proto):
#   def GetNetAddr(self, token):
#   def GetNet(self, query):
#   def _Parse(self, defdirectory, def_type):
#   def _ParseFile(self, file_handle, def_type):
#   def ParseServiceList(self, data):
#   def ParseNetworkList(self, data):
#   def _ParseLine(self, line, definition_type):
# 
# Path: tools/cgrep.py
# def is_valid_ip(arg):
# def cli_options():
# def main(argv):
# def check_encapsulated(obj_type, first_obj, second_obj, db):
# def print_diff(ip, common, diff1, diff2):
# def group_diff(options, db):
# def get_ip_parents(ip, db):
# def get_nets_and_highest_prefix(ip, net_group, db):
# def get_nets(objects, db):
# def compare_tokens(options, db):
# def compare_ip_token(options, db):
# def get_ports(svc_group, db):
# def get_services(options, db):


import argparse
from absl.testing import absltest
from capirca.lib import nacaddr
from capirca.lib import naming
from tools import cgrep
   Order doesn't matter for the purposes of these tests, so many
   actual and expected results are sorted/sets to prevent issues relating to the
   order in which items are returned.
"""




_NETWORK = """
#
# Sample naming defintions for network objects
#
RFC1918 = 10.0.0.0/8      # non-public
          172.16.0.0/12   # non-public
          192.168.0.0/16  # non-public

INTERNAL = RFC1918

LOOPBACK = 127.0.0.0/8  # loopback
           ::1/128       # ipv6 loopback

RFC_3330 = 169.254.0.0/16  # special use IPv4 addresses - netdeploy

RFC_6598 = 100.64.0.0/10   # Shared Address Space

LINKLOCAL = FE80::/10  # IPv6 link-local

SITELOCAL = FEC0::/10    # Ipv6 Site-local

MULTICAST = 224.0.0.0/4  # IP multicast

# Path: capirca/lib/nacaddr.py
# def IP(ip, comment='', token='', strict=True):
# def _is_subnet_of(a, b):  # pylint: disable=invalid-name
#   def __init__(self, ip_string, comment='', token='', strict=True):
#   def subnet_of(self, other):
#   def supernet_of(self, other):
#   def __deepcopy__(self, memo):
#   def AddComment(self, comment=''):
#   def supernet(self, prefixlen_diff=1):
#   def __init__(self, ip_string, comment='', token='', strict=True):
#   def subnet_of(self, other):
#   def supernet_of(self, other):
#   def __deepcopy__(self, memo):
#   def supernet(self, prefixlen_diff=1):
#   def AddComment(self, comment=''):
# def _InNetList(adders, ip):
# def IsSuperNet(supernets, subnets):
# def CollapseAddrListPreserveTokens(addresses):
# def _SafeToMerge(address, merge_target, check_addresses):
# def _CollapseAddrListInternal(addresses, complements_by_network):
# def CollapseAddrList(addresses, complement_addresses=None):
# def SortAddrList(addresses):
# def RemoveAddressFromList(superset, exclude):
# def AddressListExclude(superset, excludes, collapse_addrs=True):
# class IPv4(ipaddress.IPv4Network):
# class IPv6(ipaddress.IPv6Network):
# class PrefixlenDiffInvalidError(ipaddress.NetmaskValueError):
# 
# Path: capirca/lib/naming.py
# class Error(Exception):
# class NamespaceCollisionError(Error):
# class BadNetmaskTypeError(Error):
# class NoDefinitionsError(Error):
# class ParseError(Error):
# class UndefinedAddressError(Error):
# class UndefinedServiceError(Error):
# class UndefinedPortError(Error):
# class UnexpectedDefinitionTypeError(Error):
# class NamingSyntaxError(Error):
# class _ItemUnit:
# class Naming:
#   def __init__(self, symbol):
#   def __init__(self, naming_dir=None, naming_file=None, naming_type=None):
#   def _CheckUnseen(self, def_type):
#   def GetIpParents(self, query):
#   def GetServiceParents(self, query):
#   def GetNetParents(self, query):
#   def _GetParents(self, query, query_group):
#   def GetNetChildren(self, query):
#   def _GetChildren(self, query, query_group):
#   def _IsIpFormat(self, item):
#   def GetServiceNames(self):
#   def GetService(self, query):
#   def GetPortParents(self, query, proto):
#   def GetServiceByProto(self, query, proto):
#   def GetNetAddr(self, token):
#   def GetNet(self, query):
#   def _Parse(self, defdirectory, def_type):
#   def _ParseFile(self, file_handle, def_type):
#   def ParseServiceList(self, data):
#   def ParseNetworkList(self, data):
#   def _ParseLine(self, line, definition_type):
# 
# Path: tools/cgrep.py
# def is_valid_ip(arg):
# def cli_options():
# def main(argv):
# def check_encapsulated(obj_type, first_obj, second_obj, db):
# def print_diff(ip, common, diff1, diff2):
# def group_diff(options, db):
# def get_ip_parents(ip, db):
# def get_nets_and_highest_prefix(ip, net_group, db):
# def get_nets(objects, db):
# def compare_tokens(options, db):
# def compare_ip_token(options, db):
# def get_ports(svc_group, db):
# def get_services(options, db):


# Path: tests/lib/cgrep_test.py
import argparse
from absl.testing import absltest
from capirca.lib import nacaddr
from capirca.lib import naming
from tools import cgrep

   Order doesn't matter for the purposes of these tests, so many
   actual and expected results are sorted/sets to prevent issues relating to the
   order in which items are returned.
"""




_NETWORK = """
#
# Sample naming defintions for network objects
#
RFC1918 = 10.0.0.0/8      # non-public
          172.16.0.0/12   # non-public
          192.168.0.0/16  # non-public

INTERNAL = RFC1918

LOOPBACK = 127.0.0.0/8  # loopback
           ::1/128       # ipv6 loopback

RFC_3330 = 169.254.0.0/16  # special use IPv4 addresses - netdeploy

RFC_6598 = 100.64.0.0/10   # Shared Address Space

LINKLOCAL = FE80::/10  # IPv6 link-local

SITELOCAL = FEC0::/10    # Ipv6 Site-local

MULTICAST = 224.0.0.0/4  # IP multicast

            FF00::/8     # IPv6 multicast