|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +# SPDX-FileCopyrightText: Copyright The Lima Authors |
| 4 | +# SPDX-License-Identifier: Apache-2.0 |
| 5 | + |
| 6 | +set -eu -o pipefail |
| 7 | + |
| 8 | +scriptdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 9 | +# shellcheck source=common.inc.sh |
| 10 | +source "${scriptdir}/common.inc.sh" |
| 11 | + |
| 12 | +if [ "$#" -ne 1 ]; then |
| 13 | + ERROR "Usage: $0 NAME" |
| 14 | + exit 1 |
| 15 | +fi |
| 16 | + |
| 17 | +NAME="$1" |
| 18 | + |
| 19 | +INFO "Testing --preserve-env flag" |
| 20 | + |
| 21 | +# Environment variable propagation with --preserve-env |
| 22 | +INFO "=== Environment variable propagation with --preserve-env ===" |
| 23 | +test_var_name="LIMA_TEST_PRESERVE_ENV_VAR" |
| 24 | +test_var_value="test-value-${RANDOM}" |
| 25 | + |
| 26 | +got="$(LIMA_SHELLENV_ALLOW="LIMA_TEST_*" LIMA_TEST_PRESERVE_ENV_VAR="$test_var_value" limactl shell --preserve-env "$NAME" printenv "$test_var_name" 2>/dev/null || echo "NOT_FOUND")" |
| 27 | +INFO "$test_var_name: expected=${test_var_value}, got=${got}" |
| 28 | +if [ "$got" != "$test_var_value" ]; then |
| 29 | + ERROR "Environment variable was not propagated with --preserve-env" |
| 30 | + exit 1 |
| 31 | +fi |
| 32 | + |
| 33 | +# Clean up before next test |
| 34 | +unset LIMA_TEST_PRESERVE_ENV_VAR |
| 35 | +unset LIMA_SHELLENV_ALLOW |
| 36 | + |
| 37 | +# Environment variable NOT propagated without --preserve-env |
| 38 | +INFO "=== Environment variable NOT propagated without --preserve-env ===" |
| 39 | +got_without_flag="$(LIMA_TEST_PRESERVE_ENV_VAR="$test_var_value" limactl shell "$NAME" printenv "$test_var_name" 2>/dev/null || echo "NOT_FOUND")" |
| 40 | +INFO "$test_var_name without --preserve-env: got=${got_without_flag}" |
| 41 | +if [ "$got_without_flag" != "NOT_FOUND" ]; then |
| 42 | + ERROR "Environment variable was unexpectedly propagated without --preserve-env" |
| 43 | + exit 1 |
| 44 | +fi |
| 45 | + |
| 46 | +# Blocked environment variables should not be propagated even with --preserve-env |
| 47 | +INFO "=== Blocked environment variables are not propagated with --preserve-env ===" |
| 48 | +blocked_var_name="HOME" |
| 49 | +fake_home="/tmp/fake-home-${RANDOM}" |
| 50 | +got_blocked="$(HOME="$fake_home" limactl shell --preserve-env "$NAME" printenv "$blocked_var_name" 2>/dev/null || echo "NOT_FOUND")" |
| 51 | +INFO "$blocked_var_name: host=${fake_home}, guest=${got_blocked}" |
| 52 | +if [ "$got_blocked" = "$fake_home" ]; then |
| 53 | + ERROR "Blocked environment variable $blocked_var_name was propagated" |
| 54 | + exit 1 |
| 55 | +fi |
| 56 | + |
| 57 | +# LIMA_SHELLENV_BLOCK functionality |
| 58 | +INFO "=== LIMA_SHELLENV_BLOCK with custom pattern ===" |
| 59 | +custom_test_var="LIMA_TEST_CUSTOM_BLOCK" |
| 60 | +custom_test_value="should-be-blocked" |
| 61 | +got_custom_blocked="$(LIMA_SHELLENV_BLOCK="+LIMA_TEST_CUSTOM_*" LIMA_TEST_CUSTOM_BLOCK="$custom_test_value" limactl shell --preserve-env "$NAME" printenv "$custom_test_var" 2>/dev/null || echo "NOT_FOUND")" |
| 62 | +INFO "$custom_test_var with LIMA_SHELLENV_BLOCK: got=${got_custom_blocked}" |
| 63 | +if [ "$got_custom_blocked" != "NOT_FOUND" ]; then |
| 64 | + ERROR "Custom blocked environment variable was propagated" |
| 65 | + exit 1 |
| 66 | +fi |
| 67 | + |
| 68 | +# Clean up before next test |
| 69 | +unset LIMA_TEST_CUSTOM_BLOCK 2>/dev/null || true |
| 70 | +unset LIMA_SHELLENV_BLOCK 2>/dev/null || true |
| 71 | + |
| 72 | +# LIMA_SHELLENV_ALLOW functionality |
| 73 | +INFO "=== LIMA_SHELLENV_ALLOW with custom pattern ===" |
| 74 | +allow_test_var="LIMA_TEST_ALLOW_VAR" |
| 75 | +allow_test_value="should-be-allowed" |
| 76 | +got_allowed="$(LIMA_SHELLENV_ALLOW="LIMA_TEST_ALLOW_*" LIMA_TEST_ALLOW_VAR="$allow_test_value" limactl shell --preserve-env "$NAME" printenv "$allow_test_var" 2>/dev/null || echo "NOT_FOUND")" |
| 77 | +INFO "$allow_test_var with LIMA_SHELLENV_ALLOW: got=${got_allowed}" |
| 78 | +if [ "$got_allowed" != "$allow_test_value" ]; then |
| 79 | + ERROR "Allowed environment variable was not propagated" |
| 80 | + exit 1 |
| 81 | +fi |
| 82 | + |
| 83 | +# Non-allowed variables are blocked when LIMA_SHELLENV_ALLOW is set |
| 84 | +INFO "=== Non-allowed variables are blocked when LIMA_SHELLENV_ALLOW is set ===" |
| 85 | +other_test_var="LIMA_TEST_OTHER_VAR" |
| 86 | +other_test_value="should-be-blocked" |
| 87 | +got_other="$(LIMA_SHELLENV_ALLOW="LIMA_TEST_ALLOW_*" LIMA_TEST_OTHER_VAR="$other_test_value" limactl shell --preserve-env "$NAME" printenv "$other_test_var" 2>/dev/null || echo "NOT_FOUND")" |
| 88 | +INFO "$other_test_var with LIMA_SHELLENV_ALLOW (should be blocked): got=${got_other}" |
| 89 | +if [ "$got_other" != "NOT_FOUND" ]; then |
| 90 | + ERROR "Non-allowed environment variable was propagated when LIMA_SHELLENV_ALLOW was set" |
| 91 | + exit 1 |
| 92 | +fi |
| 93 | + |
| 94 | +INFO "All --preserve-env tests passed" |
0 commit comments