440440PATH_VSYS = "./devices/entry[@name='localhost.localdomain']/vsys/entry[@name='vsys1']"
441441PATH_RULES = PATH_VSYS + '/rulebase/security/rules'
442442PATH_TAG = PATH_VSYS + '/tag'
443+ PATH_SERVICE = PATH_VSYS + '/service'
443444
444445
445446class PaloAltoFWTest (unittest .TestCase ):
@@ -472,10 +473,10 @@ def testServiceMap(self):
472473 policy .ParsePolicy (GOOD_HEADER_1 + SVC_TERM_1 , definitions ), EXP_INFO )
473474 self .assertEqual (
474475 pol1 .service_map .entries , {
475- (('22' ,), 'tcp' ): {
476+ ((), ( '22' ,), 'tcp' ): {
476477 'name' : 'service-ssh-term-1-tcp'
477478 },
478- (('25' ,), 'tcp' ): {
479+ ((), ( '25' ,), 'tcp' ): {
479480 'name' : 'service-smtp-term-1-tcp'
480481 }
481482 }, pol1 .service_map .entries )
@@ -485,7 +486,7 @@ def testServiceMap(self):
485486 # The expectation is that there will be a single port mapped.
486487 self .assertEqual (
487488 pol2 .service_map .entries , {
488- (('25' ,), 'tcp' ): {
489+ ((), ( '25' ,), 'tcp' ): {
489490 'name' : 'service-smtp-term-1-tcp'
490491 }
491492 }, pol2 .service_map .entries )
@@ -869,6 +870,69 @@ def testPanApplication(self):
869870 apps = {elem .text for elem in x }
870871 self .assertEqual (APPS [i ], apps , output )
871872
873+ def testPanPorts (self ):
874+ POL = """
875+ header {
876+ target:: paloalto from-zone trust to-zone untrust
877+ }
878+ term rule-1 {
879+ %s
880+ action:: accept
881+ }"""
882+
883+ T = """
884+ protocol:: udp
885+ destination-port:: NTP
886+ """
887+
888+ definitions = naming .Naming ()
889+ definitions ._ParseLine ('NTP = 123/tcp 123/udp' , 'services' )
890+ definitions ._ParseLine ('DNS = 53/tcp 53/udp' , 'services' )
891+
892+ pol = policy .ParsePolicy (POL % T , definitions )
893+ paloalto = paloaltofw .PaloAltoFW (pol , EXP_INFO )
894+ output = str (paloalto )
895+ name = "service-rule-1-udp"
896+ path = "/entry[@name='%s']/protocol/udp/port" % name
897+ x = paloalto .config .findtext (PATH_SERVICE + path )
898+ self .assertEqual (x , "123" , output )
899+ path = "/entry[@name='%s']/protocol/udp/source-port" % name
900+ x = paloalto .config .findtext (PATH_SERVICE + path )
901+ self .assertIsNone (x , output )
902+
903+ T = """
904+ protocol:: udp
905+ source-port:: NTP
906+ """
907+
908+ pol = policy .ParsePolicy (POL % T , definitions )
909+ paloalto = paloaltofw .PaloAltoFW (pol , EXP_INFO )
910+ output = str (paloalto )
911+ name = "service-rule-1-udp"
912+ path = "/entry[@name='%s']/protocol/udp/port" % name
913+ x = paloalto .config .findtext (PATH_SERVICE + path )
914+ self .assertEqual (x , "0-65535" , output )
915+ path = "/entry[@name='%s']/protocol/udp/source-port" % name
916+ x = paloalto .config .findtext (PATH_SERVICE + path )
917+ self .assertEqual (x , "123" , output )
918+
919+ T = """
920+ protocol:: tcp
921+ source-port:: NTP
922+ destination-port:: NTP DNS
923+ """
924+
925+ pol = policy .ParsePolicy (POL % T , definitions )
926+ paloalto = paloaltofw .PaloAltoFW (pol , EXP_INFO )
927+ output = str (paloalto )
928+ name = "service-rule-1-tcp"
929+ path = "/entry[@name='%s']/protocol/tcp/port" % name
930+ x = paloalto .config .findtext (PATH_SERVICE + path )
931+ self .assertEqual (x , "53,123" , output )
932+ path = "/entry[@name='%s']/protocol/tcp/source-port" % name
933+ x = paloalto .config .findtext (PATH_SERVICE + path )
934+ self .assertEqual (x , "123" , output )
935+
872936
873937if __name__ == '__main__' :
874938 unittest .main ()
0 commit comments