Merge pull request #212685 from rnhmjoj/pr-connman

nixos/wireless: fix failure on missing config file
This commit is contained in:
Michele Guerini Rocco 2023-01-30 13:32:58 +01:00 committed by GitHub
commit 72c6c848ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 92 additions and 6 deletions

View file

@ -121,11 +121,15 @@ let
''}
# substitute environment variables
${pkgs.gawk}/bin/awk '{
for(varname in ENVIRON)
gsub("@"varname"@", ENVIRON[varname])
print
}' "${configFile}" > "${finalConfig}"
if [ -f "${configFile}" ]; then
${pkgs.gawk}/bin/awk '{
for(varname in ENVIRON)
gsub("@"varname"@", ENVIRON[varname])
print
}' "${configFile}" > "${finalConfig}"
else
touch "${finalConfig}"
fi
iface_args="-s ${optionalString cfg.dbusControlled "-u"} -D${cfg.driver} ${configStr}"

View file

@ -135,6 +135,7 @@ in {
cntr = handleTestOn ["aarch64-linux" "x86_64-linux"] ./cntr.nix {};
cockroachdb = handleTestOn ["x86_64-linux"] ./cockroachdb.nix {};
collectd = handleTest ./collectd.nix {};
connman = handleTest ./connman.nix {};
consul = handleTest ./consul.nix {};
containers-bridge = handleTest ./containers-bridge.nix {};
containers-custom-pkgs.nix = handleTest ./containers-custom-pkgs.nix {};

77
nixos/tests/connman.nix Normal file
View file

@ -0,0 +1,77 @@
import ./make-test-python.nix ({ pkgs, lib, ...}:
{
name = "connman";
meta = with lib.maintainers; {
maintainers = [ rnhmjoj ];
};
# Router running radvd on VLAN 1
nodes.router = { ... }: {
imports = [ ../modules/profiles/minimal.nix ];
virtualisation.vlans = [ 1 ];
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = true;
networking = {
useDHCP = false;
interfaces.eth1.ipv6.addresses =
[ { address = "fd12::1"; prefixLength = 64; } ];
};
services.radvd = {
enable = true;
config = ''
interface eth1 {
AdvSendAdvert on;
AdvManagedFlag on;
AdvOtherConfigFlag on;
prefix fd12::/64 {
AdvAutonomous off;
};
};
'';
};
};
# Client running connman, connected to VLAN 1
nodes.client = { ... }: {
virtualisation.vlans = [ 1 ];
# add a virtual wlan interface
boot.kernelModules = [ "mac80211_hwsim" ];
boot.extraModprobeConfig = ''
options mac80211_hwsim radios=1
'';
# Note: the overrides are needed because the wifi is
# disabled with mkVMOverride in qemu-vm.nix.
services.connman.enable = lib.mkOverride 0 true;
services.connman.networkInterfaceBlacklist = [ "eth0" ];
networking.wireless.enable = lib.mkOverride 0 true;
networking.wireless.interfaces = [ "wlan0" ];
};
testScript =
''
start_all()
with subtest("Router is ready"):
router.wait_for_unit("radvd.service")
with subtest("Daemons are running"):
client.wait_for_unit("wpa_supplicant-wlan0.service")
client.wait_for_unit("connman.service")
client.wait_until_succeeds("connmanctl state | grep -q ready")
with subtest("Wired interface is configured"):
client.wait_until_succeeds("ip -6 route | grep -q fd12::/64")
client.wait_until_succeeds("ping -c 1 fd12::1")
with subtest("Can set up a wireless access point"):
client.succeed("connmanctl enable wifi")
client.wait_until_succeeds("connmanctl tether wifi on nixos-test reproducibility | grep -q 'Enabled'")
client.wait_until_succeeds("iw wlan0 info | grep -q nixos-test")
'';
})

View file

@ -1,4 +1,6 @@
{ lib, stdenv
{ lib
, nixosTests
, stdenv
, fetchurl
, fetchpatch
, pkg-config
@ -170,6 +172,8 @@ stdenv.mkDerivation rec {
doCheck = true;
passthru.tests.connman = nixosTests.connman;
meta = with lib; {
description = "A daemon for managing internet connections";
homepage = "https://git.kernel.org/pub/scm/network/connman/connman.git/";