Commit graph

319 commits

Author SHA1 Message Date
Thomas Haller e37a15acad
all: avoid "==" bashism in scripts 2023-05-18 09:16:41 +02:00
Thomas Haller 33f7ee0bb7
nm-in-container: run with "--no-hosts" to have a plain /etc/hosts in the container
The bind mount interferes with running certain CI tests that want to
change /etc/hosts.
2023-05-15 11:02:10 +02:00
Lubomir Rintel c72e085f5c
test/cloud-meta-mock: mock GCP metadata API
Not used for testing, but still might be useful for development.
2023-05-12 12:42:55 +02:00
Lubomir Rintel 5b5ef08aee
test/cloud-meta-mock: mock azure metadata API
Not used for testing, but still might be useful for development.
2023-05-12 12:42:55 +02:00
Lubomir Rintel 620a737cb7
test/cloud-meta-mock: mock aliyun metadata API
Not used for testing, but still might be useful for development.
2023-05-12 12:42:55 +02:00
Lubomir Rintel 41f0f6fec8
test/cloud-meta-mock: allow putting the resources
This reworks the cloud metadata mock server in a significant way.

Most importantly this makes it possible for the client to add and
modify the resources for later retrieval using the PUT method.
This allows the test to create the fixture for itself.

The default set of resources is still provided, so that the too remains
useful as a development aid. If that is not desirable, the --empty
parameter might be passed to cause the server to start with no
resources.
2023-05-12 12:42:55 +02:00
Lubomir Rintel 2e8ff9f8a0
Revert "client/tests: don't do dup2() dance to pass file descriptor to "tools/test-cloud-meta-mock.py""
This changed the fd passing protocol making it not compatible with
systemd-socket-activate(1).

This reverts commit 342ee618c7.
2023-05-12 12:42:54 +02:00
Thomas Haller 840abc6c45
nm-in-container: set NMCI_DEBUG=1 in bashrc 2023-04-26 11:05:18 +02:00
Thomas Haller 105eb39cda
nm-in-container: add commands to bash history 2023-04-18 20:47:32 +02:00
Beniamino Galvani 230f3f5ce7 nm-in-container: install libselinux-utils
It contains "getenforce" and "setenforce", which are needed by some
NMCI tests.
2023-04-18 10:10:56 +02:00
Thomas Haller 342ee618c7
client/tests: don't do dup2() dance to pass file descriptor to "tools/test-cloud-meta-mock.py"
"preexec_fn" is not great, because it is not generally safe in multi
threaded code (and we don't know whether the test didn't start other
threads already, like a GDBus worker thread). Well, it probably is safe,
if you only call async signal safe code, but it's not clear what os.dup2()
does under the hood.

Just avoid that. We can pass on the FD directly.
2023-03-30 15:36:16 +02:00
Lubomir Rintel 1e114c804b tools/test-cloud-meta-mock: add a mock metadata server for cloud-setup
Useful for testing/development.
2023-03-21 23:35:42 +01:00
Lubomir Rintel fa191c929b test/nm-service: short circuit activation if AC activation delay is zero
This makes it possible for use to create a connection in immediately
rely on it being activated.
2023-03-21 21:56:17 +01:00
Lubomir Rintel 472e49e7b3 test/nm-service: make activation delay actually useful
The activation_state_change_delay_ms was not too useful, since it could
be changed only after the AC started activating. Not a big deal, since
it was actually unused.

Apart from that, the SetActiveConnectionStateChangedDelay() didn't make
a whole lot of sense either: it accepted a Device path, but actually
was looking up an AC.

