#!/usr/bin/env bats # Unit tests for hcn-cmdline.sh, the dracut cmdline hook writing the "ip=hcn" # marker that tells NetworkManager and the other dracut modules that HCN takes # care of the network configuration. FIXTURE_DIR="$(cd "$(dirname "$BATS_TEST_FILENAME")" && pwd)" HOOK_PATH="${FIXTURE_DIR}/../../live-root/usr/lib/dracut/modules.d/99hcn/hcn-cmdline.sh" # Device tree with HCN devices (one PCI ethernet and one vnic) HCN_DEVICE_TREE_FIXTURE="${FIXTURE_DIR}/proc/device-tree" setup() { TEST_WORK_DIR="$(mktemp -d "${BATS_TEST_TMPDIR:-/tmp}/hcn-cmdline.XXXXXX")" export TEST_WORK_DIR # A device tree without any HCN device export EMPTY_DEVICE_TREE="$TEST_WORK_DIR/device-tree" mkdir -p "$EMPTY_DEVICE_TREE/pci@0/ethernet@0" "$EMPTY_DEVICE_TREE/vdevice" export HCN_CMDLINE_FILE="$TEST_WORK_DIR/20-hcn.conf" export HCN_DEVICE_TREE="$HCN_DEVICE_TREE_FIXTURE" export MOCK_CMDLINE="" } teardown() { [ -d "$TEST_WORK_DIR" ] && rm -rf "$TEST_WORK_DIR" } # Mock the dracut library functions used by the hook, backed by MOCK_CMDLINE info() { echo "INFO: $*" >&2; } warn() { echo "WARN: $*" >&2; } getarg() { local arg for arg in $MOCK_CMDLINE; do case "$arg" in "${1%=}" | "${1%=}"=*) echo "${arg#*=}" return 0 ;; esac done return 1 } # Simplified getargbool: