summary refs log tree commit diff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/generate-docs-nm-property-infos.py18
-rwxr-xr-xtools/generate-docs-nm-settings-docs-merge.py37
-rwxr-xr-xtools/run-nm-test.sh37
-rwxr-xr-xtools/test-networkmanager-service.py16
4 files changed, 69 insertions, 39 deletions
diff --git a/tools/generate-docs-nm-property-infos.py b/tools/generate-docs-nm-property-infos.py
index fe2053a3..41349e6d 100755
--- a/tools/generate-docs-nm-property-infos.py
+++ b/tools/generate-docs-nm-property-infos.py
@@ -66,6 +66,7 @@ def process_data(data):
         "default",
         "example",
         "description",
+        "description-docbook",
     ]
     kwd_pat = "|".join(keywords)
     keyword = ""
@@ -76,14 +77,20 @@ def process_data(data):
         kwd_more_line_found = re.search(r"^\s*\**\s+(.*?)\s*$", line)
         if kwd_first_line_found:
             keyword = kwd_first_line_found.group(1)
-            value = kwd_first_line_found.group(2) + " "
+            if keyword == "description-docbook":
+                value = kwd_first_line_found.group(2) + "\n"
+            else:
+                value = kwd_first_line_found.group(2) + " "
             parsed_data[keyword] = value
         elif kwd_more_line_found:
             if not keyword:
                 print("Extra mess in a comment: %s" % (line))
                 exit(1)
             else:
-                value = kwd_more_line_found.group(1) + " "
+                if keyword == "description-docbook":
+                    value = kwd_more_line_found.group(1) + "\n"
+                else:
+                    value = kwd_more_line_found.group(1) + " "
                 parsed_data[keyword] += value
     for keyword in keywords:
         if keyword == "variable" and keyword not in parsed_data:
@@ -104,6 +111,13 @@ def write_data(setting_node, parsed_data):
     property_node.set("default", parsed_data["default"])
     property_node.set("example", parsed_data["example"])
     property_node.set("description", parsed_data["description"])
+    if parsed_data["description-docbook"]:
+        des = ET.fromstring(
+            "<description-docbook>"
+            + parsed_data["description-docbook"]
+            + "</description-docbook>"
+        )
+        property_node.append(des)
 
 
 def pretty_xml(element, newline, level=0):
diff --git a/tools/generate-docs-nm-settings-docs-merge.py b/tools/generate-docs-nm-settings-docs-merge.py
index a478ae75..0f0f181b 100755
--- a/tools/generate-docs-nm-settings-docs-merge.py
+++ b/tools/generate-docs-nm-settings-docs-merge.py
@@ -9,6 +9,14 @@ import xml.etree.ElementTree as ET
 
 ###############################################################################
 
+
+def dbg(msg):
+    pass
+    # print("%s" % (msg,))
+
+
+###############################################################################
+
 _setting_name_order = [
     "connection",
     "6lowpan",
@@ -103,6 +111,13 @@ def node_set_attr(dst_node, name, nodes):
         dst_node.set(name, x)
 
 
+def find_first_not_none(itr):
+    for i in itr:
+        if i is not None:
+            return i
+    return None
+
+
 ###############################################################################
 
 gl_only_from_first = False
@@ -123,6 +138,9 @@ gl_input_files = list(argv[1:])
 
 ###############################################################################
 
+for f in gl_input_files:
+    dbg("> input file %s" % (f))
+
 xml_roots = list([ET.parse(f).getroot() for f in gl_input_files])
 
 assert all([root.tag == "nm-setting-docs" for root in xml_roots])
@@ -133,14 +151,18 @@ root_node = ET.Element("nm-setting-docs")
 
 for setting_name in iter_keys_of_dicts(settings_roots, key_fcn_setting_name):
 
+    dbg("> > setting_name: %s" % (setting_name))
+
     settings = list([d.get(setting_name) for d in settings_roots])
 
     if gl_only_from_first and settings[0] is None:
+        dbg("> > > skip (only-from-first")
         continue
 
     properties = list([node_to_dict(s, "property", "name") for s in settings])
 
     if gl_only_from_first and not properties[0]:
+        dbg("> > > skip (no properties")
         continue
 
     setting_node = ET.SubElement(root_node, "setting")
@@ -151,17 +173,29 @@ for setting_name in iter_keys_of_dicts(settings_roots, key_fcn_setting_name):
     node_set_attr(setting_node, "name_upper", settings)
     node_set_attr(setting_node, "alias", settings)
 
+    dbg("> > > create node")
+
     for property_name in iter_keys_of_dicts(properties):
 
+        dbg("> > > > property_name: %s" % (property_name))
+
         properties_attrs = list([p.get(property_name) for p in properties])
+        description_docbook = find_first_not_none(
+            p_attr.find("description-docbook")
+            for p_attr in properties_attrs
+            if p_attr is not None
+        )
 
         if gl_only_from_first and properties_attrs[0] is None:
+            dbg("> > > > skip (only-from-first")
             continue
 
         property_node = ET.SubElement(setting_node, "property")
         property_node.set("name", property_name)
         property_node.set("name_upper", property_name.upper().replace("-", "_"))
 
+        dbg("> > > > > create node")
+
         x = node_get_attr(properties_attrs, "format")
         if x:
             property_node.set("type", x)
@@ -171,5 +205,8 @@ for setting_name in iter_keys_of_dicts(settings_roots, key_fcn_setting_name):
         node_set_attr(property_node, "default", properties_attrs)
         node_set_attr(property_node, "description", properties_attrs)
         node_set_attr(property_node, "alias", properties_attrs)
+        if description_docbook is not None:
+            property_node.insert(0, description_docbook)
+
 
 ET.ElementTree(root_node).write(gl_output_xml_file)
diff --git a/tools/run-nm-test.sh b/tools/run-nm-test.sh
index 81b94ec6..230a7a66 100755
--- a/tools/run-nm-test.sh
+++ b/tools/run-nm-test.sh
@@ -331,11 +331,11 @@ export NM_TEST_UNDER_VALGRIND=1
     "${TEST_ARGV[@]}"
 RESULT=$?
 
-test -s "$LOGFILE"
-HAS_ERRORS=$?
+LOGFILE_HAS_WARNINGS=0
+test -s "$LOGFILE" && LOGFILE_HAS_WARNINGS=1
 
 if [ $RESULT -ne 0 -a $RESULT -ne 77 ]; then
-    if [ $HAS_ERRORS -ne 0 ]; then
+    if [ "$LOGFILE_HAS_WARNINGS" != 1 ]; then
         rm -f "$LOGFILE"
     elif [ $RESULT -ne $VALGRIND_ERROR ]; then
         # the test (probably) didn't fail due to valgrind.
@@ -358,32 +358,15 @@ if [ $RESULT -ne 0 -a $RESULT -ne 77 ]; then
     exit $RESULT
 fi
 
-if [ $HAS_ERRORS -eq 0 ]; then
-    # valgrind doesn't support setns syscall and spams the logfile.
-    # hack around it...
-    case "$TEST_NAME" in
-        'test-acd' | \
-        'test-address-linux' | \
-        'test-cleanup-linux' | \
-        'test-config' | \
-        'test-l3cfg' | \
-        'test-link-linux' | \
-        'test-lldp' | \
-        'test-nm-client' | \
-        'test-platform-general' | \
-        'test-remote-settings-client' | \
-        'test-route-linux' | \
-        'test-secret-agent' | \
-        'test-service-providers' | \
-        'test-tc-linux' )
-            if [ -z "$(sed -e '/^--[0-9]\+-- WARNING: unhandled .* syscall: /,/^--[0-9]\+-- it at http.*\.$/d' "$LOGFILE")" ]; then
-                HAS_ERRORS=1
-            fi
-            ;;
-    esac
+if [ "$LOGFILE_HAS_WARNINGS" = 1 ]; then
+    # valgrind may not support certain syscalls and spam the logfile with warnings.
+    # Hack around this. If the logfile only contains such warnings, ignore them.
+   if [ -z "$(sed -e '/^--[0-9]\+-- WARNING: unhandled .* syscall: /,/^--[0-9]\+-- it at http.*\.$/d' "$LOGFILE")" ]; then
+       LOGFILE_HAS_WARNINGS=0
+   fi
 fi
 