Let's move the property to the Device, so that 1.) it can be adjusted
before the AC is constructed (the AC will inherit it from the Device)
and 2.) SetActiveConnectionStateChangedDelay() does no longer hurt my
feelings.
2023-03-21 21:56:17 +01:00
Lubomir Rintel 5ae3dc03a5 test/nm-service: implement applied connection handling
GetAppliedConnection() and Reapply(), both just enough to support
nm-cloud-setup.
2023-03-21 21:56:17 +01:00
Lubomir Rintel f8188d51b2 test/nm-service: deconstruct string properties in connections too
I don't know what's going on:

  ======================================================================
  ERROR: test_ec2 (__main__.TestNmCloudSetup.test_ec2)
  ----------------------------------------------------------------------
  Traceback (most recent call last):
    File "NetworkManager/src/tests/client/test-client.py", line 2169, in f
      func(self)
    File "NetworkManager/src/tests/client/test-client.py", line 2194, in test_ec2
      conn = self.srv.op_AddAndActivateConnection(
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/src/tests/client/test-client.py", line 748, in __call__
      return method(*args)
             ^^^^^^^^^^^^^
    File "/usr/lib64/python3.11/site-packages/dbus/proxies.py", line 72, in __call__
      return self._proxy_method(*args, **keywords)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib64/python3.11/site-packages/dbus/proxies.py", line 141, in __call__
      return self._connection.call_blocking(self._named_service,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "/usr/lib64/python3.11/site-packages/dbus/connection.py", line 634, in call_blocking
      reply_message = self.send_message_with_reply_and_block(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  dbus.exceptions.DBusException: org.freedesktop.DBus.Python.Exception: Traceback (most recent call last):
    File "/usr/lib64/python3.11/site-packages/dbus/service.py", line 712, in _message_cb
      retval = candidate_method(self, *args, **keywords)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 1693, in AddAndActivateConnection
      conpath, acpath, result = self.AddAndActivateConnection2(
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 1707, in AddAndActivateConnection2
      conpath = gl.settings.AddConnection(con_hash)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 2198, in AddConnection
      return self.add_connection(con_hash)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 2208, in add_connection
      con_inst = Connection(self.c_counter, con_hash, do_verify_strict)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 2045, in __init__
      NmUtil.con_hash_verify(con_hash, do_verify_strict=do_verify_strict)
    File "NetworkManager/tools/test-networkmanager-service.py", line 594, in con_hash_verify
      BusErr.raise_nmerror(e)
    File "NetworkManager/tools/test-networkmanager-service.py", line 497, in raise_nmerror
      raise e
    File "NetworkManager/tools/test-networkmanager-service.py", line 590, in con_hash_verify
      con_nm = NmUtil.con_hash_to_connection(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 537, in con_hash_to_connection
      assert GLib.Variant.equal(x_con, Util.variant_from_dbus(con_hash))
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "NetworkManager/tools/test-networkmanager-service.py", line 378, in variant_from_dbus
      raise Exception("Unsupported type for value '%s'" % (repr(val)))
  Exception:
  Unsupported type for value 'dbus.Dictionary({
    dbus.String('connection'): dbus.Dictionary({
      dbus.String('type'): dbus.String('802-3-ethernet'),
      dbus.String('id'): dbus.String('con-eth0'),
      'uuid': '5fcfd6d7-1e63-3332-8826-a7eda103792d'
    }, signature=dbus.Signature('ss')),
    dbus.String('ipv4'): dbus.Dictionary({
      dbus.String('method'): dbus.String('auto')
    }, signature=dbus.Signature('ss'))
  }, signature=dbus.Signature('sa{ss}'))'
2023-03-21 21:56:17 +01:00
Thomas Haller 2c9faea63c
contrib,tools: move "nm-in-container.sh" script to "tools"
This script seems very useful to me. Give it a more prominent place and
move it out from "contrib/scripts". Also do some further renaming.
2023-03-20 08:59:59 +01:00
Daniel Kolesa 97abbbb987
build: fix pretty() sed invocation portability in .ver script
The `\0` being used to refer to the whole match is a GNU
extension. On other implementations of sed, this will simply
replace the each matched line with `	0;`, resulting in symbols
being missing in the NetworkManager executable, which breaks the
wifi plugin and others.

Use `&` instead, which behaves as expected in all implementations.

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1562
2023-03-07 08:02:22 +01:00
Thomas Haller dd5e769f24
build: add test for checking consistency of "nm-autoptr.h" 2023-02-28 16:33:07 +01:00
Thomas Haller fdec6a97e8
vapi: add test for consistency of "vapi/NM-1.0.metadata" 2023-02-28 13:05:47 +01:00
Thomas Haller a259303e1d
ovs: add support for "other_config" settings
See `man ovs-vswitchd.conf.db` for documentation of "other_config" keys.

https://bugzilla.redhat.com/show_bug.cgi?id=2151455
2023-01-11 21:49:36 +01:00
Lubomir Rintel 03813a530a tools/check-docs: more checks for missing includes
We get this wrong *very* often.
2022-11-13 23:36:37 +01:00
Thomas Haller 139f4b4b2e
build: pass both filenames to "tools/check-compare-generated.sh" script
It just feels nicer to be explicit about the filenames and
not rely on a specific naming.

Also, in meson we can directly pass the target as argument, which
expands to the filename but also adds a dependency.
2022-10-31 09:11:30 +01:00
Thomas Haller ea5cd47bc4
tools: drop unused variables from "tools/generate-docs-nm-property-infos.py"
Found by lgtm.com.
2022-10-25 12:12:44 +02:00
Thomas Haller 70fee1cf46
tools: avoid Python 3 f-string in "generate-docs-nm-property-infos.py"
We also need to build with python2. No f-strings.

Fixes: 8fc7b6df12 ('tools: rework generating documentation from libnm meta data')
2022-10-07 21:08:39 +02:00
Thomas Haller 77e0041b27
tools: sort the settings in "generate-docs-nm-property-infos.py" by name
"nm-setting-ip-config.c" is a base class for IPv4 and IPv6 settings. So
far, any tags there were ignored, which was not obvious. It can be
useful to document common properties there. Well, maybe every property
better has a IPv4/IPv6 specific text, but that should not be a technical
limitation of the tool. So also honor the base file for "ipv4" and
"ipv6" settings.

When doing that, the settings are no longer processed in the order as
they are provided on the command line. Because, one file would be parsed
twice, it wouldn't make much sense. Instead, sort the my setting name.
The advantage is that the generated XML is independent from the order
that make/meson passes to the tool.
2022-10-06 13:40:30 +02:00
Thomas Haller c1bebdfaa6
tools: don't set empty attributes in "generate-docs-nm-property-infos.py"
If the information is missing, the entire attribute should not be there.
Don't set it to the empty word.

Also, don't alias the "variable" attribute to the "name". It's not clear
what the "variable" fields is supposed to mean, but if it's not
explicitly set, don't make up the information. If a user of that
information cares, the can always fallback to the "name".
2022-10-06 13:40:30 +02:00
Thomas Haller e56f7f5c2d
tools: don't write empty XML nodes in "generate-docs-nm-property-infos.py"
This generates '<setting name="XXX">\n</setting>' nodes in case there is
no additional data. Don't do that. Just '<setting name="XXX"/>'
2022-10-06 13:40:29 +02:00
Thomas Haller 8899ecc0d8
tools: preserve newlines and indentation in "generate-docs-nm-property-infos.py"
Our docs can be long. It's important to be able to express paragraphs.
Honor a blank line to include a newline. For XML often whitespace is
ignored, but our tools can choose to honor the newline.

Also, don't strip the whitespace from the beginning and the end.
We keep whitespace for a certain indentation level, but additional
whitespace gets preserved. This is less important, because regular
spaces is indeed irrelevant. But when we write the annotations, we
should be in full control over spaces.
2022-10-06 13:40:29 +02:00
Thomas Haller 8fc7b6df12
tools: rework generating documentation from libnm meta data
With the given input, this produces *exactly* the same XML as before.

- the parsing is now stricter (and thus the code more verbose). No
  funny stuff, get the annotations correct.
- on parsing errors, we log now the affecting lines
- "nm-setting-ip-config.c" is a base class. Previously it was ignored
  and for the moment we still do that. Next, we will allow to also
  describe properties there.
- prepare the code to better preserve whitespace, indentation and line
  wrappings. In particular, to honor a blank line to indicate a line break
  and support paragraphs. This is not yet done to compare the output
  to before, but will be turned on with a small patch next.
- the code will make it simple to promote the XML attributes to
  nodes. Attributes aren't great, let's write XML nodes later.
  We will only need to adjust the "keywords" dictionary for that,
  but this change will require changes to the entire chain of tools.
2022-10-06 13:40:29 +02:00
Thomas Haller af2bc358df
style: fix python black formatting of "generate-docs-nm-settings-docs-merge.py" 2022-09-08 09:00:27 +02:00
Lubomir Rintel 8af1404e54 generate-docs-nm-settings-docs-gir: remove space from the beginning of a para
From nm-settings-dbus(5):

Before (ugly, offensive, possibly in violation of geneva protocol):

  ...
  | set, the authentication retries for 3
  | times before failing the connection.
  |
  |  Currently, this only applies to 802-1x
  | authentication.

After (beautiful, smells good, in harmony with nature):

  ...
  | set, the authentication retries for 3
  | times before failing the connection.
  |
  | Currently, this only applies to 802-1x
  | authentication.
2022-09-07 12:10:21 +02:00
Lubomir Rintel 4d42b81d2a generate-docs-nm-settings-docs-gir: move deprecation info to a separate tag
Previously, the deprecation data was included in <description*>, in form
of an integer. E.g.:

  /**
   * NMSettingLala:hello:
   *
   * Does this and that.
   *
   * Deprecated: 1.12: Be sad instead.
   **/

Results in:

  <property name="hello">
    <description>Does this and that. Deprecated: 1</description>
  </property>

Let's make it do this instead:

  <property name="hello">
    <description>Does this and that.</description>
    <deprecated since="1.12">Be sad instead.</description>
  </property>
2022-09-07 11:01:40 +02:00
Lubomir Rintel d71f0aac39 generate-docs-nm-settings-docs-merge: merge <deprecated*> elements
They will be used to include property deprecation data.
2022-09-07 10:55:31 +02:00
Lubomir Rintel 6ce2aae011 generate-docs-nm-settings-docs-merge: streamline a bit
Replace a pair of overly sophisticated expressions with something that's
easier to follow, avoiding code duplication at the same time.
2022-09-07 10:55:31 +02:00
Thomas Haller 8efc0319ce
build/meson: force overwriting files in "meson-post-install.sh"
Repeated `ninja -C build install` should succeed. But they did not:

  Running custom install script '/data/src/NetworkManager/tools/meson-post-install.sh /usr/share /usr/bin /etc/NetworkManager /usr/lib/NetworkManager /var/lib/NetworkManager /usr/share/man /etc 1 1 1 1'
  --- stdout ---

  --- stderr ---
  ln: failed to create symbolic link '/usr/lib/NetworkManager/dispatcher.d/90-nm-cloud-setup.sh': File exists
2022-08-08 11:54:26 +02:00
Vojtech Bubela 5e4632f021
doc: preserve paraghraphs in nmcli man pages
Improve documentation by preserving paragraphs in the
nm-settings-nmcli man pages.

To do that structure of src/libnm-client-impl/nm-settings-docs-gir.xml
was changed to have "description" as subnode to property node instead
of attribute of property node. Another subnode "description-docbook"
was added - this node is then used when generating man pages.

tools/generate-docs-nm-settings-docs-gir.py and man/nm-settings-dbus.xsl
were also changed to accomodate for changes mentioned above.

Replace xsltproc tool with python script when generating
./src/libnmc-setting/settings-docs.h.

Deleted settings-docs.xsl since it was replaced by python script.

Change src/libnmc-setting/settings-docs.h.in accodring to newly
generated src/libnmc-setting/settings-docs.h

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/661

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1260
2022-07-15 17:25:15 +02:00
Igor Ponomarev daecc226ee
tools: Fix generate-docs-nm-settings-docs-gir.py on Python 2
On python2 the following error is raised:

`LookupError: unknown encoding: unicode`

Seems like `unicode` is a correct encoding in Python 3 but not 2.

Fix:

1. Change encoding to `utf-8`
2. Pass output path string instead of opening file and passing
   opened file object. Python2 and 3 might need different file
   modes, passing just path lets ElementTree select appropriate
   file mode.

Fixes: f00e90923c ('tools: Use ElementTree to write XML in generate-docs-nm-settings-docs-gir.py')

https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/1249
2022-06-03 08:26:12 +02:00
Igor Ponomarev f00e90923c
tools: Use ElementTree to write XML in generate-docs-nm-settings-docs-gir.py
Instead of manually writting XML line by line.
Quoting is automatic.
Makes it much easier to modify. (just add new elements)

Generated XML not indented at the moment.
2022-05-31 13:28:59 +02:00
Igor Ponomarev a2298d31c0
tools: Modernize generate-docs-nm-settings-docs-gir.py to 2022 standards
* Create main() function and put its execution under
  __name__ == '__main__' guard.
* Only one module import per line
* Use required=True to check if necessary arguments have
  been passed.
* Remove usage() as ArgumentParser handles that already
2022-05-31 13:28:51 +02:00
Thomas Haller 7062de9219
build/meson: use "rename" directive for installing nmcli bash completion
Otherwise, `ninja -C build uninstall` tries to delete "nmcli-completion",
when the file got renamed to "nmcli".

We depend on meson 0.47.2 already.
2022-05-13 16:15:18 +02:00
Thomas Haller aaf2155023
libnm/docs: fix documentation for "proxy.pac-script" 2022-03-21 15:21:37 +01:00
Thomas Haller 180b9e0e41 tests: propagate 77 exit code from "tools/run-nm-test.sh"
This is important. We must not swallow 77, which has the meaning
that the test was skipped.

Fixes: f65747f6e9 ('tests: let "run-nm-test.sh" fail with exit code 1 on failure')
(cherry picked from commit aff40f736c)
2022-02-19 13:43:14 +01:00
Thomas Haller 069089cdf2
tools: fix constructing XML by dropping broken pretty_xml()
I don't understand the code, but it mangles the XML.

There is no difference in the markup we have so far. But if you
have nested XML (like for description-docbook tag) there are cases
where this is wrong.

There is also no need to prettify anything. If you want pretty-formatted
XML, do it yourself, for example with

  $ tidy --indent yes --indent-spaces 4 --indent-attributes yes --wrap-attributes yes --input-xml yes --output-xml yes src/libnm-client-impl/nm-property-infos-nmcli.xml

I think this was initially done, because we had the tool in perl, and
when migrating, we wanted to generate the exactly same output. And it
was the same output, and it was fine for the input we have. But with
different input, it's wrong. Drop it now.

(cherry picked from commit 35599b4349)
2022-02-10 08:41:19 +01:00
Thomas Haller f21cb3065e
tools: re-use regular expression in process_data()
Yes, they get cached by the library already. Still, no need for
doing this repeatedly.

(cherry picked from commit 41a177486b)
2022-02-10 08:41:19 +01:00
Thomas Haller 1701048e02
tests: let "run-nm-test.sh" fail with exit code 1 on failure
`git bisect run` is peculiar about the exit code:

  error: bisect run failed: exit code 134 from '...' is < 0 or >= 128

If we just "exec" the test, it usually will fail on an assert. That results
in SIGABRT or exit code 134. So out of the box that is annoying with
git-bisect.

Work around that and let the test wrapper always coerce any test failure
to exit code 1.

(cherry picked from commit f65747f6e9)
2022-02-10 08:41:15 +01:00
Thomas Haller 1f9de38a7b
tools/tests: set available-connections for vlan device in NM test stub 2022-01-21 12:08:00 +01:00
Thomas Haller eda2c5ac48
tools: support --no-make-first option in "run-nm-test.sh"
Why? Because I often use a command line like

  $ ./tools/run-nm-test.sh -m src/libnm-client-impl/tests/test-nm-client -p /libnm/device-connection-compatibility

or even alias it to a one character command `x`.
Usually I want to do the rebuild, and as `make` is so slow, it
adds noticeable time running the command. Thus, sometimes I want
to modify the command, for which I have to edit the command from the
history, or toggle two separate commands.

Add a `-M` flag that can reverse the effect of an earlier `-m`.

An "enable" flag in general should just also have a "disable" flag.
2022-01-21 12:08:00 +01:00
Thomas Haller 58287cbcc0 core: rework IP configuration in NetworkManager using layer 3 configuration
Completely rework IP configuration in the daemon. Use NML3Cfg as layer 3
manager for the IP configuration of an interface. Use NML3ConfigData as
pieces of configuration that the various components collect and
configure. NMDevice is managing most of the IP configuration at a higher
level, that is, it starts DHCP and other IP methods. Rework the state
handling there.

This is a huge rework of how NetworkManager daemon handles IP
configuration. Some fallout is to be expected.

It appears the patch deletes many lines of code. That is not accurate, because
you also have to count the files `src/core/nm-l3*`, which were unused previously.

Co-authored-by: Beniamino Galvani <bgalvani@redhat.com>
2021-11-18 16:21:29 +01:00
Thomas Haller fc220f94af
build/tests: ignore all valgrind warnings about unhandled syscalls
valgrind might log warnings about syscalls that it doesn't implement.
When we run valgrind tests, we check that the command exits with
success, but we also check that there is no unexpected content in the
valgrind log.

Those warnings are not relevant for us. We don't unit-tests valgrind, we
unit tests NetworkManager. Let's always remove such warnings with `sed`.

We already did that previously, but only for a explicit list of tests.
Now do it for all tests.

This is currently relevant on Fedora 35 and Ubuntu devel, where the
"close_range" syscall is used by libc, but not supported by valgrind.

While at it, rework the confusing logic of "HAS_ERRORS" variable.
2021-10-08 12:45:51 +02:00