summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-06-06 10:29:36 +0200
committerThomas Haller <thaller@redhat.com>2018-06-06 10:29:36 +0200
commitc318d8c18f47282a1cfd8be2c154990dbfebe39b (patch)
treed00cb82e9494fe0fd0c0dabc691c4419c0e90340
parent644aa42f68d9d6f30144dba243f95690226a777c (diff)
parent2e22c931f94d7af499d650bdd3bb3a4bf9e15a22 (diff)
downloadNetworkManager-c318d8c18f47282a1cfd8be2c154990dbfebe39b.tar.gz
clients/tests: merge branch 'th/clients-tests'
https://github.com/NetworkManager/NetworkManager/pull/130
-rw-r--r--clients/tests/test-client.check-on-disk/Makefile.am28
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-001.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-002.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-003.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-004.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-005.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-006.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-007.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-008.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-009.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-010.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-011.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-012.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-013.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-014.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-015.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-016.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-017.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-018.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-019.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-020.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-021.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-022.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-023.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-024.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-025.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_001-026.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-001.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-002.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-003.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-004.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-005.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-006.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-007.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-008.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-009.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-010.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-011.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-012.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-013.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-014.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-015.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-016.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-017.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-018.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-019.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-020.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-021.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-022.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-023.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_002-024.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-001.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-002.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-003.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-004.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-005.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-006.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-007.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-008.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-009.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-010.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-011.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-012.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-013.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-014.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-015.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-016.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-017.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-018.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-019.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-020.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-021.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-022.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-023.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-024.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-025.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-026.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-027.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-028.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-029.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-030.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-031.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-032.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-033.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-034.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-035.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-036.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-037.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-038.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-039.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-040.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-041.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-042.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-043.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-044.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-045.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-046.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-047.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-048.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-049.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-050.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-051.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-052.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-053.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-054.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-055.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-056.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-057.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-058.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-059.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-060.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-061.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-062.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-063.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-064.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-065.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-066.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-067.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-068.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-069.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-070.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-071.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-072.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-073.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-074.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-075.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-076.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-077.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-078.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-079.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-080.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-081.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-082.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-083.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-084.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-085.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-086.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-087.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-088.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-089.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-090.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-091.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_003-092.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-001.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-002.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-003.expected9
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-004.expected7
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-005.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-006.expected2
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-007.expected12
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-008.expected92
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-009.expected92
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-010.expected13
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-011.expected16
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-012.expected16
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-013.expected82
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-014.expected82
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-015.expected13
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-016.expected16
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-017.expected16
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-018.expected13
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-019.expected16
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-020.expected16
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-021.expected102
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-022.expected102
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-023.expected102
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-024.expected102
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-025.expected82
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-026.expected82
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-027.expected18
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-028.expected18
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-029.expected24
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-030.expected24
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-031.expected19
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-032.expected19
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-033.expected74
-rw-r--r--clients/tests/test-client.check-on-disk/test_004-034.expected74
-rwxr-xr-xclients/tests/test-client.py63
-rwxr-xr-xtools/test-networkmanager-service.py591
179 files changed, 1966 insertions, 361 deletions
diff --git a/clients/tests/test-client.check-on-disk/Makefile.am b/clients/tests/test-client.check-on-disk/Makefile.am
index e917a3aaa5..7c9cabe8a4 100644
--- a/clients/tests/test-client.check-on-disk/Makefile.am
+++ b/clients/tests/test-client.check-on-disk/Makefile.am
@@ -149,4 +149,32 @@ clients_tests_expected_files = \
clients/tests/test-client.check-on-disk/test_004-004.expected \
clients/tests/test-client.check-on-disk/test_004-005.expected \
clients/tests/test-client.check-on-disk/test_004-006.expected \
+ clients/tests/test-client.check-on-disk/test_004-007.expected \
+ clients/tests/test-client.check-on-disk/test_004-008.expected \
+ clients/tests/test-client.check-on-disk/test_004-009.expected \
+ clients/tests/test-client.check-on-disk/test_004-010.expected \
+ clients/tests/test-client.check-on-disk/test_004-011.expected \
+ clients/tests/test-client.check-on-disk/test_004-012.expected \
+ clients/tests/test-client.check-on-disk/test_004-013.expected \
+ clients/tests/test-client.check-on-disk/test_004-014.expected \
+ clients/tests/test-client.check-on-disk/test_004-015.expected \
+ clients/tests/test-client.check-on-disk/test_004-016.expected \
+ clients/tests/test-client.check-on-disk/test_004-017.expected \
+ clients/tests/test-client.check-on-disk/test_004-018.expected \
+ clients/tests/test-client.check-on-disk/test_004-019.expected \
+ clients/tests/test-client.check-on-disk/test_004-020.expected \
+ clients/tests/test-client.check-on-disk/test_004-021.expected \
+ clients/tests/test-client.check-on-disk/test_004-022.expected \
+ clients/tests/test-client.check-on-disk/test_004-023.expected \
+ clients/tests/test-client.check-on-disk/test_004-024.expected \
+ clients/tests/test-client.check-on-disk/test_004-025.expected \
+ clients/tests/test-client.check-on-disk/test_004-026.expected \
+ clients/tests/test-client.check-on-disk/test_004-027.expected \
+ clients/tests/test-client.check-on-disk/test_004-028.expected \
+ clients/tests/test-client.check-on-disk/test_004-029.expected \
+ clients/tests/test-client.check-on-disk/test_004-030.expected \
+ clients/tests/test-client.check-on-disk/test_004-031.expected \
+ clients/tests/test-client.check-on-disk/test_004-032.expected \
+ clients/tests/test-client.check-on-disk/test_004-033.expected \
+ clients/tests/test-client.check-on-disk/test_004-034.expected \
$(NULL)
diff --git a/clients/tests/test-client.check-on-disk/test_001-001.expected b/clients/tests/test-client.check-on-disk/test_001-001.expected
index 23f546bfb6..bbb7924983 100644
--- a/clients/tests/test-client.check-on-disk/test_001-001.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-001.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:651:test_001()/1
+location: clients/tests/test-client.py:656:test_001()/1
cmd: $NMCLI
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-002.expected b/clients/tests/test-client.check-on-disk/test_001-002.expected
index bcbb86ee12..e56b1bedae 100644
--- a/clients/tests/test-client.check-on-disk/test_001-002.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-002.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:651:test_001()/2
+location: clients/tests/test-client.py:656:test_001()/2
cmd: $NMCLI
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-003.expected b/clients/tests/test-client.check-on-disk/test_001-003.expected
index f08e8df7b9..97f26f0b4b 100644
--- a/clients/tests/test-client.check-on-disk/test_001-003.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-003.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:653:test_001()/3
+location: clients/tests/test-client.py:658:test_001()/3
cmd: $NMCLI -f AP -mode multiline -p d show wlan0
lang: C
returncode: 10
diff --git a/clients/tests/test-client.check-on-disk/test_001-004.expected b/clients/tests/test-client.check-on-disk/test_001-004.expected
index 1e01f6cd86..b016817806 100644
--- a/clients/tests/test-client.check-on-disk/test_001-004.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-004.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:653:test_001()/4
+location: clients/tests/test-client.py:658:test_001()/4
cmd: $NMCLI -f AP -mode multiline -p d show wlan0
lang: pl_PL.UTF-8
returncode: 10
diff --git a/clients/tests/test-client.check-on-disk/test_001-005.expected b/clients/tests/test-client.check-on-disk/test_001-005.expected
index c3ddbd52b1..92efd49fe5 100644
--- a/clients/tests/test-client.check-on-disk/test_001-005.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-005.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:655:test_001()/5
+location: clients/tests/test-client.py:660:test_001()/5
cmd: $NMCLI c s
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-006.expected b/clients/tests/test-client.check-on-disk/test_001-006.expected
index 6e1bbca1c4..1526601637 100644
--- a/clients/tests/test-client.check-on-disk/test_001-006.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-006.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:655:test_001()/6
+location: clients/tests/test-client.py:660:test_001()/6
cmd: $NMCLI c s
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-007.expected b/clients/tests/test-client.check-on-disk/test_001-007.expected
index 759cfe56cd..46d69717dc 100644
--- a/clients/tests/test-client.check-on-disk/test_001-007.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-007.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:657:test_001()/7
+location: clients/tests/test-client.py:662:test_001()/7
cmd: $NMCLI bogus s
lang: C
returncode: 2
diff --git a/clients/tests/test-client.check-on-disk/test_001-008.expected b/clients/tests/test-client.check-on-disk/test_001-008.expected
index ba4d941c73..f16ba4bcf7 100644
--- a/clients/tests/test-client.check-on-disk/test_001-008.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-008.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:657:test_001()/8
+location: clients/tests/test-client.py:662:test_001()/8
cmd: $NMCLI bogus s
lang: pl_PL.UTF-8
returncode: 2
diff --git a/clients/tests/test-client.check-on-disk/test_001-009.expected b/clients/tests/test-client.check-on-disk/test_001-009.expected
index 2614409a18..66907233e6 100644
--- a/clients/tests/test-client.check-on-disk/test_001-009.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-009.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/9
+location: clients/tests/test-client.py:670:test_001()/9
cmd: $NMCLI general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-010.expected b/clients/tests/test-client.check-on-disk/test_001-010.expected
index 0c9f540fe8..251145efd0 100644
--- a/clients/tests/test-client.check-on-disk/test_001-010.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-010.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/10
+location: clients/tests/test-client.py:670:test_001()/10
cmd: $NMCLI general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-011.expected b/clients/tests/test-client.check-on-disk/test_001-011.expected
index fc6cc6b62e..661d33aead 100644
--- a/clients/tests/test-client.check-on-disk/test_001-011.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-011.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/11
+location: clients/tests/test-client.py:670:test_001()/11
cmd: $NMCLI --pretty general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-012.expected b/clients/tests/test-client.check-on-disk/test_001-012.expected
index cb1793d2d7..e96a3b094b 100644
--- a/clients/tests/test-client.check-on-disk/test_001-012.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-012.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/12
+location: clients/tests/test-client.py:670:test_001()/12
cmd: $NMCLI --pretty general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-013.expected b/clients/tests/test-client.check-on-disk/test_001-013.expected
index 1317ee1347..7a8aa05386 100644
--- a/clients/tests/test-client.check-on-disk/test_001-013.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-013.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/13
+location: clients/tests/test-client.py:670:test_001()/13
cmd: $NMCLI --terse general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-014.expected b/clients/tests/test-client.check-on-disk/test_001-014.expected
index 73e62b7e72..add3aecf42 100644
--- a/clients/tests/test-client.check-on-disk/test_001-014.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-014.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/14
+location: clients/tests/test-client.py:670:test_001()/14
cmd: $NMCLI --terse general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-015.expected b/clients/tests/test-client.check-on-disk/test_001-015.expected
index 426d9834a1..4d85dd2761 100644
--- a/clients/tests/test-client.check-on-disk/test_001-015.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-015.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/15
+location: clients/tests/test-client.py:670:test_001()/15
cmd: $NMCLI --mode tabular general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-016.expected b/clients/tests/test-client.check-on-disk/test_001-016.expected
index e501a8d317..7ccaac3b84 100644
--- a/clients/tests/test-client.check-on-disk/test_001-016.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-016.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/16
+location: clients/tests/test-client.py:670:test_001()/16
cmd: $NMCLI --mode tabular general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-017.expected b/clients/tests/test-client.check-on-disk/test_001-017.expected
index ab38df973f..e15f6a1c29 100644
--- a/clients/tests/test-client.check-on-disk/test_001-017.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-017.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/17
+location: clients/tests/test-client.py:670:test_001()/17
cmd: $NMCLI --mode tabular --pretty general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-018.expected b/clients/tests/test-client.check-on-disk/test_001-018.expected
index 7bbf78f543..42121bb292 100644
--- a/clients/tests/test-client.check-on-disk/test_001-018.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-018.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/18
+location: clients/tests/test-client.py:670:test_001()/18
cmd: $NMCLI --mode tabular --pretty general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-019.expected b/clients/tests/test-client.check-on-disk/test_001-019.expected
index 23692b05ed..f5c4f5c6b8 100644
--- a/clients/tests/test-client.check-on-disk/test_001-019.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-019.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/19
+location: clients/tests/test-client.py:670:test_001()/19
cmd: $NMCLI --mode tabular --terse general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-020.expected b/clients/tests/test-client.check-on-disk/test_001-020.expected
index b0987d67d4..f1545fc93b 100644
--- a/clients/tests/test-client.check-on-disk/test_001-020.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-020.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/20
+location: clients/tests/test-client.py:670:test_001()/20
cmd: $NMCLI --mode tabular --terse general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-021.expected b/clients/tests/test-client.check-on-disk/test_001-021.expected
index eb082c0273..d3a39a1249 100644
--- a/clients/tests/test-client.check-on-disk/test_001-021.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-021.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/21
+location: clients/tests/test-client.py:670:test_001()/21
cmd: $NMCLI --mode multiline general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-022.expected b/clients/tests/test-client.check-on-disk/test_001-022.expected
index df0020533f..261827032f 100644
--- a/clients/tests/test-client.check-on-disk/test_001-022.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-022.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/22
+location: clients/tests/test-client.py:670:test_001()/22
cmd: $NMCLI --mode multiline general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-023.expected b/clients/tests/test-client.check-on-disk/test_001-023.expected
index 55376eb9c9..705b17a81a 100644
--- a/clients/tests/test-client.check-on-disk/test_001-023.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-023.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/23
+location: clients/tests/test-client.py:670:test_001()/23
cmd: $NMCLI --mode multiline --pretty general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-024.expected b/clients/tests/test-client.check-on-disk/test_001-024.expected
index 10b3b04c19..32d7ff553c 100644
--- a/clients/tests/test-client.check-on-disk/test_001-024.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-024.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/24
+location: clients/tests/test-client.py:670:test_001()/24
cmd: $NMCLI --mode multiline --pretty general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-025.expected b/clients/tests/test-client.check-on-disk/test_001-025.expected
index 687e62bf93..475e8f747f 100644
--- a/clients/tests/test-client.check-on-disk/test_001-025.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-025.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/25
+location: clients/tests/test-client.py:670:test_001()/25
cmd: $NMCLI --mode multiline --terse general permissions
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_001-026.expected b/clients/tests/test-client.check-on-disk/test_001-026.expected
index 1b01d876cf..f91d9cad42 100644
--- a/clients/tests/test-client.check-on-disk/test_001-026.expected
+++ b/clients/tests/test-client.check-on-disk/test_001-026.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:665:test_001()/26
+location: clients/tests/test-client.py:670:test_001()/26
cmd: $NMCLI --mode multiline --terse general permissions
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-001.expected b/clients/tests/test-client.check-on-disk/test_002-001.expected
index 5f3d7d6a0a..30109cc93b 100644
--- a/clients/tests/test-client.check-on-disk/test_002-001.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-001.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:670:test_002()/1
+location: clients/tests/test-client.py:675:test_002()/1
cmd: $NMCLI d
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-002.expected b/clients/tests/test-client.check-on-disk/test_002-002.expected
index 3bdc45e469..0f8f57f89a 100644
--- a/clients/tests/test-client.check-on-disk/test_002-002.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-002.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:670:test_002()/2
+location: clients/tests/test-client.py:675:test_002()/2
cmd: $NMCLI d
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-003.expected b/clients/tests/test-client.check-on-disk/test_002-003.expected
index e2e56101dd..b337f30d10 100644
--- a/clients/tests/test-client.check-on-disk/test_002-003.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-003.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:672:test_002()/3
+location: clients/tests/test-client.py:677:test_002()/3
cmd: $NMCLI -f all d
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-004.expected b/clients/tests/test-client.check-on-disk/test_002-004.expected
index 0e884ed081..f1dd1f2893 100644
--- a/clients/tests/test-client.check-on-disk/test_002-004.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-004.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:672:test_002()/4
+location: clients/tests/test-client.py:677:test_002()/4
cmd: $NMCLI -f all d
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-005.expected b/clients/tests/test-client.check-on-disk/test_002-005.expected
index 3d1440eae3..725b3f894e 100644
--- a/clients/tests/test-client.check-on-disk/test_002-005.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-005.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:674:test_002()/5
+location: clients/tests/test-client.py:679:test_002()/5
cmd: $NMCLI
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-006.expected b/clients/tests/test-client.check-on-disk/test_002-006.expected
index a676f62de8..54812bf262 100644
--- a/clients/tests/test-client.check-on-disk/test_002-006.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-006.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:674:test_002()/6
+location: clients/tests/test-client.py:679:test_002()/6
cmd: $NMCLI
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-007.expected b/clients/tests/test-client.check-on-disk/test_002-007.expected
index 780e7f6e79..2ec9c9ca15 100644
--- a/clients/tests/test-client.check-on-disk/test_002-007.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-007.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:676:test_002()/7
+location: clients/tests/test-client.py:681:test_002()/7
cmd: $NMCLI -f AP -mode multiline d show wlan0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-008.expected b/clients/tests/test-client.check-on-disk/test_002-008.expected
index c605e8e755..351838ea42 100644
--- a/clients/tests/test-client.check-on-disk/test_002-008.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-008.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:676:test_002()/8
+location: clients/tests/test-client.py:681:test_002()/8
cmd: $NMCLI -f AP -mode multiline d show wlan0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-009.expected b/clients/tests/test-client.check-on-disk/test_002-009.expected
index bd1bbe9056..fbe276e48f 100644
--- a/clients/tests/test-client.check-on-disk/test_002-009.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-009.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:677:test_002()/9
+location: clients/tests/test-client.py:682:test_002()/9
cmd: $NMCLI -f AP -mode multiline -p d show wlan0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-010.expected b/clients/tests/test-client.check-on-disk/test_002-010.expected
index d3c06c7b29..434dbd8119 100644
--- a/clients/tests/test-client.check-on-disk/test_002-010.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-010.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:677:test_002()/10
+location: clients/tests/test-client.py:682:test_002()/10
cmd: $NMCLI -f AP -mode multiline -p d show wlan0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-011.expected b/clients/tests/test-client.check-on-disk/test_002-011.expected
index e943c114e8..64222456ee 100644
--- a/clients/tests/test-client.check-on-disk/test_002-011.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-011.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:678:test_002()/11
+location: clients/tests/test-client.py:683:test_002()/11
cmd: $NMCLI -f AP -mode multiline -t d show wlan0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-012.expected b/clients/tests/test-client.check-on-disk/test_002-012.expected
index 6e3e5d56a7..47a45c20b1 100644
--- a/clients/tests/test-client.check-on-disk/test_002-012.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-012.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:678:test_002()/12
+location: clients/tests/test-client.py:683:test_002()/12
cmd: $NMCLI -f AP -mode multiline -t d show wlan0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-013.expected b/clients/tests/test-client.check-on-disk/test_002-013.expected
index a649addd6b..95eb53129d 100644
--- a/clients/tests/test-client.check-on-disk/test_002-013.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-013.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:679:test_002()/13
+location: clients/tests/test-client.py:684:test_002()/13
cmd: $NMCLI -f AP -mode tabular d show wlan0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-014.expected b/clients/tests/test-client.check-on-disk/test_002-014.expected
index d2a8a6677d..aa9146b935 100644
--- a/clients/tests/test-client.check-on-disk/test_002-014.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-014.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:679:test_002()/14
+location: clients/tests/test-client.py:684:test_002()/14
cmd: $NMCLI -f AP -mode tabular d show wlan0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-015.expected b/clients/tests/test-client.check-on-disk/test_002-015.expected
index 1b28741fae..417571073f 100644
--- a/clients/tests/test-client.check-on-disk/test_002-015.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-015.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:680:test_002()/15
+location: clients/tests/test-client.py:685:test_002()/15
cmd: $NMCLI -f AP -mode tabular -p d show wlan0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-016.expected b/clients/tests/test-client.check-on-disk/test_002-016.expected
index a597044783..0065d267e7 100644
--- a/clients/tests/test-client.check-on-disk/test_002-016.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-016.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:680:test_002()/16
+location: clients/tests/test-client.py:685:test_002()/16
cmd: $NMCLI -f AP -mode tabular -p d show wlan0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-017.expected b/clients/tests/test-client.check-on-disk/test_002-017.expected
index 61499b6d0e..e0b0b5108a 100644
--- a/clients/tests/test-client.check-on-disk/test_002-017.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-017.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:681:test_002()/17
+location: clients/tests/test-client.py:686:test_002()/17
cmd: $NMCLI -f AP -mode tabular -t d show wlan0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-018.expected b/clients/tests/test-client.check-on-disk/test_002-018.expected
index bbac7a72c0..e5ec8a57bd 100644
--- a/clients/tests/test-client.check-on-disk/test_002-018.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-018.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:681:test_002()/18
+location: clients/tests/test-client.py:686:test_002()/18
cmd: $NMCLI -f AP -mode tabular -t d show wlan0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-019.expected b/clients/tests/test-client.check-on-disk/test_002-019.expected
index 0bcc5e9d48..4e0e856cff 100644
--- a/clients/tests/test-client.check-on-disk/test_002-019.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-019.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:683:test_002()/19
+location: clients/tests/test-client.py:688:test_002()/19
cmd: $NMCLI -f ALL d wifi
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-020.expected b/clients/tests/test-client.check-on-disk/test_002-020.expected
index f433340e53..96e4d77a38 100644
--- a/clients/tests/test-client.check-on-disk/test_002-020.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-020.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:683:test_002()/20
+location: clients/tests/test-client.py:688:test_002()/20
cmd: $NMCLI -f ALL d wifi
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-021.expected b/clients/tests/test-client.check-on-disk/test_002-021.expected
index 8dd7f6477d..abc9a98811 100644
--- a/clients/tests/test-client.check-on-disk/test_002-021.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-021.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:685:test_002()/21
+location: clients/tests/test-client.py:690:test_002()/21
cmd: $NMCLI c
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-022.expected b/clients/tests/test-client.check-on-disk/test_002-022.expected
index 25d7bed294..e5c60ff8a8 100644
--- a/clients/tests/test-client.check-on-disk/test_002-022.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-022.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:685:test_002()/22
+location: clients/tests/test-client.py:690:test_002()/22
cmd: $NMCLI c
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-023.expected b/clients/tests/test-client.check-on-disk/test_002-023.expected
index 43ce64190d..3f450162ea 100644
--- a/clients/tests/test-client.check-on-disk/test_002-023.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-023.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:687:test_002()/23
+location: clients/tests/test-client.py:692:test_002()/23
cmd: $NMCLI c s con-1
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_002-024.expected b/clients/tests/test-client.check-on-disk/test_002-024.expected
index a5b7bc4afb..c77f504da2 100644
--- a/clients/tests/test-client.check-on-disk/test_002-024.expected
+++ b/clients/tests/test-client.check-on-disk/test_002-024.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:687:test_002()/24
+location: clients/tests/test-client.py:692:test_002()/24
cmd: $NMCLI c s con-1
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-001.expected b/clients/tests/test-client.check-on-disk/test_003-001.expected
index e131cb36b8..75037afb1a 100644
--- a/clients/tests/test-client.check-on-disk/test_003-001.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-001.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:697:test_003()/1
+location: clients/tests/test-client.py:702:test_003()/1
cmd: $NMCLI c add type ethernet ifname '*' con-name con-xx1
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-002.expected b/clients/tests/test-client.check-on-disk/test_003-002.expected
index 9c9cfb2d72..bcd9150139 100644
--- a/clients/tests/test-client.check-on-disk/test_003-002.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-002.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:700:test_003()/2
+location: clients/tests/test-client.py:705:test_003()/2
cmd: $NMCLI c s
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-003.expected b/clients/tests/test-client.check-on-disk/test_003-003.expected
index 882d1b4d1c..b4fc84b464 100644
--- a/clients/tests/test-client.check-on-disk/test_003-003.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-003.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:700:test_003()/3
+location: clients/tests/test-client.py:705:test_003()/3
cmd: $NMCLI c s
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-004.expected b/clients/tests/test-client.check-on-disk/test_003-004.expected
index 37c67f275f..671141316c 100644
--- a/clients/tests/test-client.check-on-disk/test_003-004.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-004.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:705:test_003()/4
+location: clients/tests/test-client.py:710:test_003()/4
cmd: $NMCLI c add type ethernet ifname '*'
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-005.expected b/clients/tests/test-client.check-on-disk/test_003-005.expected
index 15ef586b4e..6c2f3c27fd 100644
--- a/clients/tests/test-client.check-on-disk/test_003-005.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-005.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:708:test_003()/5
+location: clients/tests/test-client.py:713:test_003()/5
cmd: $NMCLI c s
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-006.expected b/clients/tests/test-client.check-on-disk/test_003-006.expected
index cd89b202e8..caacf3b766 100644
--- a/clients/tests/test-client.check-on-disk/test_003-006.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-006.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:708:test_003()/6
+location: clients/tests/test-client.py:713:test_003()/6
cmd: $NMCLI c s
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-007.expected b/clients/tests/test-client.check-on-disk/test_003-007.expected
index c2e5a56630..e9a0ef0ed9 100644
--- a/clients/tests/test-client.check-on-disk/test_003-007.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-007.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:711:test_003()/7
+location: clients/tests/test-client.py:716:test_003()/7
cmd: $NMCLI -f ALL c s
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-008.expected b/clients/tests/test-client.check-on-disk/test_003-008.expected
index 1100563f1e..ac32549ae0 100644
--- a/clients/tests/test-client.check-on-disk/test_003-008.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-008.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:711:test_003()/8
+location: clients/tests/test-client.py:716:test_003()/8
cmd: $NMCLI -f ALL c s
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-009.expected b/clients/tests/test-client.check-on-disk/test_003-009.expected
index f3d9d2923c..3b645a57f0 100644
--- a/clients/tests/test-client.check-on-disk/test_003-009.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-009.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:715:test_003()/9
+location: clients/tests/test-client.py:720:test_003()/9
cmd: $NMCLI --complete-args -f ALL c s ''
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-010.expected b/clients/tests/test-client.check-on-disk/test_003-010.expected
index 86c4dea0ee..e9a0236fa8 100644
--- a/clients/tests/test-client.check-on-disk/test_003-010.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-010.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:715:test_003()/10
+location: clients/tests/test-client.py:720:test_003()/10
cmd: $NMCLI --complete-args -f ALL c s ''
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-011.expected b/clients/tests/test-client.check-on-disk/test_003-011.expected
index 3da70bbf10..98a21153db 100644
--- a/clients/tests/test-client.check-on-disk/test_003-011.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-011.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:728:test_003()/11
+location: clients/tests/test-client.py:733:test_003()/11
cmd: $NMCLI con up ethernet ifname eth0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-012.expected b/clients/tests/test-client.check-on-disk/test_003-012.expected
index 810ffc8b79..2ce37e4211 100644
--- a/clients/tests/test-client.check-on-disk/test_003-012.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-012.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:731:test_003()/12
+location: clients/tests/test-client.py:736:test_003()/12
cmd: $NMCLI con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-013.expected b/clients/tests/test-client.check-on-disk/test_003-013.expected
index b17bbf2855..fda543c9aa 100644
--- a/clients/tests/test-client.check-on-disk/test_003-013.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-013.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:731:test_003()/13
+location: clients/tests/test-client.py:736:test_003()/13
cmd: $NMCLI con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-014.expected b/clients/tests/test-client.check-on-disk/test_003-014.expected
index da785a2c8b..ed171679e5 100644
--- a/clients/tests/test-client.check-on-disk/test_003-014.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-014.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:734:test_003()/14
+location: clients/tests/test-client.py:739:test_003()/14
cmd: $NMCLI -f ALL con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-015.expected b/clients/tests/test-client.check-on-disk/test_003-015.expected
index ad645f8f82..0baaa030ba 100644
--- a/clients/tests/test-client.check-on-disk/test_003-015.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-015.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:734:test_003()/15
+location: clients/tests/test-client.py:739:test_003()/15
cmd: $NMCLI -f ALL con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-016.expected b/clients/tests/test-client.check-on-disk/test_003-016.expected
index c5a717b0f8..373b0ddbc4 100644
--- a/clients/tests/test-client.check-on-disk/test_003-016.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-016.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:737:test_003()/16
+location: clients/tests/test-client.py:742:test_003()/16
cmd: $NMCLI -f ALL con s -a
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-017.expected b/clients/tests/test-client.check-on-disk/test_003-017.expected
index 760b8f299b..d16ce44e7b 100644
--- a/clients/tests/test-client.check-on-disk/test_003-017.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-017.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:737:test_003()/17
+location: clients/tests/test-client.py:742:test_003()/17
cmd: $NMCLI -f ALL con s -a
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-018.expected b/clients/tests/test-client.check-on-disk/test_003-018.expected
index 83a19b3c14..6168ba8df6 100644
--- a/clients/tests/test-client.check-on-disk/test_003-018.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-018.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:740:test_003()/18
+location: clients/tests/test-client.py:745:test_003()/18
cmd: $NMCLI -f ACTIVE-PATH,DEVICE,UUID con s -act
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-019.expected b/clients/tests/test-client.check-on-disk/test_003-019.expected
index 9e2db6462f..d2c2e114fc 100644
--- a/clients/tests/test-client.check-on-disk/test_003-019.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-019.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:740:test_003()/19
+location: clients/tests/test-client.py:745:test_003()/19
cmd: $NMCLI -f ACTIVE-PATH,DEVICE,UUID con s -act
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-020.expected b/clients/tests/test-client.check-on-disk/test_003-020.expected
index 2c226cbccf..7f20af9e2e 100644
--- a/clients/tests/test-client.check-on-disk/test_003-020.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-020.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:743:test_003()/20
+location: clients/tests/test-client.py:748:test_003()/20
cmd: $NMCLI -f UUID,NAME con s --active
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-021.expected b/clients/tests/test-client.check-on-disk/test_003-021.expected
index 77bd6f6a6e..c312142450 100644
--- a/clients/tests/test-client.check-on-disk/test_003-021.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-021.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:743:test_003()/21
+location: clients/tests/test-client.py:748:test_003()/21
cmd: $NMCLI -f UUID,NAME con s --active
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-022.expected b/clients/tests/test-client.check-on-disk/test_003-022.expected
index fd249bf47f..fb27dfc02a 100644
--- a/clients/tests/test-client.check-on-disk/test_003-022.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-022.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:746:test_003()/22
+location: clients/tests/test-client.py:751:test_003()/22
cmd: $NMCLI -f ALL con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-023.expected b/clients/tests/test-client.check-on-disk/test_003-023.expected
index fe7721ee2a..577bd49818 100644
--- a/clients/tests/test-client.check-on-disk/test_003-023.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-023.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:746:test_003()/23
+location: clients/tests/test-client.py:751:test_003()/23
cmd: $NMCLI -f ALL con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-024.expected b/clients/tests/test-client.check-on-disk/test_003-024.expected
index 33f63fe197..dc9d9ce4be 100644
--- a/clients/tests/test-client.check-on-disk/test_003-024.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-024.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:749:test_003()/24
+location: clients/tests/test-client.py:754:test_003()/24
cmd: $NMCLI -f GENERAL.STATE con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-025.expected b/clients/tests/test-client.check-on-disk/test_003-025.expected
index e5df81577b..3522769124 100644
--- a/clients/tests/test-client.check-on-disk/test_003-025.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-025.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:749:test_003()/25
+location: clients/tests/test-client.py:754:test_003()/25
cmd: $NMCLI -f GENERAL.STATE con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-026.expected b/clients/tests/test-client.check-on-disk/test_003-026.expected
index a04254e041..836780edd9 100644
--- a/clients/tests/test-client.check-on-disk/test_003-026.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-026.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:752:test_003()/26
+location: clients/tests/test-client.py:757:test_003()/26
cmd: $NMCLI con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-027.expected b/clients/tests/test-client.check-on-disk/test_003-027.expected
index bea7200447..d7122ebfb2 100644
--- a/clients/tests/test-client.check-on-disk/test_003-027.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-027.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:752:test_003()/27
+location: clients/tests/test-client.py:757:test_003()/27
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-028.expected b/clients/tests/test-client.check-on-disk/test_003-028.expected
index 28e99ac0cc..05e9ae0645 100644
--- a/clients/tests/test-client.check-on-disk/test_003-028.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-028.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:755:test_003()/28
+location: clients/tests/test-client.py:760:test_003()/28
cmd: $NMCLI -f ALL dev s eth0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-029.expected b/clients/tests/test-client.check-on-disk/test_003-029.expected
index 43888f024a..03f4c6ecca 100644
--- a/clients/tests/test-client.check-on-disk/test_003-029.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-029.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:755:test_003()/29
+location: clients/tests/test-client.py:760:test_003()/29
cmd: $NMCLI -f ALL dev s eth0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-030.expected b/clients/tests/test-client.check-on-disk/test_003-030.expected
index 209210add1..e1148ab714 100644
--- a/clients/tests/test-client.check-on-disk/test_003-030.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-030.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:758:test_003()/30
+location: clients/tests/test-client.py:763:test_003()/30
cmd: $NMCLI -f ALL dev show eth0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-031.expected b/clients/tests/test-client.check-on-disk/test_003-031.expected
index 5fba5cf9d8..8cd81f00a3 100644
--- a/clients/tests/test-client.check-on-disk/test_003-031.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-031.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:758:test_003()/31
+location: clients/tests/test-client.py:763:test_003()/31
cmd: $NMCLI -f ALL dev show eth0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-032.expected b/clients/tests/test-client.check-on-disk/test_003-032.expected
index 4d39c1e2ad..b4800800fd 100644
--- a/clients/tests/test-client.check-on-disk/test_003-032.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-032.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:728:test_003()/32
+location: clients/tests/test-client.py:733:test_003()/32
cmd: $NMCLI con up ethernet ifname eth1
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-033.expected b/clients/tests/test-client.check-on-disk/test_003-033.expected
index 9e7764f2e6..01537c86a1 100644
--- a/clients/tests/test-client.check-on-disk/test_003-033.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-033.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:731:test_003()/33
+location: clients/tests/test-client.py:736:test_003()/33
cmd: $NMCLI con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-034.expected b/clients/tests/test-client.check-on-disk/test_003-034.expected
index 8bea22d71b..67dcac74fa 100644
--- a/clients/tests/test-client.check-on-disk/test_003-034.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-034.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:731:test_003()/34
+location: clients/tests/test-client.py:736:test_003()/34
cmd: $NMCLI con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-035.expected b/clients/tests/test-client.check-on-disk/test_003-035.expected
index 15e4067587..562895a71d 100644
--- a/clients/tests/test-client.check-on-disk/test_003-035.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-035.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:734:test_003()/35
+location: clients/tests/test-client.py:739:test_003()/35
cmd: $NMCLI -f ALL con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-036.expected b/clients/tests/test-client.check-on-disk/test_003-036.expected
index 9d7774d4f2..ef3b63b5d2 100644
--- a/clients/tests/test-client.check-on-disk/test_003-036.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-036.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:734:test_003()/36
+location: clients/tests/test-client.py:739:test_003()/36
cmd: $NMCLI -f ALL con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-037.expected b/clients/tests/test-client.check-on-disk/test_003-037.expected
index 8529e4906b..be97595609 100644
--- a/clients/tests/test-client.check-on-disk/test_003-037.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-037.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:737:test_003()/37
+location: clients/tests/test-client.py:742:test_003()/37
cmd: $NMCLI -f ALL con s -a
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-038.expected b/clients/tests/test-client.check-on-disk/test_003-038.expected
index 75005325ef..d38db63ff1 100644
--- a/clients/tests/test-client.check-on-disk/test_003-038.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-038.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:737:test_003()/38
+location: clients/tests/test-client.py:742:test_003()/38
cmd: $NMCLI -f ALL con s -a
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-039.expected b/clients/tests/test-client.check-on-disk/test_003-039.expected
index 99fdc38237..1b7022805c 100644
--- a/clients/tests/test-client.check-on-disk/test_003-039.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-039.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:740:test_003()/39
+location: clients/tests/test-client.py:745:test_003()/39
cmd: $NMCLI -f ACTIVE-PATH,DEVICE,UUID con s -act
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-040.expected b/clients/tests/test-client.check-on-disk/test_003-040.expected
index c037512318..9d0d4cfb57 100644
--- a/clients/tests/test-client.check-on-disk/test_003-040.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-040.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:740:test_003()/40
+location: clients/tests/test-client.py:745:test_003()/40
cmd: $NMCLI -f ACTIVE-PATH,DEVICE,UUID con s -act
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-041.expected b/clients/tests/test-client.check-on-disk/test_003-041.expected
index 6d1a8afaf6..b243ed266e 100644
--- a/clients/tests/test-client.check-on-disk/test_003-041.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-041.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:743:test_003()/41
+location: clients/tests/test-client.py:748:test_003()/41
cmd: $NMCLI -f UUID,NAME con s --active
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-042.expected b/clients/tests/test-client.check-on-disk/test_003-042.expected
index 056be14c52..2c5b556d28 100644
--- a/clients/tests/test-client.check-on-disk/test_003-042.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-042.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:743:test_003()/42
+location: clients/tests/test-client.py:748:test_003()/42
cmd: $NMCLI -f UUID,NAME con s --active
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-043.expected b/clients/tests/test-client.check-on-disk/test_003-043.expected
index 49c5aca7ce..ee879f85a6 100644
--- a/clients/tests/test-client.check-on-disk/test_003-043.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-043.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:746:test_003()/43
+location: clients/tests/test-client.py:751:test_003()/43
cmd: $NMCLI -f ALL con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-044.expected b/clients/tests/test-client.check-on-disk/test_003-044.expected
index 52e78f3ec7..b891b3d940 100644
--- a/clients/tests/test-client.check-on-disk/test_003-044.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-044.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:746:test_003()/44
+location: clients/tests/test-client.py:751:test_003()/44
cmd: $NMCLI -f ALL con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-045.expected b/clients/tests/test-client.check-on-disk/test_003-045.expected
index 1eaa5689e5..0214c70f9d 100644
--- a/clients/tests/test-client.check-on-disk/test_003-045.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-045.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:749:test_003()/45
+location: clients/tests/test-client.py:754:test_003()/45
cmd: $NMCLI -f GENERAL.STATE con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-046.expected b/clients/tests/test-client.check-on-disk/test_003-046.expected
index 35ab57fba4..3657a8c13a 100644
--- a/clients/tests/test-client.check-on-disk/test_003-046.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-046.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:749:test_003()/46
+location: clients/tests/test-client.py:754:test_003()/46
cmd: $NMCLI -f GENERAL.STATE con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-047.expected b/clients/tests/test-client.check-on-disk/test_003-047.expected
index a825e5622b..9ab2a4ca49 100644
--- a/clients/tests/test-client.check-on-disk/test_003-047.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-047.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:752:test_003()/47
+location: clients/tests/test-client.py:757:test_003()/47
cmd: $NMCLI con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-048.expected b/clients/tests/test-client.check-on-disk/test_003-048.expected
index ce7410450b..a6171ff9c2 100644
--- a/clients/tests/test-client.check-on-disk/test_003-048.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-048.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:752:test_003()/48
+location: clients/tests/test-client.py:757:test_003()/48
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-049.expected b/clients/tests/test-client.check-on-disk/test_003-049.expected
index 3e0514c0c9..4b058efef5 100644
--- a/clients/tests/test-client.check-on-disk/test_003-049.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-049.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:755:test_003()/49
+location: clients/tests/test-client.py:760:test_003()/49
cmd: $NMCLI -f ALL dev s eth0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-050.expected b/clients/tests/test-client.check-on-disk/test_003-050.expected
index e89fdb8852..0a09f1acdf 100644
--- a/clients/tests/test-client.check-on-disk/test_003-050.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-050.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:755:test_003()/50
+location: clients/tests/test-client.py:760:test_003()/50
cmd: $NMCLI -f ALL dev s eth0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-051.expected b/clients/tests/test-client.check-on-disk/test_003-051.expected
index 27ceabf0ff..c5a4261cdb 100644
--- a/clients/tests/test-client.check-on-disk/test_003-051.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-051.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:758:test_003()/51
+location: clients/tests/test-client.py:763:test_003()/51
cmd: $NMCLI -f ALL dev show eth0
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-052.expected b/clients/tests/test-client.check-on-disk/test_003-052.expected
index 74338bcd69..d64e3549fb 100644
--- a/clients/tests/test-client.check-on-disk/test_003-052.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-052.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:758:test_003()/52
+location: clients/tests/test-client.py:763:test_003()/52
cmd: $NMCLI -f ALL dev show eth0
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-053.expected b/clients/tests/test-client.check-on-disk/test_003-053.expected
index aae57fbb53..7f969268cb 100644
--- a/clients/tests/test-client.check-on-disk/test_003-053.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-053.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:772:test_003()/53
+location: clients/tests/test-client.py:777:test_003()/53
cmd: $NMCLI -f ALL con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-054.expected b/clients/tests/test-client.check-on-disk/test_003-054.expected
index b9bdb4a7e3..a48840e0d0 100644
--- a/clients/tests/test-client.check-on-disk/test_003-054.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-054.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:772:test_003()/54
+location: clients/tests/test-client.py:777:test_003()/54
cmd: $NMCLI -f ALL con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-055.expected b/clients/tests/test-client.check-on-disk/test_003-055.expected
index ced8608586..f89b31ef39 100644
--- a/clients/tests/test-client.check-on-disk/test_003-055.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-055.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:775:test_003()/55
+location: clients/tests/test-client.py:780:test_003()/55
cmd: $NMCLI -f UUID,TYPE con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-056.expected b/clients/tests/test-client.check-on-disk/test_003-056.expected
index fc67a94dda..b69e2866be 100644
--- a/clients/tests/test-client.check-on-disk/test_003-056.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-056.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:775:test_003()/56
+location: clients/tests/test-client.py:780:test_003()/56
cmd: $NMCLI -f UUID,TYPE con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-057.expected b/clients/tests/test-client.check-on-disk/test_003-057.expected
index aa62abbea4..f33d89fd8a 100644
--- a/clients/tests/test-client.check-on-disk/test_003-057.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-057.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:778:test_003()/57
+location: clients/tests/test-client.py:783:test_003()/57
cmd: $NMCLI -f UUID,TYPE --mode multiline con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-058.expected b/clients/tests/test-client.check-on-disk/test_003-058.expected
index d13a7c03ca..0503fbecc0 100644
--- a/clients/tests/test-client.check-on-disk/test_003-058.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-058.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:778:test_003()/58
+location: clients/tests/test-client.py:783:test_003()/58
cmd: $NMCLI -f UUID,TYPE --mode multiline con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-059.expected b/clients/tests/test-client.check-on-disk/test_003-059.expected
index f40fe7b6b4..b34c674a1c 100644
--- a/clients/tests/test-client.check-on-disk/test_003-059.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-059.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:781:test_003()/59
+location: clients/tests/test-client.py:786:test_003()/59
cmd: $NMCLI -f UUID,TYPE --mode multiline --terse con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-060.expected b/clients/tests/test-client.check-on-disk/test_003-060.expected
index c43731fca9..f0b964c2f1 100644
--- a/clients/tests/test-client.check-on-disk/test_003-060.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-060.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:781:test_003()/60
+location: clients/tests/test-client.py:786:test_003()/60
cmd: $NMCLI -f UUID,TYPE --mode multiline --terse con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-061.expected b/clients/tests/test-client.check-on-disk/test_003-061.expected
index 83c6949aef..78bfe96984 100644
--- a/clients/tests/test-client.check-on-disk/test_003-061.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-061.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:784:test_003()/61
+location: clients/tests/test-client.py:789:test_003()/61
cmd: $NMCLI -f UUID,TYPE --mode multiline --pretty con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-062.expected b/clients/tests/test-client.check-on-disk/test_003-062.expected
index 29c93d37c2..b5effe1ffa 100644
--- a/clients/tests/test-client.check-on-disk/test_003-062.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-062.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:784:test_003()/62
+location: clients/tests/test-client.py:789:test_003()/62
cmd: $NMCLI -f UUID,TYPE --mode multiline --pretty con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-063.expected b/clients/tests/test-client.check-on-disk/test_003-063.expected
index 6850dbccb9..c57defb03c 100644
--- a/clients/tests/test-client.check-on-disk/test_003-063.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-063.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:787:test_003()/63
+location: clients/tests/test-client.py:792:test_003()/63
cmd: $NMCLI -f UUID,TYPE --mode tabular con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-064.expected b/clients/tests/test-client.check-on-disk/test_003-064.expected
index d6466e4a95..3df0263fad 100644
--- a/clients/tests/test-client.check-on-disk/test_003-064.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-064.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:787:test_003()/64
+location: clients/tests/test-client.py:792:test_003()/64
cmd: $NMCLI -f UUID,TYPE --mode tabular con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-065.expected b/clients/tests/test-client.check-on-disk/test_003-065.expected
index 40d64e0afd..d0a930703a 100644
--- a/clients/tests/test-client.check-on-disk/test_003-065.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-065.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:790:test_003()/65
+location: clients/tests/test-client.py:795:test_003()/65
cmd: $NMCLI -f UUID,TYPE --mode tabular --terse con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-066.expected b/clients/tests/test-client.check-on-disk/test_003-066.expected
index e5af348b18..61d49b5fff 100644
--- a/clients/tests/test-client.check-on-disk/test_003-066.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-066.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:790:test_003()/66
+location: clients/tests/test-client.py:795:test_003()/66
cmd: $NMCLI -f UUID,TYPE --mode tabular --terse con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-067.expected b/clients/tests/test-client.check-on-disk/test_003-067.expected
index 99d788f7c0..50348a2f29 100644
--- a/clients/tests/test-client.check-on-disk/test_003-067.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-067.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:793:test_003()/67
+location: clients/tests/test-client.py:798:test_003()/67
cmd: $NMCLI -f UUID,TYPE --mode tabular --pretty con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-068.expected b/clients/tests/test-client.check-on-disk/test_003-068.expected
index 6d8a57f13d..7d6e57846d 100644
--- a/clients/tests/test-client.check-on-disk/test_003-068.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-068.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:793:test_003()/68
+location: clients/tests/test-client.py:798:test_003()/68
cmd: $NMCLI -f UUID,TYPE --mode tabular --pretty con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-069.expected b/clients/tests/test-client.check-on-disk/test_003-069.expected
index a966f20fd8..92f207a075 100644
--- a/clients/tests/test-client.check-on-disk/test_003-069.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-069.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:796:test_003()/69
+location: clients/tests/test-client.py:801:test_003()/69
cmd: $NMCLI con s ethernet
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-070.expected b/clients/tests/test-client.check-on-disk/test_003-070.expected
index 7ad9541102..454f96d7d1 100644
--- a/clients/tests/test-client.check-on-disk/test_003-070.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-070.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:796:test_003()/70
+location: clients/tests/test-client.py:801:test_003()/70
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-071.expected b/clients/tests/test-client.check-on-disk/test_003-071.expected
index 9e92fd03ec..6ce3b3a698 100644
--- a/clients/tests/test-client.check-on-disk/test_003-071.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-071.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:799:test_003()/71
+location: clients/tests/test-client.py:804:test_003()/71
cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-072.expected b/clients/tests/test-client.check-on-disk/test_003-072.expected
index 11d084d412..52d30d16b2 100644
--- a/clients/tests/test-client.check-on-disk/test_003-072.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-072.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:799:test_003()/72
+location: clients/tests/test-client.py:804:test_003()/72
cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-073.expected b/clients/tests/test-client.check-on-disk/test_003-073.expected
index 16fa6521b2..382f7a8a92 100644
--- a/clients/tests/test-client.check-on-disk/test_003-073.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-073.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:772:test_003()/73
+location: clients/tests/test-client.py:777:test_003()/73
cmd: $NMCLI -f ALL con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-074.expected b/clients/tests/test-client.check-on-disk/test_003-074.expected
index b73c604dfb..45a68481ae 100644
--- a/clients/tests/test-client.check-on-disk/test_003-074.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-074.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:772:test_003()/74
+location: clients/tests/test-client.py:777:test_003()/74
cmd: $NMCLI -f ALL con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-075.expected b/clients/tests/test-client.check-on-disk/test_003-075.expected
index 4a26382a4a..6a2954e699 100644
--- a/clients/tests/test-client.check-on-disk/test_003-075.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-075.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:775:test_003()/75
+location: clients/tests/test-client.py:780:test_003()/75
cmd: $NMCLI -f UUID,TYPE con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-076.expected b/clients/tests/test-client.check-on-disk/test_003-076.expected
index 1f8446c5c1..5c815eb23f 100644
--- a/clients/tests/test-client.check-on-disk/test_003-076.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-076.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:775:test_003()/76
+location: clients/tests/test-client.py:780:test_003()/76
cmd: $NMCLI -f UUID,TYPE con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-077.expected b/clients/tests/test-client.check-on-disk/test_003-077.expected
index 314a6452fb..1b9754e20d 100644
--- a/clients/tests/test-client.check-on-disk/test_003-077.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-077.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:778:test_003()/77
+location: clients/tests/test-client.py:783:test_003()/77
cmd: $NMCLI -f UUID,TYPE --mode multiline con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-078.expected b/clients/tests/test-client.check-on-disk/test_003-078.expected
index 00354b314c..ce69e4957d 100644
--- a/clients/tests/test-client.check-on-disk/test_003-078.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-078.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:778:test_003()/78
+location: clients/tests/test-client.py:783:test_003()/78
cmd: $NMCLI -f UUID,TYPE --mode multiline con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-079.expected b/clients/tests/test-client.check-on-disk/test_003-079.expected
index 3e2f2d7e72..8846f66365 100644
--- a/clients/tests/test-client.check-on-disk/test_003-079.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-079.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:781:test_003()/79
+location: clients/tests/test-client.py:786:test_003()/79
cmd: $NMCLI -f UUID,TYPE --mode multiline --terse con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-080.expected b/clients/tests/test-client.check-on-disk/test_003-080.expected
index 7b8fb5c078..9da0e80a8c 100644
--- a/clients/tests/test-client.check-on-disk/test_003-080.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-080.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:781:test_003()/80
+location: clients/tests/test-client.py:786:test_003()/80
cmd: $NMCLI -f UUID,TYPE --mode multiline --terse con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-081.expected b/clients/tests/test-client.check-on-disk/test_003-081.expected
index 26f2f94824..30c29bc615 100644
--- a/clients/tests/test-client.check-on-disk/test_003-081.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-081.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:784:test_003()/81
+location: clients/tests/test-client.py:789:test_003()/81
cmd: $NMCLI -f UUID,TYPE --mode multiline --pretty con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-082.expected b/clients/tests/test-client.check-on-disk/test_003-082.expected
index 249a876215..0eceb77657 100644
--- a/clients/tests/test-client.check-on-disk/test_003-082.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-082.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:784:test_003()/82
+location: clients/tests/test-client.py:789:test_003()/82
cmd: $NMCLI -f UUID,TYPE --mode multiline --pretty con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-083.expected b/clients/tests/test-client.check-on-disk/test_003-083.expected
index e8e0710c87..d7b866182c 100644
--- a/clients/tests/test-client.check-on-disk/test_003-083.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-083.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:787:test_003()/83
+location: clients/tests/test-client.py:792:test_003()/83
cmd: $NMCLI -f UUID,TYPE --mode tabular con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-084.expected b/clients/tests/test-client.check-on-disk/test_003-084.expected
index cfc62ee2bb..3d8c9c2aad 100644
--- a/clients/tests/test-client.check-on-disk/test_003-084.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-084.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:787:test_003()/84
+location: clients/tests/test-client.py:792:test_003()/84
cmd: $NMCLI -f UUID,TYPE --mode tabular con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-085.expected b/clients/tests/test-client.check-on-disk/test_003-085.expected
index 8894c409aa..9b682124fd 100644
--- a/clients/tests/test-client.check-on-disk/test_003-085.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-085.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:790:test_003()/85
+location: clients/tests/test-client.py:795:test_003()/85
cmd: $NMCLI -f UUID,TYPE --mode tabular --terse con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-086.expected b/clients/tests/test-client.check-on-disk/test_003-086.expected
index 2038aa2d87..183bdde823 100644
--- a/clients/tests/test-client.check-on-disk/test_003-086.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-086.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:790:test_003()/86
+location: clients/tests/test-client.py:795:test_003()/86
cmd: $NMCLI -f UUID,TYPE --mode tabular --terse con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-087.expected b/clients/tests/test-client.check-on-disk/test_003-087.expected
index d2d74c3400..f9b1a65962 100644
--- a/clients/tests/test-client.check-on-disk/test_003-087.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-087.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:793:test_003()/87
+location: clients/tests/test-client.py:798:test_003()/87
cmd: $NMCLI -f UUID,TYPE --mode tabular --pretty con
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-088.expected b/clients/tests/test-client.check-on-disk/test_003-088.expected
index 4b11b81dfd..01675fd1f6 100644
--- a/clients/tests/test-client.check-on-disk/test_003-088.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-088.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:793:test_003()/88
+location: clients/tests/test-client.py:798:test_003()/88
cmd: $NMCLI -f UUID,TYPE --mode tabular --pretty con
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-089.expected b/clients/tests/test-client.check-on-disk/test_003-089.expected
index 6df0658b35..31b3ddda05 100644
--- a/clients/tests/test-client.check-on-disk/test_003-089.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-089.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:796:test_003()/89
+location: clients/tests/test-client.py:801:test_003()/89
cmd: $NMCLI con s ethernet
lang: C
returncode: 10
diff --git a/clients/tests/test-client.check-on-disk/test_003-090.expected b/clients/tests/test-client.check-on-disk/test_003-090.expected
index ce8783334c..2a830f4fee 100644
--- a/clients/tests/test-client.check-on-disk/test_003-090.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-090.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:796:test_003()/90
+location: clients/tests/test-client.py:801:test_003()/90
cmd: $NMCLI con s ethernet
lang: pl_PL.UTF-8
returncode: 10
diff --git a/clients/tests/test-client.check-on-disk/test_003-091.expected b/clients/tests/test-client.check-on-disk/test_003-091.expected
index b5d36c6983..8ab9564016 100644
--- a/clients/tests/test-client.check-on-disk/test_003-091.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-091.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:799:test_003()/91
+location: clients/tests/test-client.py:804:test_003()/91
cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_003-092.expected b/clients/tests/test-client.check-on-disk/test_003-092.expected
index d7d4a4cf8a..8d5c1a62d4 100644
--- a/clients/tests/test-client.check-on-disk/test_003-092.expected
+++ b/clients/tests/test-client.check-on-disk/test_003-092.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:799:test_003()/92
+location: clients/tests/test-client.py:804:test_003()/92
cmd: $NMCLI c s /org/freedesktop/NetworkManager/ActiveConnection/1
lang: pl_PL.UTF-8
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_004-001.expected b/clients/tests/test-client.check-on-disk/test_004-001.expected
index 52c5591cb4..73a81206b4 100644
--- a/clients/tests/test-client.check-on-disk/test_004-001.expected
+++ b/clients/tests/test-client.check-on-disk/test_004-001.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:809:test_004()/1
+location: clients/tests/test-client.py:814:test_004()/1
cmd: $NMCLI c add type wifi ifname '*' ssid foobar con-name con-xx1
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_004-002.expected b/clients/tests/test-client.check-on-disk/test_004-002.expected
index b4177ed3ba..77c0908c85 100644
--- a/clients/tests/test-client.check-on-disk/test_004-002.expected
+++ b/clients/tests/test-client.check-on-disk/test_004-002.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:811:test_004()/2
+location: clients/tests/test-client.py:816:test_004()/2
cmd: $NMCLI connection mod con-xx1 ip.gateway ''
lang: C
returncode: 2
diff --git a/clients/tests/test-client.check-on-disk/test_004-003.expected b/clients/tests/test-client.check-on-disk/test_004-003.expected
index 464ec6a4ed..c286684f55 100644
--- a/clients/tests/test-client.check-on-disk/test_004-003.expected
+++ b/clients/tests/test-client.check-on-disk/test_004-003.expected
@@ -1,12 +1,13 @@
-location: clients/tests/test-client.py:812:test_004()/3
+location: clients/tests/test-client.py:817:test_004()/3
cmd: $NMCLI connection mod con-xx1 ipv4.gateway 172.16.0.1
-lang: C
-returncode: 0
+lang: pl_PL.UTF-8
+returncode: 1
stdout: 0 bytes
>>>
<<<
-stderr: 0 bytes
+stderr: 143 bytes
>>>
+Błąd: zmodyfikowanie połączenia „con-xx1” się nie powiodło: ipv4.gateway: gateway cannot be set if there are no addresses configured
<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-004.expected b/clients/tests/test-client.check-on-disk/test_004-004.expected
index bbddaee993..e1df70c378 100644
--- a/clients/tests/test-client.check-on-disk/test_004-004.expected
+++ b/clients/tests/test-client.check-on-disk/test_004-004.expected
@@ -1,12 +1,13 @@
-location: clients/tests/test-client.py:813:test_004()/4
+location: clients/tests/test-client.py:818:test_004()/4
cmd: $NMCLI connection mod con-xx1 ipv6.gateway ::99
lang: C
-returncode: 0
+returncode: 1
stdout: 0 bytes
>>>
<<<
-stderr: 0 bytes
+stderr: 119 bytes
>>>
+Error: Failed to modify connection 'con-xx1': ipv6.gateway: gateway cannot be set if there are no addresses configured
<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-005.expected b/clients/tests/test-client.check-on-disk/test_004-005.expected
index 9e7f329101..3c1c2a5d04 100644
--- a/clients/tests/test-client.check-on-disk/test_004-005.expected
+++ b/clients/tests/test-client.check-on-disk/test_004-005.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:814:test_004()/5
+location: clients/tests/test-client.py:819:test_004()/5
cmd: $NMCLI connection mod con-xx1 802.abc ''
lang: C
returncode: 2
diff --git a/clients/tests/test-client.check-on-disk/test_004-006.expected b/clients/tests/test-client.check-on-disk/test_004-006.expected
index c67f9a2760..0fcd984612 100644
--- a/clients/tests/test-client.check-on-disk/test_004-006.expected
+++ b/clients/tests/test-client.check-on-disk/test_004-006.expected
@@ -1,4 +1,4 @@
-location: clients/tests/test-client.py:815:test_004()/6
+location: clients/tests/test-client.py:820:test_004()/6
cmd: $NMCLI connection mod con-xx1 802-11-wireless.band a
lang: C
returncode: 0
diff --git a/clients/tests/test-client.check-on-disk/test_004-007.expected b/clients/tests/test-client.check-on-disk/test_004-007.expected
new file mode 100644
index 0000000000..8f628cde4d
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-007.expected
@@ -0,0 +1,12 @@
+location: clients/tests/test-client.py:821:test_004()/7
+cmd: $NMCLI connection mod con-xx1 ipv4.addresses 192.168.77.5/24 ipv4.routes '2.3.4.5/32 192.168.77.1' ipv6.addresses 1:2:3:4::6/64 ipv6.routes 1:2:3:4:5:6::5/128
+lang: C
+returncode: 0
+stdout: 0 bytes
+>>>
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-008.expected b/clients/tests/test-client.check-on-disk/test_004-008.expected
new file mode 100644
index 0000000000..eb0d66afdf
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-008.expected
@@ -0,0 +1,92 @@
+location: clients/tests/test-client.py:823:test_004()/8
+cmd: $NMCLI con s con-xx1
+lang: C
+returncode: 0
+stdout: 3713 bytes
+>>>
+connection.id: con-xx1
+connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA
+connection.stable-id: --
+connection.type: 802-11-wireless
+connection.interface-name: --
+connection.autoconnect: yes
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: no
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: unknown
+connection.lldp: default
+connection.mdns: -1 (default)
+802-11-wireless.ssid: foobar
+802-11-wireless.mode: infrastructure
+802-11-wireless.band: a
+802-11-wireless.channel: 0
+802-11-wireless.bssid: --
+802-11-wireless.rate: 0
+802-11-wireless.tx-power: 0
+802-11-wireless.mac-address: --
+802-11-wireless.cloned-mac-address: --
+802-11-wireless.generate-mac-address-mask:--
+802-11-wireless.mac-address-blacklist: --
+802-11-wireless.mac-address-randomization:default
+802-11-wireless.mtu: auto
+802-11-wireless.seen-bssids: --
+802-11-wireless.hidden: no
+802-11-wireless.powersave: 0 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: 192.168.77.5/24
+ipv4.gateway: --
+ipv4.routes: { ip = 2.3.4.5/32, nh = 192.168.77.1 }
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: no
+ipv4.ignore-auto-dns: no
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: yes
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: no
+ipv4.may-fail: yes
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: 1:2:3:4::6/64
+ipv6.gateway: --
+ipv6.routes: { ip = 1:2:3:4:5:6:0:5/128 }
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: no
+ipv6.ignore-auto-dns: no
+ipv6.never-default: no
+ipv6.may-fail: yes
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: yes
+ipv6.dhcp-hostname: --
+ipv6.token: --
+proxy.method: none
+proxy.browser-only: no
+proxy.pac-url: --
+proxy.pac-script: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-009.expected b/clients/tests/test-client.check-on-disk/test_004-009.expected
new file mode 100644
index 0000000000..3248f83504
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-009.expected
@@ -0,0 +1,92 @@
+location: clients/tests/test-client.py:823:test_004()/9
+cmd: $NMCLI con s con-xx1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 3731 bytes
+>>>
+connection.id: con-xx1
+connection.uuid: UUID-con-xx1-REPLACED-REPLACED-REPLA
+connection.stable-id: --
+connection.type: 802-11-wireless
+connection.interface-name: --
+connection.autoconnect: tak
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: nie
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: nieznane
+connection.lldp: default
+connection.mdns: -1 (default)
+802-11-wireless.ssid: foobar
+802-11-wireless.mode: infrastructure
+802-11-wireless.band: a
+802-11-wireless.channel: 0
+802-11-wireless.bssid: --
+802-11-wireless.rate: 0
+802-11-wireless.tx-power: 0
+802-11-wireless.mac-address: --
+802-11-wireless.cloned-mac-address: --
+802-11-wireless.generate-mac-address-mask:--
+802-11-wireless.mac-address-blacklist: --
+802-11-wireless.mac-address-randomization:default
+802-11-wireless.mtu: automatyczne
+802-11-wireless.seen-bssids: --
+802-11-wireless.hidden: nie
+802-11-wireless.powersave: 0 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: 192.168.77.5/24
+ipv4.gateway: --
+ipv4.routes: { ip = 2.3.4.5/32, nh = 192.168.77.1 }
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: nie
+ipv4.ignore-auto-dns: nie
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: tak
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: nie
+ipv4.may-fail: tak
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: 1:2:3:4::6/64
+ipv6.gateway: --
+ipv6.routes: { ip = 1:2:3:4:5:6:0:5/128 }
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: nie
+ipv6.ignore-auto-dns: nie
+ipv6.never-default: nie
+ipv6.may-fail: tak
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: tak
+ipv6.dhcp-hostname: --
+ipv6.token: --
+proxy.method: none
+proxy.browser-only: nie
+proxy.pac-url: --
+proxy.pac-script: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-010.expected b/clients/tests/test-client.check-on-disk/test_004-010.expected
new file mode 100644
index 0000000000..9d5f359b28
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-010.expected
@@ -0,0 +1,13 @@
+location: clients/tests/test-client.py:830:test_004()/10
+cmd: $NMCLI connection add type vpn con-name con-vpn-1 ifname '*' vpn-type openvpn vpn.data 'key1 = val1, key2 = val2, key3=val3'
+lang: C
+returncode: 0
+stdout: 82 bytes
+>>>
+Connection 'con-vpn-1' (UUID-con-vpn-1-REPLACED-REPLACED-REP) successfully added.
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-011.expected b/clients/tests/test-client.check-on-disk/test_004-011.expected
new file mode 100644
index 0000000000..1171481561
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-011.expected
@@ -0,0 +1,16 @@
+location: clients/tests/test-client.py:833:test_004()/11
+cmd: $NMCLI con s
+lang: C
+returncode: 0
+stdout: 268 bytes
+>>>
+NAME UUID TYPE DEVICE
+con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
+con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn --
+con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-012.expected b/clients/tests/test-client.check-on-disk/test_004-012.expected
new file mode 100644
index 0000000000..260a6b1a89
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-012.expected
@@ -0,0 +1,16 @@
+location: clients/tests/test-client.py:833:test_004()/12
+cmd: $NMCLI con s
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 268 bytes
+>>>
+NAME UUID TYPE DEVICE
+con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
+con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn --
+con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-013.expected b/clients/tests/test-client.check-on-disk/test_004-013.expected
new file mode 100644
index 0000000000..b2fad08bd4
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-013.expected
@@ -0,0 +1,82 @@
+location: clients/tests/test-client.py:835:test_004()/13
+cmd: $NMCLI con s con-vpn-1
+lang: C
+returncode: 0
+stdout: 3231 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: yes
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: no
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: unknown
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: no
+ipv4.ignore-auto-dns: no
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: yes
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: no
+ipv4.may-fail: yes
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: no
+ipv6.ignore-auto-dns: no
+ipv6.never-default: no
+ipv6.may-fail: yes
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: yes
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: no
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: no
+proxy.pac-url: --
+proxy.pac-script: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-014.expected b/clients/tests/test-client.check-on-disk/test_004-014.expected
new file mode 100644
index 0000000000..8ad3eb0350
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-014.expected
@@ -0,0 +1,82 @@
+location: clients/tests/test-client.py:835:test_004()/14
+cmd: $NMCLI con s con-vpn-1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 3241 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: tak
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: nie
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: nieznane
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: nie
+ipv4.ignore-auto-dns: nie
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: tak
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: nie
+ipv4.may-fail: tak
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: nie
+ipv6.ignore-auto-dns: nie
+ipv6.never-default: nie
+ipv6.may-fail: tak
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: tak
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: nie
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: nie
+proxy.pac-url: --
+proxy.pac-script: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-015.expected b/clients/tests/test-client.check-on-disk/test_004-015.expected
new file mode 100644
index 0000000000..fef0327908
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-015.expected
@@ -0,0 +1,13 @@
+location: clients/tests/test-client.py:837:test_004()/15
+cmd: $NMCLI con up con-xx1
+lang: C
+returncode: 0
+stdout: 106 bytes
+>>>
+Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-016.expected b/clients/tests/test-client.check-on-disk/test_004-016.expected
new file mode 100644
index 0000000000..b9833e5d64
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-016.expected
@@ -0,0 +1,16 @@
+location: clients/tests/test-client.py:839:test_004()/16
+cmd: $NMCLI con s
+lang: C
+returncode: 0
+stdout: 268 bytes
+>>>
+NAME UUID TYPE DEVICE
+con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0
+con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
+con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-017.expected b/clients/tests/test-client.check-on-disk/test_004-017.expected
new file mode 100644
index 0000000000..a6fc1bb954
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-017.expected
@@ -0,0 +1,16 @@
+location: clients/tests/test-client.py:839:test_004()/17
+cmd: $NMCLI con s
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 268 bytes
+>>>
+NAME UUID TYPE DEVICE
+con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0
+con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
+con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-018.expected b/clients/tests/test-client.check-on-disk/test_004-018.expected
new file mode 100644
index 0000000000..4dcb7dc478
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-018.expected
@@ -0,0 +1,13 @@
+location: clients/tests/test-client.py:841:test_004()/18
+cmd: $NMCLI con up con-vpn-1
+lang: C
+returncode: 0
+stdout: 106 bytes
+>>>
+Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-019.expected b/clients/tests/test-client.check-on-disk/test_004-019.expected
new file mode 100644
index 0000000000..f83c64d5ff
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-019.expected
@@ -0,0 +1,16 @@
+location: clients/tests/test-client.py:843:test_004()/19
+cmd: $NMCLI con s
+lang: C
+returncode: 0
+stdout: 268 bytes
+>>>
+NAME UUID TYPE DEVICE
+con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn wlan0
+con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0
+con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-020.expected b/clients/tests/test-client.check-on-disk/test_004-020.expected
new file mode 100644
index 0000000000..3c3b3bdf6d
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-020.expected
@@ -0,0 +1,16 @@
+location: clients/tests/test-client.py:843:test_004()/20
+cmd: $NMCLI con s
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 268 bytes
+>>>
+NAME UUID TYPE DEVICE
+con-vpn-1 UUID-con-vpn-1-REPLACED-REPLACED-REP vpn wlan0
+con-xx1 UUID-con-xx1-REPLACED-REPLACED-REPLA wifi wlan0
+con-1 5fcfd6d7-1e63-3332-8826-a7eda103792d ethernet --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-021.expected b/clients/tests/test-client.check-on-disk/test_004-021.expected
new file mode 100644
index 0000000000..5ae414a111
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-021.expected
@@ -0,0 +1,102 @@
+location: clients/tests/test-client.py:845:test_004()/21
+cmd: $NMCLI con s con-vpn-1
+lang: C
+returncode: 0
+stdout: 4283 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: yes
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: no
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: unknown
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: no
+ipv4.ignore-auto-dns: no
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: yes
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: no
+ipv4.may-fail: yes
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: no
+ipv6.ignore-auto-dns: no
+ipv6.never-default: no
+ipv6.may-fail: yes
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: yes
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: no
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: no
+proxy.pac-url: --
+proxy.pac-script: --
+GENERAL.NAME: con-vpn-1
+GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.DEVICES: wlan0
+GENERAL.STATE: activated
+GENERAL.DEFAULT: no
+GENERAL.DEFAULT6: no
+GENERAL.SPEC-OBJECT: --
+GENERAL.VPN: yes
+GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/Connection/3
+GENERAL.ZONE: --
+GENERAL.MASTER-PATH: --
+VPN.TYPE: openvpn
+VPN.USERNAME: --
+VPN.GATEWAY: --
+VPN.BANNER: --
+VPN.VPN-STATE: 0 - unknown
+VPN.CFG[1]: key1 = val1
+VPN.CFG[2]: key2 = val2
+VPN.CFG[3]: key3 = val3
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-022.expected b/clients/tests/test-client.check-on-disk/test_004-022.expected
new file mode 100644
index 0000000000..6921761f5f
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-022.expected
@@ -0,0 +1,102 @@
+location: clients/tests/test-client.py:845:test_004()/22
+cmd: $NMCLI con s con-vpn-1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 4297 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: tak
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: nie
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: nieznane
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: nie
+ipv4.ignore-auto-dns: nie
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: tak
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: nie
+ipv4.may-fail: tak
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: nie
+ipv6.ignore-auto-dns: nie
+ipv6.never-default: nie
+ipv6.may-fail: tak
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: tak
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: nie
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: nie
+proxy.pac-url: --
+proxy.pac-script: --
+GENERAL.NAME: con-vpn-1
+GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.DEVICES: wlan0
+GENERAL.STATE: aktywowano
+GENERAL.DEFAULT: nie
+GENERAL.DEFAULT6: nie
+GENERAL.SPEC-OBJECT: --
+GENERAL.VPN: tak
+GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/Connection/3
+GENERAL.ZONE: --
+GENERAL.MASTER-PATH: --
+VPN.TYPE: openvpn
+VPN.USERNAME: --
+VPN.GATEWAY: --
+VPN.BANNER: --
+VPN.VPN-STATE: 0 - nieznane
+VPN.CFG[1]: key1 = val1
+VPN.CFG[2]: key2 = val2
+VPN.CFG[3]: key3 = val3
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-023.expected b/clients/tests/test-client.check-on-disk/test_004-023.expected
new file mode 100644
index 0000000000..cf49305a88
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-023.expected
@@ -0,0 +1,102 @@
+location: clients/tests/test-client.py:854:test_004()/23
+cmd: $NMCLI con s con-vpn-1
+lang: C
+returncode: 0
+stdout: 4319 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: yes
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: no
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: unknown
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: no
+ipv4.ignore-auto-dns: no
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: yes
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: no
+ipv4.may-fail: yes
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: no
+ipv6.ignore-auto-dns: no
+ipv6.never-default: no
+ipv6.may-fail: yes
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: yes
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: no
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: no
+proxy.pac-url: --
+proxy.pac-script: --
+GENERAL.NAME: con-vpn-1
+GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.DEVICES: wlan0
+GENERAL.STATE: activated
+GENERAL.DEFAULT: no
+GENERAL.DEFAULT6: no
+GENERAL.SPEC-OBJECT: --
+GENERAL.VPN: yes
+GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/Connection/3
+GENERAL.ZONE: --
+GENERAL.MASTER-PATH: --
+VPN.TYPE: openvpn
+VPN.USERNAME: --
+VPN.GATEWAY: --
+VPN.BANNER: *** VPN connection con-vpn-1 ***
+VPN.VPN-STATE: 5 - VPN connected
+VPN.CFG[1]: key1 = val1
+VPN.CFG[2]: key2 = val2
+VPN.CFG[3]: key3 = val3
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-024.expected b/clients/tests/test-client.check-on-disk/test_004-024.expected
new file mode 100644
index 0000000000..b901fe23d1
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-024.expected
@@ -0,0 +1,102 @@
+location: clients/tests/test-client.py:854:test_004()/24
+cmd: $NMCLI con s con-vpn-1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 4337 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: tak
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: nie
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: nieznane
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: nie
+ipv4.ignore-auto-dns: nie
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: tak
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: nie
+ipv4.may-fail: tak
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: nie
+ipv6.ignore-auto-dns: nie
+ipv6.never-default: nie
+ipv6.may-fail: tak
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: tak
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: nie
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: nie
+proxy.pac-url: --
+proxy.pac-script: --
+GENERAL.NAME: con-vpn-1
+GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.DEVICES: wlan0
+GENERAL.STATE: aktywowano
+GENERAL.DEFAULT: nie
+GENERAL.DEFAULT6: nie
+GENERAL.SPEC-OBJECT: --
+GENERAL.VPN: tak
+GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/Connection/3
+GENERAL.ZONE: --
+GENERAL.MASTER-PATH: --
+VPN.TYPE: openvpn
+VPN.USERNAME: --
+VPN.GATEWAY: --
+VPN.BANNER: *** VPN connection con-vpn-1 ***
+VPN.VPN-STATE: 5 - Połączono z VPN
+VPN.CFG[1]: key1 = val1
+VPN.CFG[2]: key2 = val2
+VPN.CFG[3]: key3 = val3
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-025.expected b/clients/tests/test-client.check-on-disk/test_004-025.expected
new file mode 100644
index 0000000000..3ec1c5a44d
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-025.expected
@@ -0,0 +1,82 @@
+location: clients/tests/test-client.py:857:test_004()/25
+cmd: $NMCLI -f ALL con s con-vpn-1
+lang: C
+returncode: 0
+stdout: 3231 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: yes
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: no
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: unknown
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: no
+ipv4.ignore-auto-dns: no
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: yes
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: no
+ipv4.may-fail: yes
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: no
+ipv6.ignore-auto-dns: no
+ipv6.never-default: no
+ipv6.may-fail: yes
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: yes
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: no
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: no
+proxy.pac-url: --
+proxy.pac-script: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-026.expected b/clients/tests/test-client.check-on-disk/test_004-026.expected
new file mode 100644
index 0000000000..8409fb7a5f
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-026.expected
@@ -0,0 +1,82 @@
+location: clients/tests/test-client.py:857:test_004()/26
+cmd: $NMCLI -f ALL con s con-vpn-1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 3241 bytes
+>>>
+connection.id: con-vpn-1
+connection.uuid: UUID-con-vpn-1-REPLACED-REPLACED-REP
+connection.stable-id: --
+connection.type: vpn
+connection.interface-name: --
+connection.autoconnect: tak
+connection.autoconnect-priority: 0
+connection.autoconnect-retries: -1 (default)
+connection.auth-retries: -1
+connection.timestamp: 0
+connection.read-only: nie
+connection.permissions: --
+connection.zone: --
+connection.master: --
+connection.slave-type: --
+connection.autoconnect-slaves: -1 (default)
+connection.secondaries: --
+connection.gateway-ping-timeout: 0
+connection.metered: nieznane
+connection.lldp: default
+connection.mdns: -1 (default)
+ipv4.method: auto
+ipv4.dns: --
+ipv4.dns-search: --
+ipv4.dns-options: ""
+ipv4.dns-priority: 0
+ipv4.addresses: --
+ipv4.gateway: --
+ipv4.routes: --
+ipv4.route-metric: -1
+ipv4.route-table: 0 (unspec)
+ipv4.ignore-auto-routes: nie
+ipv4.ignore-auto-dns: nie
+ipv4.dhcp-client-id: --
+ipv4.dhcp-timeout: 0 (default)
+ipv4.dhcp-send-hostname: tak
+ipv4.dhcp-hostname: --
+ipv4.dhcp-fqdn: --
+ipv4.never-default: nie
+ipv4.may-fail: tak
+ipv4.dad-timeout: -1 (default)
+ipv6.method: auto
+ipv6.dns: --
+ipv6.dns-search: --
+ipv6.dns-options: ""
+ipv6.dns-priority: 0
+ipv6.addresses: --
+ipv6.gateway: --
+ipv6.routes: --
+ipv6.route-metric: -1
+ipv6.route-table: 0 (unspec)
+ipv6.ignore-auto-routes: nie
+ipv6.ignore-auto-dns: nie
+ipv6.never-default: nie
+ipv6.may-fail: tak
+ipv6.ip6-privacy: -1 (unknown)
+ipv6.addr-gen-mode: stable-privacy
+ipv6.dhcp-send-hostname: tak
+ipv6.dhcp-hostname: --
+ipv6.token: --
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: nie
+vpn.timeout: 0
+proxy.method: none
+proxy.browser-only: nie
+proxy.pac-url: --
+proxy.pac-script: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-027.expected b/clients/tests/test-client.check-on-disk/test_004-027.expected
new file mode 100644
index 0000000000..8f16f02420
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-027.expected
@@ -0,0 +1,18 @@
+location: clients/tests/test-client.py:863:test_004()/27
+cmd: $NMCLI -f VPN con s con-vpn-1
+lang: C
+returncode: 0
+stdout: 334 bytes
+>>>
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: no
+vpn.timeout: 0
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-028.expected b/clients/tests/test-client.check-on-disk/test_004-028.expected
new file mode 100644
index 0000000000..4e8f78eedb
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-028.expected
@@ -0,0 +1,18 @@
+location: clients/tests/test-client.py:863:test_004()/28
+cmd: $NMCLI -f VPN con s con-vpn-1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 335 bytes
+>>>
+vpn.service-type: org.freedesktop.NetworkManager.openvpn
+vpn.user-name: --
+vpn.data: key1 = val1, key2 = val2, key3 = val3
+vpn.secrets: <hidden>
+vpn.persistent: nie
+vpn.timeout: 0
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-029.expected b/clients/tests/test-client.check-on-disk/test_004-029.expected
new file mode 100644
index 0000000000..2c81c0e9d2
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-029.expected
@@ -0,0 +1,24 @@
+location: clients/tests/test-client.py:866:test_004()/29
+cmd: $NMCLI -f GENERAL con s con-vpn-1
+lang: C
+returncode: 0
+stdout: 667 bytes
+>>>
+GENERAL.NAME: con-vpn-1
+GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.DEVICES: wlan0
+GENERAL.STATE: activated
+GENERAL.DEFAULT: no
+GENERAL.DEFAULT6: no
+GENERAL.SPEC-OBJECT: --
+GENERAL.VPN: yes
+GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/Connection/3
+GENERAL.ZONE: --
+GENERAL.MASTER-PATH: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-030.expected b/clients/tests/test-client.check-on-disk/test_004-030.expected
new file mode 100644
index 0000000000..9e31d58b17
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-030.expected
@@ -0,0 +1,24 @@
+location: clients/tests/test-client.py:866:test_004()/30
+cmd: $NMCLI -f GENERAL con s con-vpn-1
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 670 bytes
+>>>
+GENERAL.NAME: con-vpn-1
+GENERAL.UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.DEVICES: wlan0
+GENERAL.STATE: aktywowano
+GENERAL.DEFAULT: nie
+GENERAL.DEFAULT6: nie
+GENERAL.SPEC-OBJECT: --
+GENERAL.VPN: tak
+GENERAL.DBUS-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/Connection/3
+GENERAL.ZONE: --
+GENERAL.MASTER-PATH: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-031.expected b/clients/tests/test-client.check-on-disk/test_004-031.expected
new file mode 100644
index 0000000000..04e137af64
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-031.expected
@@ -0,0 +1,19 @@
+location: clients/tests/test-client.py:869:test_004()/31
+cmd: $NMCLI dev show wlan0
+lang: C
+returncode: 0
+stdout: 389 bytes
+>>>
+GENERAL.DEVICE: wlan0
+GENERAL.TYPE: wifi
+GENERAL.HWADDR: 5A:88:5E:B6:90:40
+GENERAL.MTU: 0
+GENERAL.STATE: 20 (unavailable)
+GENERAL.CONNECTION: con-vpn-1
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-032.expected b/clients/tests/test-client.check-on-disk/test_004-032.expected
new file mode 100644
index 0000000000..6521a34569
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-032.expected
@@ -0,0 +1,19 @@
+location: clients/tests/test-client.py:869:test_004()/32
+cmd: $NMCLI dev show wlan0
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 390 bytes
+>>>
+GENERAL.DEVICE: wlan0
+GENERAL.TYPE: wifi
+GENERAL.HWADDR: 5A:88:5E:B6:90:40
+GENERAL.MTU: 0
+GENERAL.STATE: 20 (niedostępne)
+GENERAL.CONNECTION: con-vpn-1
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-033.expected b/clients/tests/test-client.check-on-disk/test_004-033.expected
new file mode 100644
index 0000000000..95a96d7603
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-033.expected
@@ -0,0 +1,74 @@
+location: clients/tests/test-client.py:872:test_004()/33
+cmd: $NMCLI -f all dev show wlan0
+lang: C
+returncode: 0
+stdout: 2948 bytes
+>>>
+GENERAL.DEVICE: wlan0
+GENERAL.TYPE: wifi
+GENERAL.NM-TYPE: NMDeviceWifi
+GENERAL.VENDOR: --
+GENERAL.PRODUCT: --
+GENERAL.DRIVER: virtual
+GENERAL.DRIVER-VERSION: --
+GENERAL.FIRMWARE-VERSION: --
+GENERAL.HWADDR: 5A:88:5E:B6:90:40
+GENERAL.MTU: 0
+GENERAL.STATE: 20 (unavailable)
+GENERAL.REASON: 0 (No reason given)
+GENERAL.UDI: /sys/devices/virtual/wlan0
+GENERAL.IP-IFACE: --
+GENERAL.IS-SOFTWARE: no
+GENERAL.NM-MANAGED: yes
+GENERAL.AUTOCONNECT: yes
+GENERAL.FIRMWARE-MISSING: no
+GENERAL.NM-PLUGIN-MISSING: no
+GENERAL.PHYS-PORT-ID: --
+GENERAL.CONNECTION: con-vpn-1
+GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.METERED: unknown
+CAPABILITIES.CARRIER-DETECT: no
+CAPABILITIES.SPEED: unknown
+CAPABILITIES.IS-SOFTWARE: no
+CAPABILITIES.SRIOV: no
+WIFI-PROPERTIES.WEP: yes
+WIFI-PROPERTIES.WPA: yes
+WIFI-PROPERTIES.WPA2: yes
+WIFI-PROPERTIES.TKIP: yes
+WIFI-PROPERTIES.CCMP: yes
+WIFI-PROPERTIES.AP: yes
+WIFI-PROPERTIES.ADHOC: yes
+WIFI-PROPERTIES.2GHZ: unknown
+WIFI-PROPERTIES.5GHZ: unknown
+AP[1].IN-USE:
+AP[1].SSID: wlan0-ap-3
+AP[1].MODE: Infra
+AP[1].CHAN: 1
+AP[1].RATE: 54 Mbit/s
+AP[1].SIGNAL: 88
+AP[1].BARS: ****
+AP[1].SECURITY: WPA1 WPA2
+AP[2].IN-USE:
+AP[2].SSID: wlan0-ap-2
+AP[2].MODE: Infra
+AP[2].CHAN: 1
+AP[2].RATE: 54 Mbit/s
+AP[2].SIGNAL: 61
+AP[2].BARS: ***
+AP[2].SECURITY: WPA1 WPA2
+AP[3].IN-USE:
+AP[3].SSID: wlan0-ap-1
+AP[3].MODE: Infra
+AP[3].CHAN: 1
+AP[3].RATE: 54 Mbit/s
+AP[3].SIGNAL: 29
+AP[3].BARS: *
+AP[3].SECURITY: WPA1 WPA2
+CONNECTIONS.AVAILABLE-CONNECTION-PATHS: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.check-on-disk/test_004-034.expected b/clients/tests/test-client.check-on-disk/test_004-034.expected
new file mode 100644
index 0000000000..e33738241a
--- /dev/null
+++ b/clients/tests/test-client.check-on-disk/test_004-034.expected
@@ -0,0 +1,74 @@
+location: clients/tests/test-client.py:872:test_004()/34
+cmd: $NMCLI -f all dev show wlan0
+lang: pl_PL.UTF-8
+returncode: 0
+stdout: 2991 bytes
+>>>
+GENERAL.DEVICE: wlan0
+GENERAL.TYPE: wifi
+GENERAL.NM-TYPE: NMDeviceWifi
+GENERAL.VENDOR: --
+GENERAL.PRODUCT: --
+GENERAL.DRIVER: virtual
+GENERAL.DRIVER-VERSION: --
+GENERAL.FIRMWARE-VERSION: --
+GENERAL.HWADDR: 5A:88:5E:B6:90:40
+GENERAL.MTU: 0
+GENERAL.STATE: 20 (niedostępne)
+GENERAL.REASON: 0 (Nie podano przyczyny)
+GENERAL.UDI: /sys/devices/virtual/wlan0
+GENERAL.IP-IFACE: --
+GENERAL.IS-SOFTWARE: nie
+GENERAL.NM-MANAGED: tak
+GENERAL.AUTOCONNECT: tak
+GENERAL.FIRMWARE-MISSING: nie
+GENERAL.NM-PLUGIN-MISSING: nie
+GENERAL.PHYS-PORT-ID: --
+GENERAL.CONNECTION: con-vpn-1
+GENERAL.CON-UUID: UUID-con-vpn-1-REPLACED-REPLACED-REP
+GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/2
+GENERAL.METERED: nieznane
+CAPABILITIES.CARRIER-DETECT: nie
+CAPABILITIES.SPEED: nieznane
+CAPABILITIES.IS-SOFTWARE: nie
+CAPABILITIES.SRIOV: nie
+WIFI-PROPERTIES.WEP: tak
+WIFI-PROPERTIES.WPA: tak
+WIFI-PROPERTIES.WPA2: tak
+WIFI-PROPERTIES.TKIP: tak
+WIFI-PROPERTIES.CCMP: tak
+WIFI-PROPERTIES.AP: tak
+WIFI-PROPERTIES.ADHOC: tak
+WIFI-PROPERTIES.2GHZ: nieznane
+WIFI-PROPERTIES.5GHZ: nieznane
+AP[1].IN-USE:
+AP[1].SSID: wlan0-ap-3
+AP[1].MODE: Infrastruktura
+AP[1].CHAN: 1
+AP[1].RATE: 54 Mb/s
+AP[1].SIGNAL: 88
+AP[1].BARS: ****
+AP[1].SECURITY: WPA1 WPA2
+AP[2].IN-USE:
+AP[2].SSID: wlan0-ap-2
+AP[2].MODE: Infrastruktura
+AP[2].CHAN: 1
+AP[2].RATE: 54 Mb/s
+AP[2].SIGNAL: 61
+AP[2].BARS: ***
+AP[2].SECURITY: WPA1 WPA2
+AP[3].IN-USE:
+AP[3].SSID: wlan0-ap-1
+AP[3].MODE: Infrastruktura
+AP[3].CHAN: 1
+AP[3].RATE: 54 Mb/s
+AP[3].SIGNAL: 29
+AP[3].BARS: *
+AP[3].SECURITY: WPA1 WPA2
+CONNECTIONS.AVAILABLE-CONNECTION-PATHS: --
+
+<<<
+stderr: 0 bytes
+>>>
+
+<<<
diff --git a/clients/tests/test-client.py b/clients/tests/test-client.py
index 74e6d5a816..51fd5d7cc5 100755
--- a/clients/tests/test-client.py
+++ b/clients/tests/test-client.py
@@ -162,6 +162,11 @@ class Util:
text = text2
return b''.join([(t[0] if isinstance(t, tuple) else t) for t in text])
+ @staticmethod
+ def debug_dbus_interface():
+ # this is for printf debugging, not used in actual code.
+ os.system('busctl --user --verbose call org.freedesktop.NetworkManager /org/freedesktop org.freedesktop.DBus.ObjectManager GetManagedObjects')
+
###############################################################################
class Configuration:
@@ -280,8 +285,8 @@ class NMStubServer:
raise AttributeError(member)
return self._MethodProxy(self, member[3:])
- def addConnection(self, connection, verify_connection = True):
- return self.op_AddConnection(connection, verify_connection)
+ def addConnection(self, connection, do_verify_strict = True):
+ return self.op_AddConnection(connection, do_verify_strict)
def findConnectionUuid(self, con_id):
try:
@@ -809,10 +814,62 @@ class TestNmcli(NmTestBase):
replace_stdout = replace_stdout)
self.call_nmcli(['connection', 'mod', 'con-xx1', 'ip.gateway', ''])
- self.call_nmcli(['connection', 'mod', 'con-xx1', 'ipv4.gateway', '172.16.0.1'])
+ self.call_nmcli(['connection', 'mod', 'con-xx1', 'ipv4.gateway', '172.16.0.1'], lang = 'pl')
self.call_nmcli(['connection', 'mod', 'con-xx1', 'ipv6.gateway', '::99'])
self.call_nmcli(['connection', 'mod', 'con-xx1', '802.abc', ''])
self.call_nmcli(['connection', 'mod', 'con-xx1', '802-11-wireless.band', 'a'])
+ self.call_nmcli(['connection', 'mod', 'con-xx1', 'ipv4.addresses', '192.168.77.5/24', 'ipv4.routes', '2.3.4.5/32 192.168.77.1', 'ipv6.addresses', '1:2:3:4::6/64', 'ipv6.routes', '1:2:3:4:5:6::5/128'])
+ self.call_nmcli_l(['con', 's', 'con-xx1'],
+ replace_stdout = replace_stdout)
+
+ self.async_wait()
+
+ replace_stdout.append((lambda: self.srv.findConnectionUuid('con-vpn-1'), 'UUID-con-vpn-1-REPLACED-REPLACED-REP'))
+
+ self.call_nmcli(['connection', 'add', 'type', 'vpn', 'con-name', 'con-vpn-1', 'ifname', '*', 'vpn-type', 'openvpn', 'vpn.data', 'key1 = val1, key2 = val2, key3=val3'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli_l(['con', 's'],
+ replace_stdout = replace_stdout)
+ self.call_nmcli_l(['con', 's', 'con-vpn-1'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli(['con', 'up', 'con-xx1'])
+ self.call_nmcli_l(['con', 's'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli(['con', 'up', 'con-vpn-1'])
+ self.call_nmcli_l(['con', 's'],
+ replace_stdout = replace_stdout)
+ self.call_nmcli_l(['con', 's', 'con-vpn-1'],
+ replace_stdout = replace_stdout)
+
+ self.async_wait()
+
+ self.srv.setProperty('/org/freedesktop/NetworkManager/ActiveConnection/2',
+ 'VpnState',
+ dbus.UInt32(NM.VpnConnectionState.ACTIVATED))
+
+ self.call_nmcli_l(['con', 's', 'con-vpn-1'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli_l(['-f', 'ALL', 'con', 's', 'con-vpn-1'],
+ replace_stdout = replace_stdout)
+
+ # This only filters 'vpn' settings from the connection profile.
+ # Contrary to '-f GENERAL' below, it does not show the properties of
+ # the activated VPN connection. This is a nmcli bug.
+ self.call_nmcli_l(['-f', 'VPN', 'con', 's', 'con-vpn-1'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli_l(['-f', 'GENERAL', 'con', 's', 'con-vpn-1'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli_l(['dev', 'show', 'wlan0'],
+ replace_stdout = replace_stdout)
+
+ self.call_nmcli_l(['-f', 'all', 'dev', 'show', 'wlan0'],
+ replace_stdout = replace_stdout)
###############################################################################
diff --git a/tools/test-networkmanager-service.py b/tools/test-networkmanager-service.py
index 75544c7eee..1f623f6912 100755
--- a/tools/test-networkmanager-service.py
+++ b/tools/test-networkmanager-service.py
@@ -22,6 +22,7 @@ import random
import collections
import uuid
import hashlib
+import collections
###############################################################################
@@ -43,14 +44,6 @@ class TestError(AssertionError):
###############################################################################
-IFACE_DBUS = 'org.freedesktop.DBus'
-
-class UnknownInterfaceException(dbus.DBusException):
- _dbus_error_name = IFACE_DBUS + '.UnknownInterface'
-
-class UnknownPropertyException(dbus.DBusException):
- _dbus_error_name = IFACE_DBUS + '.UnknownProperty'
-
class Util:
@staticmethod
@@ -87,6 +80,248 @@ class Util:
r = tuple(Util.pseudorandom_stream(seed, 6))
return '%02X:%02X:%02X:%02X:%02X:%02X' % r
+ @staticmethod
+ def eprint(*args, **kwargs):
+ print(*args, file=sys.stderr, **kwargs)
+
+ @staticmethod
+ def variant_from_dbus(val):
+ if isinstance(val, (dbus.String, str)):
+ return GLib.Variant('s', str(val))
+ if isinstance(val, dbus.UInt32):
+ return GLib.Variant('u', int(val))
+ if isinstance(val, dbus.Boolean):
+ return GLib.Variant('b', bool(val))
+ if isinstance(val, dbus.Byte):
+ return GLib.Variant('y', int(val))
+ if isinstance(val, dbus.Array):
+ try:
+ if val.signature == 's':
+ return GLib.Variant('as', [Util.variant_from_dbus(x) for x in val])
+ if val.signature == 'b':
+ return GLib.Variant('ab', [Util.variant_from_dbus(x) for x in val])
+ if val.signature == 'y':
+ return GLib.Variant('ay', [int(x) for x in val])
+ if val.signature == 'u':
+ return GLib.Variant('au', [Util.variant_from_dbus(x) for x in val])
+ if val.signature == 'ay':
+ return GLib.Variant('aay', [Util.variant_from_dbus(x) for x in val])
+ if val.signature == 'au':
+ return GLib.Variant('aau', [Util.variant_from_dbus(x) for x in val])
+ if val.signature == 'a{sv}':
+ return GLib.Variant('aa{sv}', [collections.OrderedDict([(str(k), Util.variant_from_dbus(v)) for k, v in addr.items()]) for addr in val])
+ if val.signature == '(ayuay)':
+ return GLib.Variant('a(ayuay)', [Util.variant_from_dbus(x) for x in val])
+ if val.signature == '(ayuayu)':
+ return GLib.Variant('a(ayuayu)', [Util.variant_from_dbus(x) for x in val])
+ except Exception as e:
+ raise Exception("Cannot convert array element to type '%s': %s" % (val.signature, e.message))
+ if isinstance(val, dbus.Dictionary):
+ if val.signature == 'ss':
+ return GLib.Variant('a{ss}', collections.OrderedDict([(str(k), str(v)) for k, v in val.items()]))
+ if val.signature == 'sv':
+ return GLib.Variant('a{sv}', collections.OrderedDict([(str(k), Util.variant_from_dbus(v)) for k, v in val.items()]))
+ if val.signature == 'sa{sv}':
+ c = collections.OrderedDict([
+ (str(key1),
+ collections.OrderedDict([(str(key2), Util.variant_from_dbus(arr2)) for key2, arr2 in arr1.items()])
+ ) for key1, arr1 in val.items()
+ ])
+ return GLib.Variant('a{sa{sv}}', c)
+
+ raise Exception("Unsupported type for value '%s'" % (repr(val)))
+
+###############################################################################
+
+IFACE_DBUS = 'org.freedesktop.DBus'
+IFACE_CONNECTION = 'org.freedesktop.NetworkManager.Settings.Connection'
+IFACE_DEVICE = 'org.freedesktop.NetworkManager.Device'
+IFACE_WIFI = 'org.freedesktop.NetworkManager.Device.Wireless'
+IFACE_WIMAX = 'org.freedesktop.NetworkManager.Device.WiMax'
+IFACE_TEST = 'org.freedesktop.NetworkManager.LibnmGlibTest'
+IFACE_NM = 'org.freedesktop.NetworkManager'
+IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings'
+IFACE_AGENT_MANAGER = 'org.freedesktop.NetworkManager.AgentManager'
+IFACE_AGENT = 'org.freedesktop.NetworkManager.SecretAgent'
+IFACE_WIRED = 'org.freedesktop.NetworkManager.Device.Wired'
+IFACE_VLAN = 'org.freedesktop.NetworkManager.Device.Vlan'
+IFACE_WIFI_AP = 'org.freedesktop.NetworkManager.AccessPoint'
+IFACE_WIMAX_NSP = 'org.freedesktop.NetworkManager.WiMax.Nsp'
+IFACE_ACTIVE_CONNECTION = 'org.freedesktop.NetworkManager.Connection.Active'
+IFACE_VPN_CONNECTION = 'org.freedesktop.NetworkManager.VPN.Connection'
+IFACE_DNS_MANAGER = 'org.freedesktop.NetworkManager.DnsManager'
+IFACE_OBJECT_MANAGER = 'org.freedesktop.DBus.ObjectManager'
+
+###############################################################################
+
+class BusErr:
+
+ class UnknownInterfaceException(dbus.DBusException):
+ _dbus_error_name = IFACE_DBUS + '.UnknownInterface'
+
+ class UnknownPropertyException(dbus.DBusException):
+ _dbus_error_name = IFACE_DBUS + '.UnknownProperty'
+
+ class InvalidPropertyException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.InvalidProperty'
+
+ class MissingPropertyException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.MissingProperty'
+
+ class InvalidSettingException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.InvalidSetting'
+
+ class MissingSettingException(dbus.DBusException):
+ _dbus_error_name = IFACE_CONNECTION + '.MissingSetting'
+
+ class NotSoftwareException(dbus.DBusException):
+ _dbus_error_name = IFACE_DEVICE + '.NotSoftware'
+
+ class ApNotFoundException(dbus.DBusException):
+ _dbus_error_name = IFACE_WIFI + '.AccessPointNotFound'
+
+ class NspNotFoundException(dbus.DBusException):
+ _dbus_error_name = IFACE_WIMAX + '.NspNotFound'
+
+ class PermissionDeniedException(dbus.DBusException):
+ _dbus_error_name = IFACE_NM + '.PermissionDenied'
+
+ class UnknownDeviceException(dbus.DBusException):
+ _dbus_error_name = IFACE_NM + '.UnknownDevice'
+
+ class UnknownConnectionException(dbus.DBusException):
+ _dbus_error_name = IFACE_NM + '.UnknownConnection'
+
+ class InvalidHostnameException(dbus.DBusException):
+ _dbus_error_name = IFACE_SETTINGS + '.InvalidHostname'
+
+ class NoSecretsException(dbus.DBusException):
+ _dbus_error_name = IFACE_AGENT_MANAGER + '.NoSecrets'
+
+ class UserCanceledException(dbus.DBusException):
+ _dbus_error_name = IFACE_AGENT_MANAGER + '.UserCanceled'
+
+ @staticmethod
+ def from_nmerror(e):
+ try:
+ domain, code = (e.domain, e.code)
+ except:
+ return None
+ if domain == GLib.quark_to_string(NM.ConnectionError.quark()):
+ if code == NM.ConnectionError.MISSINGSETTING:
+ return BusErr.MissingSettingException(e.message)
+ if code == NM.ConnectionError.INVALIDPROPERTY:
+ return BusErr.InvalidPropertyException(e.message)
+ return None
+
+ @staticmethod
+ def raise_nmerror(e):
+ e2 = BusErr.from_nmerror(e)
+ if e2 is not None:
+ raise e2
+ raise e
+
+###############################################################################
+
+class NmUtil:
+
+ @staticmethod
+ def con_hash_to_connection(con_hash, do_verify = False, do_normalize = False):
+
+ x_con = []
+ for v_setting_name, v_setting in list(con_hash.items()):
+ if isinstance(v_setting_name, (dbus.String, str)):
+ v_setting_name = str(v_setting_name)
+ else:
+ raise Exception("Expected string dict, but got '%s' key" % (v_setting_name))
+ x_setting = []
+ for v_property_name, v_value in list(v_setting.items()):
+ if isinstance(v_property_name, (dbus.String, str)):
+ v_property_name = str(v_property_name)
+ else:
+ raise Exception("Expected string dict, but got '%s' subkey under %s (%s)" % (v_property_name, v_setting_name, repr(con_hash)))
+ try:
+ v = Util.variant_from_dbus(v_value)
+ except Exception as e:
+ raise Exception("Unsupported value %s.%s = %s (%s)" % (v_setting_name, v_property_name, v_value, str(e)))
+ x_setting.append((v_property_name, v))
+
+ x_con.append((v_setting_name, collections.OrderedDict(x_setting)))
+
+ x_con = GLib.Variant('a{sa{sv}}', collections.OrderedDict(x_con))
+
+ assert GLib.Variant.equal(x_con, Util.variant_from_dbus(con_hash))
+
+ try:
+ con = NM.SimpleConnection.new_from_dbus(x_con)
+ except:
+ if do_verify:
+ raise
+ return None
+
+ if do_normalize:
+ try:
+ con.normalize()
+ except:
+ if do_verify:
+ raise
+
+ if do_verify:
+ con.verify()
+
+ return con
+
+ @staticmethod
+ def con_hash_verify(con_hash, do_verify_strict = True):
+ if NM.SETTING_CONNECTION_SETTING_NAME not in con_hash:
+ raise BusErr.MissingSettingException('connection: setting is required')
+ s_con = con_hash[NM.SETTING_CONNECTION_SETTING_NAME]
+ if NM.SETTING_CONNECTION_TYPE not in s_con:
+ raise BusErr.MissingPropertyException('connection.type: property is required')
+ if NM.SETTING_CONNECTION_UUID not in s_con:
+ raise BusErr.MissingPropertyException('connection.uuid: property is required')
+ if NM.SETTING_CONNECTION_ID not in s_con:
+ raise BusErr.MissingPropertyException('connection.id: property is required')
+
+ if not do_verify_strict:
+ return;
+ t = s_con[NM.SETTING_CONNECTION_TYPE]
+ if t not in [ NM.SETTING_WIRED_SETTING_NAME,
+ NM.SETTING_WIRELESS_SETTING_NAME,
+ NM.SETTING_VLAN_SETTING_NAME,
+ NM.SETTING_WIMAX_SETTING_NAME,
+ NM.SETTING_VPN_SETTING_NAME ]:
+ raise BusErr.InvalidPropertyException('connection.type: unsupported connection type "%s"' % (t))
+
+ try:
+ con_nm = NmUtil.con_hash_to_connection(con_hash, do_verify = True, do_normalize = True)
+ except Exception as e:
+ BusErr.raise_nmerror(e)
+
+ @staticmethod
+ def con_hash_get_id(con_hash):
+ if NM.SETTING_CONNECTION_SETTING_NAME in con_hash:
+ s_con = con_hash[NM.SETTING_CONNECTION_SETTING_NAME]
+ if NM.SETTING_CONNECTION_ID in s_con:
+ return s_con[NM.SETTING_CONNECTION_ID]
+ return None
+
+ @staticmethod
+ def con_hash_get_uuid(con_hash):
+ if NM.SETTING_CONNECTION_SETTING_NAME in con_hash:
+ s_con = con_hash[NM.SETTING_CONNECTION_SETTING_NAME]
+ if NM.SETTING_CONNECTION_UUID in s_con:
+ return s_con[NM.SETTING_CONNECTION_UUID]
+ return None
+
+ @staticmethod
+ def con_hash_get_type(con_hash):
+ if NM.SETTING_CONNECTION_SETTING_NAME in con_hash:
+ s_con = con_hash[NM.SETTING_CONNECTION_SETTING_NAME]
+ if NM.SETTING_CONNECTION_TYPE in s_con:
+ return s_con[NM.SETTING_CONNECTION_TYPE]
+ return None
+
###############################################################################
class ExportedObj(dbus.service.Object):
@@ -145,7 +380,7 @@ class ExportedObj(dbus.service.Object):
def _dbus_interface_get(self, dbus_iface):
if dbus_iface not in self._dbus_ifaces:
- raise UnknownInterfaceException()
+ raise BusErr.UnknownInterfaceException()
return self._dbus_ifaces[dbus_iface]
def _dbus_interface_get_property(self, dbus_interface, propname = None):
@@ -153,7 +388,7 @@ class ExportedObj(dbus.service.Object):
if propname is None:
return props
if propname not in props:
- raise UnknownPropertyException()
+ raise BusErr.UnknownPropertyException()
return props[propname]
def _dbus_property_get(self, dbus_iface, propname = None):
@@ -184,11 +419,17 @@ class ExportedObj(dbus.service.Object):
if propname not in props:
raise TestError("No property '%s' on '%s' on '%s'" % (propname, dbus_iface, self.path))
- if isinstance(self, ActiveConnection) \
- and dbus_iface == 'org.freedesktop.NetworkManager.Connection.Active' \
- and propname == 'State':
- return
- else:
+ permission_granted = False
+
+ if isinstance(self, ActiveConnection):
+ if dbus_iface == IFACE_ACTIVE_CONNECTION:
+ if propname == PRP_ACTIVE_CONNECTION_STATE:
+ permission_granted = True
+ elif dbus_iface == IFACE_VPN_CONNECTION:
+ if propname == PRP_VPN_CONNECTION_VPN_STATE:
+ permission_granted = True
+
+ if not permission_granted:
raise TestError("Cannot set property '%s' on '%s' on '%s' via D-Bus" % (propname, dbus_iface, self.path))
assert propname in props
@@ -232,11 +473,6 @@ class ExportedObj(dbus.service.Object):
###############################################################################
-IFACE_DEVICE = 'org.freedesktop.NetworkManager.Device'
-
-class NotSoftwareException(dbus.DBusException):
- _dbus_error_name = IFACE_DEVICE + '.NotSoftware'
-
PRP_DEVICE_UDI = "Udi"
PRP_DEVICE_IFACE = "Interface"
PRP_DEVICE_DRIVER = "Driver"
@@ -288,7 +524,7 @@ class Device(ExportedObj):
@dbus.service.method(dbus_interface=IFACE_DEVICE, in_signature='', out_signature='')
def Delete(self):
# We don't currently support any software device types, so...
- raise NotSoftwareException()
+ raise BusErr.NotSoftwareException()
pass
@dbus.service.signal(IFACE_DEVICE, signature='a{sv}')
@@ -300,8 +536,6 @@ class Device(ExportedObj):
###############################################################################
-IFACE_WIRED = 'org.freedesktop.NetworkManager.Device.Wired'
-
PRP_WIRED_HW_ADDRESS = "HwAddress"
PRP_WIRED_PERM_HW_ADDRESS = "PermHwAddress"
PRP_WIRED_SPEED = "Speed"
@@ -333,8 +567,6 @@ class WiredDevice(Device):
###############################################################################
-IFACE_VLAN = 'org.freedesktop.NetworkManager.Device.Vlan'
-
PRP_VLAN_HW_ADDRESS = "HwAddress"
PRP_VLAN_CARRIER = "Carrier"
PRP_VLAN_VLAN_ID = "VlanId"
@@ -357,8 +589,6 @@ class VlanDevice(Device):
###############################################################################
-IFACE_WIFI_AP = 'org.freedesktop.NetworkManager.AccessPoint'
-
PRP_WIFI_AP_FLAGS = "Flags"
PRP_WIFI_AP_WPA_FLAGS = "WpaFlags"
PRP_WIFI_AP_RSN_FLAGS = "RsnFlags"
@@ -426,11 +656,6 @@ class WifiAp(ExportedObj):
###############################################################################
-IFACE_WIFI = 'org.freedesktop.NetworkManager.Device.Wireless'
-
-class ApNotFoundException(dbus.DBusException):
- _dbus_error_name = IFACE_WIFI + '.AccessPointNotFound'
-
PRP_WIFI_HW_ADDRESS = "HwAddress"
PRP_WIFI_PERM_HW_ADDRESS = "PermHwAddress"
PRP_WIFI_MODE = "Mode"
@@ -504,13 +729,11 @@ class WifiDevice(Device):
if ap.path == path:
self.remove_ap(ap)
return
- raise ApNotFoundException("AP %s not found" % path)
+ raise BusErr.ApNotFoundException("AP %s not found" % path)
###############################################################################
-IFACE_WIMAX_NSP = 'org.freedesktop.NetworkManager.WiMax.Nsp'
-
PRP_WIMAX_NSP_NAME = "Name"
PRP_WIMAX_NSP_SIGNAL_QUALITY = "SignalQuality"
PRP_WIMAX_NSP_NETWORK_TYPE = "NetworkType"
@@ -549,11 +772,6 @@ class WimaxNsp(ExportedObj):
###############################################################################
-IFACE_WIMAX = 'org.freedesktop.NetworkManager.Device.WiMax'
-
-class NspNotFoundException(dbus.DBusException):
- _dbus_error_name = IFACE_WIMAX + '.NspNotFound'
-
PRP_WIMAX_NSPS = "Nsps"
PRP_WIMAX_HW_ADDRESS = "HwAddress"
PRP_WIMAX_CENTER_FREQUENCY = "CenterFrequency"
@@ -623,12 +841,10 @@ class WimaxDevice(Device):
if nsp.path == path:
self.remove_nsp(nsp)
return
- raise NspNotFoundException("NSP %s not found" % path)
+ raise BusErr.NspNotFoundException("NSP %s not found" % path)
###############################################################################
-IFACE_ACTIVE_CONNECTION = 'org.freedesktop.NetworkManager.Connection.Active'
-
PRP_ACTIVE_CONNECTION_CONNECTION = "Connection"
PRP_ACTIVE_CONNECTION_SPECIFIC_OBJECT = "SpecificObject"
PRP_ACTIVE_CONNECTION_ID = "Id"
@@ -645,29 +861,34 @@ PRP_ACTIVE_CONNECTION_DHCP6CONFIG = "Dhcp6Config"
PRP_ACTIVE_CONNECTION_VPN = "Vpn"
PRP_ACTIVE_CONNECTION_MASTER = "Master"
+PRP_VPN_CONNECTION_VPN_STATE = 'VpnState'
+PRP_VPN_CONNECTION_BANNER = 'Banner'
+
class ActiveConnection(ExportedObj):
path_counter_next = 1
path_prefix = "/org/freedesktop/NetworkManager/ActiveConnection/"
- def __init__(self, device, connection, specific_object):
+ def __init__(self, device, con_inst, specific_object):
+
+ is_vpn = (NmUtil.con_hash_get_type(con_inst.con_hash) == NM.SETTING_VPN_SETTING_NAME)
ExportedObj.__init__(self, ExportedObj.create_path(ActiveConnection))
self.device = device
- self.conn = connection
+ self.con_inst = con_inst
+ self.is_vpn = is_vpn
self._activation_id = None
- conn_settings = self.conn.GetSettings()
- s_con = conn_settings['connection']
+ s_con = con_inst.con_hash[NM.SETTING_CONNECTION_SETTING_NAME]
props = {
- PRP_ACTIVE_CONNECTION_CONNECTION: ExportedObj.to_path(self.conn),
+ PRP_ACTIVE_CONNECTION_CONNECTION: ExportedObj.to_path(con_inst),
PRP_ACTIVE_CONNECTION_SPECIFIC_OBJECT: ExportedObj.to_path(specific_object),
- PRP_ACTIVE_CONNECTION_ID: s_con['id'],
- PRP_ACTIVE_CONNECTION_UUID: s_con['uuid'],
- PRP_ACTIVE_CONNECTION_TYPE: s_con['type'],
+ PRP_ACTIVE_CONNECTION_ID: s_con[NM.SETTING_CONNECTION_ID],
+ PRP_ACTIVE_CONNECTION_UUID: s_con[NM.SETTING_CONNECTION_UUID],
+ PRP_ACTIVE_CONNECTION_TYPE: s_con[NM.SETTING_CONNECTION_TYPE],
PRP_ACTIVE_CONNECTION_DEVICES: ExportedObj.to_path_array([self.device]),
PRP_ACTIVE_CONNECTION_STATE: dbus.UInt32(NM.ActiveConnectionState.UNKNOWN),
PRP_ACTIVE_CONNECTION_DEFAULT: False,
@@ -676,12 +897,21 @@ class ActiveConnection(ExportedObj):
PRP_ACTIVE_CONNECTION_DEFAULT6: False,
PRP_ACTIVE_CONNECTION_IP6CONFIG: ExportedObj.to_path(None),
PRP_ACTIVE_CONNECTION_DHCP6CONFIG: ExportedObj.to_path(None),
- PRP_ACTIVE_CONNECTION_VPN: False,
+ PRP_ACTIVE_CONNECTION_VPN: is_vpn,
PRP_ACTIVE_CONNECTION_MASTER: ExportedObj.to_path(None),
}
self.dbus_interface_add(IFACE_ACTIVE_CONNECTION, props, ActiveConnection.PropertiesChanged)
+ if is_vpn:
+ props = {
+ PRP_VPN_CONNECTION_VPN_STATE: dbus.UInt32(NM.VpnConnectionState.UNKNOWN),
+ PRP_VPN_CONNECTION_BANNER: '*** VPN connection %s ***' % (con_inst.get_id()),
+ }
+
+ self.dbus_interface_add(IFACE_VPN_CONNECTION, props, ActiveConnection.VpnPropertiesChanged)
+
+
def _set_state(self, state, reason):
state = dbus.UInt32(state)
self._dbus_property_set(IFACE_ACTIVE_CONNECTION, PRP_ACTIVE_CONNECTION_STATE, state)
@@ -711,6 +941,11 @@ class ActiveConnection(ExportedObj):
assert self._activation_id is None
self._activation_id = GLib.timeout_add(50, self._activation_step1)
+ @dbus.service.signal(IFACE_VPN_CONNECTION, signature='a{sv}')
+ def PropertiesChanged(self, changed):
+ pass
+ VpnPropertiesChanged = PropertiesChanged
+
@dbus.service.signal(IFACE_ACTIVE_CONNECTION, signature='a{sv}')
def PropertiesChanged(self, changed):
pass
@@ -719,19 +954,11 @@ class ActiveConnection(ExportedObj):
def StateChanged(self, state, reason):
pass
-###############################################################################
-
-IFACE_TEST = 'org.freedesktop.NetworkManager.LibnmGlibTest'
-IFACE_NM = 'org.freedesktop.NetworkManager'
-
-class PermissionDeniedException(dbus.DBusException):
- _dbus_error_name = IFACE_NM + '.PermissionDenied'
-
-class UnknownDeviceException(dbus.DBusException):
- _dbus_error_name = IFACE_NM + '.UnknownDevice'
+ @dbus.service.signal(IFACE_VPN_CONNECTION, signature='uu')
+ def VpnStateChanged(self, state, reason):
+ pass
-class UnknownConnectionException(dbus.DBusException):
- _dbus_error_name = IFACE_NM + '.UnknownConnection'
+###############################################################################
PRP_NM_DEVICES = 'Devices'
PRP_NM_ALL_DEVICES = 'AllDevices'
@@ -796,44 +1023,57 @@ class NetworkManager(ExportedObj):
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='s', out_signature='o')
def GetDeviceByIpIface(self, ip_iface):
- d = self.find_device_first(ip_iface = ip_iface, require = UnknownDeviceException)
+ d = self.find_device_first(ip_iface = ip_iface, require = BusErr.UnknownDeviceException)
return ExportedObj.to_path(d)
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='ooo', out_signature='o')
def ActivateConnection(self, conpath, devpath, specific_object):
try:
- connection = gl.settings.get_connection(conpath)
+ con_inst = gl.settings.get_connection(conpath)
except Exception as e:
- raise UnknownConnectionException("Connection not found")
+ raise BusErr.UnknownConnectionException("Connection not found")
- hash = connection.GetSettings()
- s_con = hash['connection']
+ con_hash = con_inst.con_hash
+ con_type = NmUtil.con_hash_get_type(con_hash)
device = self.find_device_first(path = devpath)
- if not device and s_con['type'] == 'vlan':
- ifname = s_con['interface-name']
- device = VlanDevice(ifname)
- self.add_device(device)
if not device:
- raise UnknownDeviceException("No device found for the requested iface.")
+ if con_type == NM.SETTING_WIRED_SETTING_NAME:
+ device = self.find_device_first(dev_type = WiredDevice)
+ elif con_type == NM.SETTING_WIRELESS_SETTING_NAME:
+ device = self.find_device_first(dev_type = WifiDevice)
+ elif con_type == NM.SETTING_VLAN_SETTING_NAME:
+ ifname = con_hash[NM.SETTING_CONNECTION_SETTING_NAME]['interface-name']
+ device = VlanDevice(ifname)
+ self.add_device(device)
+ elif con_type == NM.SETTING_VPN_SETTING_NAME:
+ for ac in self.active_connections:
+ if ac.is_vpn:
+ continue
+ if ac.device:
+ device = ac.device
+ break
+
+ if not device:
+ raise BusErr.UnknownDeviceException("No device found for the requested iface.")
# See if we need secrets. For the moment, we only support WPA
- if '802-11-wireless-security' in hash:
- s_wsec = hash['802-11-wireless-security']
+ if '802-11-wireless-security' in con_hash:
+ s_wsec = con_hash['802-11-wireless-security']
if (s_wsec['key-mgmt'] == 'wpa-psk' and 'psk' not in s_wsec):
- secrets = gl.agent_manager.get_secrets(hash, conpath, '802-11-wireless-security')
+ secrets = gl.agent_manager.get_secrets(con_hash, conpath, '802-11-wireless-security')
if secrets is None:
- raise NoSecretsException("No secret agent available")
+ raise BusErr.NoSecretsException("No secret agent available")
if '802-11-wireless-security' not in secrets:
- raise NoSecretsException("No secrets provided")
+ raise BusErr.NoSecretsException("No secrets provided")
s_wsec = secrets['802-11-wireless-security']
if 'psk' not in s_wsec:
- raise NoSecretsException("No secrets provided")
+ raise BusErr.NoSecretsException("No secrets provided")
- ac = ActiveConnection(device, connection, None)
+ ac = ActiveConnection(device, con_inst, None)
self.active_connection_add(ac)
- if s_con['id'] == 'object-creation-failed-test':
+ if NmUtil.con_hash_get_id(con_hash) == 'object-creation-failed-test':
# FIXME: this is not the right test, to delete the active-connection
# before returning it. It's the wrong order of what NetworkManager
# would do.
@@ -855,9 +1095,9 @@ class NetworkManager(ExportedObj):
ac.unexport()
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='a{sa{sv}}oo', out_signature='oo')
- def AddAndActivateConnection(self, connection, devpath, specific_object):
- device = self.find_device_first(path = devpath, require = UnknownDeviceException)
- conpath = gl.settings.AddConnection(connection)
+ def AddAndActivateConnection(self, con_hash, devpath, specific_object):
+ device = self.find_device_first(path = devpath, require = BusErr.UnknownDeviceException)
+ conpath = gl.settings.AddConnection(con_hash)
return (conpath, self.ActivateConnection(conpath, devpath, specific_object))
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='o', out_signature='')
@@ -903,13 +1143,13 @@ class NetworkManager(ExportedObj):
@dbus.service.method(dbus_interface=IFACE_NM, in_signature='', out_signature='u')
def CheckConnectivity(self):
- raise PermissionDeniedException("You fail")
+ raise BusErr.PermissionDeniedException("You fail")
@dbus.service.signal(IFACE_NM, signature='o')
def DeviceAdded(self, devpath):
pass
- def find_devices(self, ident = _DEFAULT_ARG, path = _DEFAULT_ARG, iface = _DEFAULT_ARG, ip_iface = _DEFAULT_ARG):
+ def find_devices(self, ident = _DEFAULT_ARG, path = _DEFAULT_ARG, iface = _DEFAULT_ARG, ip_iface = _DEFAULT_ARG, dev_type = _DEFAULT_ARG):
r = None
for d in self.devices:
if ident is not _DEFAULT_ARG:
@@ -925,17 +1165,20 @@ class NetworkManager(ExportedObj):
# ignore iface/ip_iface distinction for now
if d.iface != ip_iface:
continue
+ if dev_type is not _DEFAULT_ARG:
+ if not isinstance(d, dev_type):
+ continue
yield d
- def find_device_first(self, ident = _DEFAULT_ARG, path = _DEFAULT_ARG, iface = _DEFAULT_ARG, ip_iface = _DEFAULT_ARG, require = None):
+ def find_device_first(self, ident = _DEFAULT_ARG, path = _DEFAULT_ARG, iface = _DEFAULT_ARG, ip_iface = _DEFAULT_ARG, dev_type = _DEFAULT_ARG, require = None):
r = None
- for d in self.find_devices(ident = ident, path = path, iface = iface, ip_iface = ip_iface):
+ for d in self.find_devices(ident = ident, path = path, iface = iface, ip_iface = ip_iface, dev_type = dev_type):
r = d
break
if r is None and require:
if require is TestError:
raise TestError('Device not found')
- raise UnknownDeviceException('Device not found')
+ raise BusErr.UnknownDeviceException('Device not found')
return r
def add_device(self, device):
@@ -1048,12 +1291,12 @@ class NetworkManager(ExportedObj):
gl.settings.auto_remove_next_connection()
@dbus.service.method(dbus_interface=IFACE_TEST, in_signature='a{sa{sv}}b', out_signature='o')
- def AddConnection(self, connection, verify_connection):
- return gl.settings.add_connection(connection, verify_connection)
+ def AddConnection(self, con_hash, do_verify_strict):
+ return gl.settings.add_connection(con_hash, do_verify_strict)
@dbus.service.method(dbus_interface=IFACE_TEST, in_signature='sa{sa{sv}}b', out_signature='')
- def UpdateConnection(self, path, connection, verify_connection):
- return gl.settings.update_connection(connection, path, verify_connection)
+ def UpdateConnection(self, path, con_hash, do_verify_strict):
+ return gl.settings.update_connection(con_hash, path, do_verify_strict)
@dbus.service.method(dbus_interface=IFACE_TEST, in_signature='ba{ss}', out_signature='')
def ConnectionSetVisible(self, vis, selector_args):
@@ -1069,39 +1312,28 @@ class NetworkManager(ExportedObj):
###############################################################################
-IFACE_CONNECTION = 'org.freedesktop.NetworkManager.Settings.Connection'
-
-class InvalidPropertyException(dbus.DBusException):
- _dbus_error_name = IFACE_CONNECTION + '.InvalidProperty'
-
-class MissingPropertyException(dbus.DBusException):
- _dbus_error_name = IFACE_CONNECTION + '.MissingProperty'
-
-class InvalidSettingException(dbus.DBusException):
- _dbus_error_name = IFACE_CONNECTION + '.InvalidSetting'
-
-class MissingSettingException(dbus.DBusException):
- _dbus_error_name = IFACE_CONNECTION + '.MissingSetting'
-
PRP_CONNECTION_UNSAVED = 'Unsaved'
class Connection(ExportedObj):
- def __init__(self, path_counter, settings, verify_connection=True):
+ def __init__(self, path_counter, con_hash, do_verify_strict=True):
path = "/org/freedesktop/NetworkManager/Settings/Connection/%s" % (path_counter)
ExportedObj.__init__(self, path)
- if 'connection' not in settings:
- settings['connection'] = { }
- if self.get_id(settings) is None:
- settings['connection']['id'] = 'connection-%s' % (path_counter)
- if self.get_uuid(settings) is None:
- settings['connection']['uuid'] = str(uuid.uuid3(uuid.NAMESPACE_URL, path))
- self.verify(settings, verify_strict=verify_connection)
+ s_con = con_hash.get(NM.SETTING_CONNECTION_SETTING_NAME)
+ if s_con is None:
+ s_con = {}
+ con_hash[NM.SETTING_CONNECTION_SETTING_NAME] = s_con
+ if NmUtil.con_hash_get_id(con_hash) is None:
+ s_con[NM.SETTING_CONNECTION_ID] = 'connection-%s' % (path_counter)
+ if NmUtil.con_hash_get_uuid(con_hash) is None:
+ s_con[NM.SETTING_CONNECTION_UUID] = str(uuid.uuid3(uuid.NAMESPACE_URL, path))
+
+ NmUtil.con_hash_verify(con_hash, do_verify_strict=do_verify_strict)
self.path = path
- self.settings = settings
+ self.con_hash = con_hash
self.visible = True
props = {
@@ -1110,59 +1342,29 @@ class Connection(ExportedObj):
self.dbus_interface_add(IFACE_CONNECTION, props)
- def get_id(self, settings=None):
- if settings is None:
- settings = self.settings
- if 'connection' in settings:
- s_con = settings['connection']
- if 'id' in s_con:
- return s_con['id']
- return None
+ def get_id(self):
+ return NmUtil.con_hash_get_id(self.con_hash)
- def get_uuid(self, settings=None):
- if settings is None:
- settings = self.settings
- if 'connection' in settings:
- s_con = settings['connection']
- if 'uuid' in s_con:
- return s_con['uuid']
- return None
+ def get_uuid(self):
+ return NmUtil.con_hash_get_uuid(self.con_hash)
- def verify(self, settings=None, verify_strict=True):
- if settings is None:
- settings = self.settings;
- if 'connection' not in settings:
- raise MissingSettingException('connection: setting is required')
- s_con = settings['connection']
- if 'type' not in s_con:
- raise MissingPropertyException('connection.type: property is required')
- if 'uuid' not in s_con:
- raise MissingPropertyException('connection.uuid: property is required')
- if 'id' not in s_con:
- raise MissingPropertyException('connection.id: property is required')
-
- if not verify_strict:
- return;
- t = s_con['type']
- if t not in ['802-3-ethernet', '802-11-wireless', 'vlan', 'wimax']:
- raise InvalidPropertyException('connection.type: unsupported connection type "%s"' % (t))
+ def update_connection(self, con_hash, do_verify_strict):
- def update_connection(self, settings, verify_connection):
- self.verify(settings, verify_strict=verify_connection)
+ NmUtil.con_hash_verify(con_hash, do_verify_strict = do_verify_strict)
old_uuid = self.get_uuid()
- new_uuid = self.get_uuid(settings)
+ new_uuid = NmUtil.con_hash_get_uuid(con_hash)
if old_uuid != new_uuid:
- raise InvalidPropertyException('connection.uuid: cannot change the uuid from %s to %s' % (old_uuid, new_uuid))
+ raise BusErr.InvalidPropertyException('connection.uuid: cannot change the uuid from %s to %s' % (old_uuid, new_uuid))
- self.settings = settings;
+ self.con_hash = con_hash;
self.Updated()
@dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='', out_signature='a{sa{sv}}')
def GetSettings(self):
if not self.visible:
- raise PermissionDeniedException()
- return self.settings
+ raise BusErr.PermissionDeniedException()
+ return self.con_hash
@dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='b', out_signature='')
def SetVisible(self, vis):
@@ -1174,12 +1376,12 @@ class Connection(ExportedObj):
gl.settings.delete_connection(self)
@dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='a{sa{sv}}', out_signature='')
- def Update(self, settings):
- self.update_connection(settings, True)
+ def Update(self, con_hash):
+ self.update_connection(con_hash, True)
@dbus.service.method(dbus_interface=IFACE_CONNECTION, in_signature='a{sa{sv}}ua{sv}', out_signature='a{sv}')
- def Update2(self, settings, flags, args):
- self.update_connection(settings, True)
+ def Update2(self, con_hash, flags, args):
+ self.update_connection(con_hash, True)
return []
@dbus.service.signal(IFACE_CONNECTION, signature='')
@@ -1192,11 +1394,6 @@ class Connection(ExportedObj):
###############################################################################
-IFACE_SETTINGS = 'org.freedesktop.NetworkManager.Settings'
-
-class InvalidHostnameException(dbus.DBusException):
- _dbus_error_name = IFACE_SETTINGS + '.InvalidHostname'
-
PRP_SETTINGS_HOSTNAME = 'Hostname'
PRP_SETTINGS_CAN_MODIFY = 'CanModify'
PRP_SETTINGS_CONNECTIONS = 'Connections'
@@ -1242,47 +1439,44 @@ class Settings(ExportedObj):
return self.connections.keys()
@dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='a{sa{sv}}', out_signature='o')
- def AddConnection(self, settings):
- return self.add_connection(settings)
+ def AddConnection(self, con_hash):
+ return self.add_connection(con_hash)
- def add_connection(self, settings, verify_connection=True):
+ def add_connection(self, con_hash, do_verify_strict=True):
self.c_counter += 1
- con = Connection(self.c_counter, settings, verify_connection)
+ con_inst = Connection(self.c_counter, con_hash, do_verify_strict)
- uuid = con.get_uuid()
+ uuid = con_inst.get_uuid()
if uuid in [c.get_uuid() for c in self.connections.values()]:
- raise InvalidSettingException('cannot add duplicate connection with uuid %s' % (uuid))
+ raise BusErr.InvalidSettingException('cannot add duplicate connection with uuid %s' % (uuid))
- con.export()
- self.connections[con.path] = con
- self.NewConnection(con.path)
+ con_inst.export()
+ self.connections[con_inst.path] = con_inst
+ self.NewConnection(con_inst.path)
self._dbus_property_set(IFACE_SETTINGS, PRP_SETTINGS_CONNECTIONS, dbus.Array(self.connections.keys(), 'o'))
if self.remove_next_connection:
self.remove_next_connection = False
- self.delete_connection(con)
+ self.delete_connection(con_inst)
- return con.path
+ return con_inst.path
- def update_connection(self, connection, path=None, verify_connection=True):
- if path is None:
- path = connection.path
+ def update_connection(self, con_hash, path=None, do_verify_strict=True):
if path not in self.connections:
- raise UnknownConnectionException('Connection not found')
- con = self.connections[path]
- con.update_connection(connection, verify_connection)
+ raise BusErr.UnknownConnectionException('Connection not found')
+ self.connections[path].update_connection(con_hash, do_verify_strict)
- def delete_connection(self, connection):
- del self.connections[connection.path]
+ def delete_connection(self, con_inst):
+ del self.connections[con_inst.path]
self._dbus_property_set(IFACE_SETTINGS, PRP_SETTINGS_CONNECTIONS, dbus.Array(self.connections.keys(), 'o'))
- connection.Removed()
- connection.unexport()
+ con_inst.Removed()
+ con_inst.unexport()
@dbus.service.method(dbus_interface=IFACE_SETTINGS, in_signature='s', out_signature='')
def SaveHostname(self, hostname):
# Arbitrary requirement to test error handling
if hostname.find('.') == -1:
- raise InvalidHostnameException()
+ raise BusErr.InvalidHostnameException()
self._dbus_property_set(IFACE_SETTINGS, PRP_SETTINGS_HOSTNAME, hostname)
@dbus.service.signal(IFACE_SETTINGS, signature='o')
@@ -1299,8 +1493,6 @@ class Settings(ExportedObj):
###############################################################################
-IFACE_DNS_MANAGER = 'org.freedesktop.NetworkManager.DnsManager'
-
PRP_DNS_MANAGER_MODE = 'Mode'
PRP_DNS_MANAGER_RC_MANAGER = 'RcManager'
PRP_DNS_MANAGER_CONFIGURATION = 'Configuration'
@@ -1329,21 +1521,12 @@ class DnsManager(ExportedObj):
###############################################################################
-IFACE_AGENT_MANAGER = 'org.freedesktop.NetworkManager.AgentManager'
-IFACE_AGENT = 'org.freedesktop.NetworkManager.SecretAgent'
-
PATH_SECRET_AGENT = '/org/freedesktop/NetworkManager/SecretAgent'
FLAG_ALLOW_INTERACTION = 0x1
FLAG_REQUEST_NEW = 0x2
FLAG_USER_REQUESTED = 0x4
-class NoSecretsException(dbus.DBusException):
- _dbus_error_name = IFACE_AGENT_MANAGER + '.NoSecrets'
-
-class UserCanceledException(dbus.DBusException):
- _dbus_error_name = IFACE_AGENT_MANAGER + '.UserCanceled'
-
class AgentManager(dbus.service.Object):
def __init__(self):
dbus.service.Object.__init__(self, gl.bus, "/org/freedesktop/NetworkManager/AgentManager")
@@ -1367,7 +1550,7 @@ class AgentManager(dbus.service.Object):
def Unregister(self, sender=None):
del self.agents[sender]
- def get_secrets(self, connection, path, setting_name):
+ def get_secrets(self, con_hash, path, setting_name):
if len(self.agents) == 0:
return None
@@ -1375,21 +1558,19 @@ class AgentManager(dbus.service.Object):
for sender in self.agents:
agent = self.agents[sender]
try:
- secrets = agent.GetSecrets(connection, path, setting_name,
+ secrets = agent.GetSecrets(con_hash, path, setting_name,
dbus.Array([], 's'),
FLAG_ALLOW_INTERACTION | FLAG_USER_REQUESTED,
dbus_interface=IFACE_AGENT)
break
except dbus.DBusException as e:
if e.get_dbus_name() == IFACE_AGENT + '.UserCanceled':
- raise UserCanceledException('User canceled')
+ raise BusErr.UserCanceledException('User canceled')
continue
return secrets
###############################################################################
-IFACE_OBJECT_MANAGER = 'org.freedesktop.DBus.ObjectManager'
-
class ObjectManager(dbus.service.Object):
def __init__(self, object_path):
dbus.service.Object.__init__(self, gl.bus, object_path)