-if [ $HAS_ERRORS -eq 0 ]; then
+if [ "$LOGFILE_HAS_WARNINGS" = 1 ]; then
     # shouldn't actually happen...
     echo "valgrind succeeded, but log is not empty: '`realpath "$LOGFILE"`'" >&2
     exit 1
diff --git a/tools/test-networkmanager-service.py b/tools/test-networkmanager-service.py
index 66af0ede..f990a0e4 100755
--- a/tools/test-networkmanager-service.py
+++ b/tools/test-networkmanager-service.py
@@ -1489,10 +1489,6 @@ class ActiveConnection(ExportedObj):
 
     def start_deactivation(self):
         assert self._deactivation_id is None
-        self._set_state(
-            NM.ActiveConnectionState.DEACTIVATING,
-            NM.ActiveConnectionStateReason.USER_DISCONNECTED,
-        )
         self.device.set_state(
             NM.DeviceState.DEACTIVATING, NM.DeviceStateReason.USER_REQUESTED
         )
@@ -1566,8 +1562,8 @@ class NetworkManager(ExportedObj):
         pass
 
     def set_state(self, new_state):
-        self._dbus_property_set(IFACE_NM, PRP_NM_STATE, state)
-        self.StateChanged(dbus.UInt32(self.state))
+        self._dbus_property_set(IFACE_NM, PRP_NM_STATE, new_state)
+        self.StateChanged(dbus.UInt32(new_state))
 
     @dbus.service.method(dbus_interface=IFACE_NM, in_signature="", out_signature="ao")
     def GetDevices(self):
@@ -2270,7 +2266,7 @@ class IP4Config(ExportedObj):
     def __init__(self, generate_seed=_DEFAULT_ARG):
         ExportedObj.__init__(self, ExportedObj.create_path(IP4Config))
 
-        if generate_seed == _DEFAULT_ARG:
+        if generate_seed is _DEFAULT_ARG:
             generate_seed = self.path
 
         props = self._props_generate(generate_seed)
@@ -2469,7 +2465,7 @@ class IP6Config(ExportedObj):
     def __init__(self, generate_seed=_DEFAULT_ARG):
         ExportedObj.__init__(self, ExportedObj.create_path(IP6Config))
 
-        if generate_seed == _DEFAULT_ARG:
+        if generate_seed is _DEFAULT_ARG:
             generate_seed = self.path
 
         props = self._props_generate(generate_seed)
@@ -2643,7 +2639,7 @@ class Dhcp4Config(ExportedObj):
     def __init__(self, generate_seed=_DEFAULT_ARG):
         ExportedObj.__init__(self, ExportedObj.create_path(Dhcp4Config))
 
-        if generate_seed == _DEFAULT_ARG:
+        if generate_seed is _DEFAULT_ARG:
             generate_seed = self.path
 
         props = self._props_generate(generate_seed)
@@ -2684,7 +2680,7 @@ class Dhcp6Config(ExportedObj):
     def __init__(self, generate_seed=_DEFAULT_ARG):
         ExportedObj.__init__(self, ExportedObj.create_path(Dhcp6Config))
 
-        if generate_seed == _DEFAULT_ARG:
+        if generate_seed is _DEFAULT_ARG:
             generate_seed = self.path
 
         props = self._props_generate(generate_seed)