]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: expand testcases to include resolvectl --json usage 38960/head
authorNick Rosbrook <enr0n@ubuntu.com>
Fri, 10 Oct 2025 19:56:36 +0000 (15:56 -0400)
committerNick Rosbrook <enr0n@ubuntu.com>
Thu, 6 Nov 2025 10:17:59 +0000 (05:17 -0500)
test/units/TEST-75-RESOLVED.sh

index b40856f66391737c2519269c9f9fe6141256edb3..4d2257d6e0f9864bb2e83effeaaee5e83df54c51 100755 (executable)
@@ -852,6 +852,18 @@ testcase_09_resolvectl_showcache() {
 }
 
 testcase_10_resolvectl_json() {
+    local status_json
+
+    # Cleanup
+    # shellcheck disable=SC2317
+    cleanup() {
+        rm -f /run/systemd/resolved.conf.d/90-fallback.conf
+        systemctl reload systemd-resolved.service
+        resolvectl revert dns0
+    }
+
+    trap cleanup RETURN ERR
+
     # Issue: https://github.com/systemd/systemd/issues/29580 (part #1)
     dig @127.0.0.54 signed.test
 
@@ -871,6 +883,68 @@ testcase_10_resolvectl_json() {
         # so we need to select it only if it's present, otherwise the type == "array" check would fail
         echo "$line" | jq -e '[. | .question, (select(has("answer")) | .answer) | type == "array"] | all'
     done
+
+
+    # Test some global-only settings.
+    mkdir -p /run/systemd/resolved.conf.d
+    {
+        echo "[Resolve]"
+        echo "FallbackDNS=10.0.0.1 10.0.0.2"
+    } >/run/systemd/resolved.conf.d/90-fallback.conf
+    systemctl reload systemd-resolved
+
+    status_json="$(mktemp)"
+    resolvectl --json=short >"$status_json"
+
+    # Delegates field should be empty when no delegates are configured.
+    (! jq -rce '.[] | select(.delegate != null)' "$status_json")
+
+    # Test that some links are present.
+    jq -rce '.[] | select(.ifname == "dns0")' "$status_json"
+
+    # Test some global-specific configuration.
+    assert_eq \
+        "$(jq -rc '.[] | select(.ifindex == null and .delegate == null) | [ .fallbackServers[] | .addressString ]' "$status_json")" \
+        '["10.0.0.1","10.0.0.2"]'
+    assert_eq \
+        "$(jq -rc '.[] | select(.ifindex == null and .delegate == null) | .resolvConfMode' "$status_json")" \
+        'stub'
+
+    # Test link status.
+    resolvectl dns dns0 '1.2.3.4'
+    resolvectl domain dns0 'foo'
+    resolvectl default-route dns0 'false'
+    resolvectl llmnr dns0 'no'
+    resolvectl mdns dns0 'no'
+    resolvectl dnsovertls dns0 'opportunistic'
+    resolvectl dnssec dns0 'yes'
+    resolvectl nta dns0 'bar'
+
+    resolvectl --json=short status dns0  >"$status_json"
+
+    assert_eq "$(resolvectl --json=short dns dns0 | jq -rc '.[0].servers | .[0].addressString')" '1.2.3.4'
+    assert_eq "$(jq -rc '.[0].servers | .[0].addressString' "$status_json")" '1.2.3.4'
+
+    assert_eq "$(resolvectl --json=short domain dns0 | jq -rc '.[0].searchDomains| .[0].name')" 'foo'
+    assert_eq "$(jq -rc '.[0].searchDomains | .[0].name' "$status_json")" 'foo'
+
+    assert_eq "$(resolvectl --json=short default-route dns0 | jq -rc '.[0].defaultRoute')" 'false'
+    assert_eq "$(jq -rc '.[0].defaultRoute' "$status_json")" 'false'
+
+    assert_eq "$(resolvectl --json=short llmnr dns0 | jq -rc '.[0].llmnr')" 'no'
+    assert_eq "$(jq -rc '.[0].llmnr' "$status_json")" 'no'
+
+    assert_eq "$(resolvectl --json=short mdns dns0 | jq -rc '.[0].mDNS')" 'no'
+    assert_eq "$(jq -rc '.[0].mDNS' "$status_json")" 'no'
+
+    assert_eq "$(resolvectl --json=short dnsovertls dns0 | jq -rc '.[0].dnsOverTLS')" 'opportunistic'
+    assert_eq "$(jq -rc '.[0].dnsOverTLS' "$status_json")" 'opportunistic'
+
+    assert_eq "$(resolvectl --json=short dnssec dns0 | jq -rc '.[0].dnssec')" 'yes'
+    assert_eq "$(jq -rc '.[0].dnssec' "$status_json")" 'yes'
+
+    assert_eq "$(resolvectl --json=short nta dns0 | jq -rc '.[0].negativeTrustAnchors | .[0]')" 'bar'
+    assert_eq "$(jq -rc '.[0].negativeTrustAnchors | .[0]' "$status_json")" 'bar'
 }
 
 # Test serve stale feature and NFTSet= if nftables is installed
@@ -1414,6 +1488,9 @@ EOF
     systemctl reload systemd-resolved
     resolvectl status
 
+    assert_eq "$(resolvectl --json=short | jq -rc '.[] | select(.delegate == "testcase") | .servers | .[0].addressString')" '192.168.77.78'
+    assert_eq "$(resolvectl --json=short | jq -rc '.[] | select(.delegate == "testcase") | .searchDomains | .[0].name')" 'exercise.test'
+
     # Now that we installed the delegation the resolution should fail, because nothing is listening on that IP address
     (! resolvectl query delegation.exercise.test)