diff options
Diffstat (limited to 'tools')
| -rwxr-xr-x | tools/generate-docs-nm-property-infos.py | 18 | ||||
| -rwxr-xr-x | tools/generate-docs-nm-settings-docs-merge.py | 37 | ||||
| -rwxr-xr-x | tools/run-nm-test.sh | 37 | ||||
| -rwxr-xr-x | tools/test-networkmanager-service.py | 16 |
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) |