All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH nft v10]tests: py: fix python3
@ 2019-06-28 20:02 Shekhar Sharma
  2019-07-01 18:48 ` Pablo Neira Ayuso
  0 siblings, 1 reply; 3+ messages in thread
From: Shekhar Sharma @ 2019-06-28 20:02 UTC (permalink / raw)
  To: netfilter-devel; +Cc: Shekhar Sharma

This converts the nft-test.py file to run on both py2 and py3.

Signed-off-by: Shekhar Sharma <shekhar250198@gmail.com>
---
The version history of this patch is:
v1:conversion to py3 by changing the print statements.
v2:add the '__future__' package for compatibility with py2 and py3.
v3:solves the 'version' problem in argparse by adding a new argument.
v4:uses .format() method to make print statements clearer.
v5:updated the shebang and corrected the sequence of import statements.
v6:resent the same with small changes
v7:resent with small changes
v9:replaced os module with tempfile and replaced cmp(a,b)
    with ((a>b)-(a<b)).
v10:replacements from v9 changed to what eric had suggested in his
    patch. (replacement of cmp() function)

---
 tests/py/nft-test.py | 67 ++++++++++++++++++++++----------------------
 1 file changed, 34 insertions(+), 33 deletions(-)

diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
index 09d00dba..f3b17ead 100755
--- a/tests/py/nft-test.py
+++ b/tests/py/nft-test.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/env python
 #
 # (C) 2014 by Ana Rey Botello <anarey@gmail.com>
 #
@@ -13,12 +13,15 @@
 # Thanks to the Outreach Program for Women (OPW) for sponsoring this test
 # infrastructure.
 
+from __future__ import print_function
 import sys
 import os
 import argparse
 import signal
 import json
 import traceback
+import tempfile
+
 
 TESTS_PATH = os.path.dirname(os.path.abspath(__file__))
 sys.path.insert(0, os.path.join(TESTS_PATH, '../../py/'))
@@ -486,12 +489,11 @@ def set_check_element(rule1, rule2):
     '''
     Check if element exists in anonymous sets.
     '''
-    ret = -1
     pos1 = rule1.find("{")
     pos2 = rule2.find("{")
 
-    if (cmp(rule1[:pos1], rule2[:pos2]) != 0):
-        return ret;
+    if (rule1[:pos1] != rule2[:pos2]):
+        return False
 
     end1 = rule1.find("}")
     end2 = rule2.find("}")
@@ -501,13 +503,12 @@ def set_check_element(rule1, rule2):
         list2 = (rule2[pos2 + 1:end2].replace(" ", "")).split(",")
         list1.sort()
         list2.sort()
-        if cmp(list1, list2) == 0:
-            ret = 0
+        if list1 != list2:
+            return False
 
-    if ret != 0:
-        return ret
+        return rule1[end1:] == rule2[end2:]
 
-    return cmp(rule1[end1:], rule2[end2:])
+    return False
 
 
 def obj_add(o, test_result, filename, lineno):
@@ -770,7 +771,7 @@ def rule_add(rule, filename, lineno, force_all_family_option, filename_path):
             unit_tests += 1
             table_flush(table, filename, lineno)
 
-            payload_log = os.tmpfile()
+            payload_log = tempfile.TemporaryFile(mode="w+")
 
             # Add rule and check return code
             cmd = "add rule %s %s %s" % (table, chain, rule[0])
@@ -840,8 +841,8 @@ def rule_add(rule, filename, lineno, force_all_family_option, filename_path):
 
             if rule_output.rstrip() != teoric_exit.rstrip():
                 if rule[0].find("{") != -1:  # anonymous sets
-                    if set_check_element(teoric_exit.rstrip(),
-                                         rule_output.rstrip()) != 0:
+                    if not set_check_element(teoric_exit.rstrip(),
+                                         rule_output.rstrip()):
                         warning += 1
                         retest_output = True
                         print_differences_warning(filename, lineno,
@@ -910,7 +911,7 @@ def rule_add(rule, filename, lineno, force_all_family_option, filename_path):
                               gotf.name, 1)
 
             table_flush(table, filename, lineno)
-            payload_log = os.tmpfile()
+            payload_log = tempfile.TemporaryFile(mode="w+")
 
             # Add rule in JSON format
             cmd = json.dumps({ "nftables": [{ "add": { "rule": {
@@ -1016,9 +1017,9 @@ def execute_cmd(cmd, filename, lineno, stdout_log=False, debug=False):
     :param debug: temporarily set these debug flags
     '''
     global log_file
-    print >> log_file, "command: %s" % cmd
+    print("command: {}".format(cmd), file=log_file)
     if debug_option:
-        print cmd
+        print(cmd)
 
     if debug:
         debug_old = nftables.get_debug()
@@ -1212,7 +1213,7 @@ def run_test_file(filename, force_all_family_option, specific_file):
         sys.stdout.flush()
 
         if signal_received == 1:
-            print "\nSignal received. Cleaning up and Exitting..."
+            print("\nSignal received. Cleaning up and Exitting...")
             cleanup_on_exit()
             sys.exit(0)
 
@@ -1319,13 +1320,13 @@ def run_test_file(filename, force_all_family_option, specific_file):
 
     if specific_file:
         if force_all_family_option:
-            print print_result_all(filename, tests, total_warning, total_error,
-                                   total_unit_run)
+            print(print_result_all(filename, tests, total_warning, total_error,
+                                   total_unit_run))
         else:
-            print print_result(filename, tests, total_warning, total_error)
+            print(print_result(filename, tests, total_warning, total_error))
     else:
         if tests == passed and tests > 0:
-            print filename + ": " + Colors.GREEN + "OK" + Colors.ENDC
+            print(filename + ": " + Colors.GREEN + "OK" + Colors.ENDC)
 
     f.close()
     del table_list[:]
@@ -1336,7 +1337,7 @@ def run_test_file(filename, force_all_family_option, specific_file):
 
 
 def main():
-    parser = argparse.ArgumentParser(description='Run nft tests', version='1.0')
+    parser = argparse.ArgumentParser(description='Run nft tests')
 
     parser.add_argument('filenames', nargs='*', metavar='path/to/file.t',
                         help='Run only these tests')
@@ -1359,6 +1360,10 @@ def main():
                         dest='enable_schema',
                         help='verify json input/output against schema')
 
+    parser.add_argument('-v', '--version', action='version',
+                        version='1.0',
+                        help='Print the version information')
+
     args = parser.parse_args()
     global debug_option, need_fix_option, enable_json_option, enable_json_schema
     debug_option = args.debug
@@ -1372,15 +1377,15 @@ def main():
     signal.signal(signal.SIGTERM, signal_handler)
 
     if os.getuid() != 0:
-        print "You need to be root to run this, sorry"
+        print("You need to be root to run this, sorry")
         return
 
     # Change working directory to repository root
     os.chdir(TESTS_PATH + "/../..")
 
     if not os.path.exists('src/.libs/libnftables.so'):
-        print "The nftables library does not exist. " \
-              "You need to build the project."
+        print("The nftables library does not exist. "
+              "You need to build the project.")
         return
 
     if args.enable_schema and not args.enable_json:
@@ -1434,19 +1439,15 @@ def main():
             run_total += file_unit_run
 
     if test_files == 0:
-        print "No test files to run"
+        print("No test files to run")
     else:
         if not specific_file:
             if force_all_family_option:
-                print "%d test files, %d files passed, %d unit tests, " \
-                      "%d total executed, %d error, %d warning" \
-                      % (test_files, files_ok, tests, run_total, errors,
-                         warnings)
+                print("%d test files, %d files passed, %d unit tests, " % (test_files, files_ok, tests))
+                print("%d total executed, %d error, %d warning" % (run_total, errors,warnings))
             else:
-                print "%d test files, %d files passed, %d unit tests, " \
-                      "%d error, %d warning" \
-                      % (test_files, files_ok, tests, errors, warnings)
-
+                print("%d test files, %d files passed, %d unit tests, " % (test_files, files_ok, tests))
+                print("%d error, %d warning" % (errors, warnings))
 
 if __name__ == '__main__':
     main()
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH nft v10]tests: py: fix python3
  2019-06-28 20:02 [PATCH nft v10]tests: py: fix python3 Shekhar Sharma
@ 2019-07-01 18:48 ` Pablo Neira Ayuso
  2019-07-01 19:06   ` shekhar sharma
  0 siblings, 1 reply; 3+ messages in thread
From: Pablo Neira Ayuso @ 2019-07-01 18:48 UTC (permalink / raw)
  To: Shekhar Sharma; +Cc: netfilter-devel

On Sat, Jun 29, 2019 at 01:32:29AM +0530, Shekhar Sharma wrote:
> This converts the nft-test.py file to run on both py2 and py3.

Patch is applied, thanks Shekhar.

Would you follow up with netns support? Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH nft v10]tests: py: fix python3
  2019-07-01 18:48 ` Pablo Neira Ayuso
@ 2019-07-01 19:06   ` shekhar sharma
  0 siblings, 0 replies; 3+ messages in thread
From: shekhar sharma @ 2019-07-01 19:06 UTC (permalink / raw)
  To: Pablo Neira Ayuso; +Cc: Netfilter Development Mailing list

On Tue, Jul 2, 2019 at 12:18 AM Pablo Neira Ayuso <pablo@netfilter.org> wrote:
>
> On Sat, Jun 29, 2019 at 01:32:29AM +0530, Shekhar Sharma wrote:
> > This converts the nft-test.py file to run on both py2 and py3.
>
> Patch is applied, thanks Shekhar.
>
> Would you follow up with netns support? Thanks.

Yes Pablo, sending the patch as the v11 of 'add netns feature'

Thanks,
Shekhar

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-07-01 19:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-28 20:02 [PATCH nft v10]tests: py: fix python3 Shekhar Sharma
2019-07-01 18:48 ` Pablo Neira Ayuso
2019-07-01 19:06   ` shekhar sharma

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.