Ctrl K
ComunidadGuías…

hack/platform-packages_test.bats

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bats
# Unit coverage for the lane-specific Package manifest emitted by
# hack/e2e-platform-packages.sh. This suite runs through hack/cozytest.sh, so it
# uses direct shell assertions rather than bats' run/status helpers.

load test_helper

@test "QEMU defaults keep the platform-managed LINSTOR package" {
  manifest=$(hack/e2e-platform-packages.sh)
  names=$(printf '%s\n' "$manifest" | yq -N '.metadata.name')
  endpoint=$(printf '%s\n' "$manifest" | yq '.spec.components.platform.values.publishing.apiServerEndpoint')

  if [ "$names" != "cozystack.cozystack-platform" ]; then
    echo "default manifest unexpectedly replaces a platform package: $names" >&2
    return 1
  fi
  if [ "$endpoint" != "https://192.168.123.10:6443" ]; then
    echo "unexpected default API endpoint: $endpoint" >&2
    return 1
  fi
}

@test "container mode replaces LINSTOR with DRBD disabled" {
  manifest=$(COZY_APISERVER_ENDPOINT=https://192.168.123.11:6443 COZY_LINSTOR_DRBD_ENABLED=false hack/e2e-platform-packages.sh)
  names=$(printf '%s\n' "$manifest" | yq -N '.metadata.name')
  expected_names=$(printf '%s\n' cozystack.cozystack-platform cozystack.linstor cozystack.kubevirt-cdi)
  endpoint=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.cozystack-platform") | .spec.components.platform.values.publishing.apiServerEndpoint')
  disabled=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.cozystack-platform") | .spec.components.platform.values.bundles.disabledPackages | join(",")')
  drbd=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.linstor") | .spec.components.linstor.values.drbd.enabled')

  if [ "$names" != "$expected_names" ]; then
    echo "container manifest has unexpected packages: $names" >&2
    return 1
  fi
  if [ "$endpoint" != "https://192.168.123.11:6443" ]; then
    echo "container API endpoint was not forwarded: $endpoint" >&2
    return 1
  fi
  if [ "$disabled" != "cozystack.linstor,cozystack.kubevirt-cdi" ]; then
    echo "platform-managed LINSTOR was not disabled: $disabled" >&2
    return 1
  fi
  if [ "$drbd" != "false" ]; then
    echo "replacement LINSTOR package did not disable DRBD: $drbd" >&2
    return 1
  fi
}

@test "container mode raises the CDI importer memory ceiling" {
  manifest=$(COZY_APISERVER_ENDPOINT=https://192.168.123.11:6443 COZY_LINSTOR_DRBD_ENABLED=false hack/e2e-platform-packages.sh)
  disabled=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.cozystack-platform") | .spec.components.platform.values.bundles.disabledPackages | join(",")')
  mem=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.kubevirt-cdi") | .spec.components.kubevirt-cdi.values.importerResources.limits.memory')
  cpu=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.kubevirt-cdi") | .spec.components.kubevirt-cdi.values.importerResources.limits.cpu')

  if [ "$disabled" != "cozystack.linstor,cozystack.kubevirt-cdi" ]; then
    echo "container mode did not replace both packages: $disabled" >&2
    return 1
  fi
  if [ "$mem" != "4Gi" ]; then
    echo "replacement CDI package did not raise the memory ceiling: $mem" >&2
    return 1
  fi
  # The CPU ceiling deliberately stays at CDI's own default: the failure this
  # override answers was memory, and widening CPU too would be an unmeasured
  # second change riding along.
  if [ "$cpu" != "750m" ]; then
    echo "replacement CDI package moved the CPU ceiling off CDI's default: $cpu" >&2
    return 1
  fi
}

@test "the CDI chart default does not move production behaviour" {
  # The override above is a lane concern. The chart itself must restate CDI's
  # built-in requirements, so an install that sets nothing behaves as it did
  # before importerResources existed.
  defaults=$(helm template packages/system/kubevirt-cdi --set _cluster.root-host=example.org \
    | yq -N 'select(.kind == "CDI") | .spec.config.podResourceRequirements | [.limits.cpu, .limits.memory, .requests.cpu, .requests.memory] | join(" ")' | grep .)

  if [ "$defaults" != "750m 600M 100m 60M" ]; then
    echo "kubevirt-cdi default podResourceRequirements drifted from CDI's own: $defaults" >&2
    return 1
  fi
}

@test "invalid DRBD mode fails before emitting YAML" {
  if manifest=$(COZY_LINSTOR_DRBD_ENABLED=unsupported hack/e2e-platform-packages.sh); then
    echo "invalid DRBD mode unexpectedly succeeded" >&2
    return 1
  fi
  if [ -n "$manifest" ]; then
    echo "invalid DRBD mode emitted a partial manifest" >&2
    return 1
  fi
}

@test "every e2e lane forwards the container-lane overrides into the sandbox" {
  make_command=$(make -n -C packages/core/testing SANDBOX_NAME=test COZY_LINSTOR_DRBD_ENABLED=false install-cozystack)
  if ! printf '%s\n' "$make_command" | grep -Fq -- '-e COZY_LINSTOR_DRBD_ENABLED="false"'; then
    echo "testing Makefile does not forward COZY_LINSTOR_DRBD_ENABLED" >&2
    return 1
  fi

  # Install and run must agree on the class: a mismatch fails deep inside a suite.
  for wf in .github/workflows/pull-requests.yaml .github/workflows/e2e-fork.yaml .github/workflows/nightly.yaml .github/workflows/e2e-tag.yaml; do
    install='.jobs.e2e.steps[] | select(.name == "Install Cozystack into sandbox")'
    tests='.jobs.e2e.steps[] | select(.name | test("^Run E2E tests"))'
    if [ "$(yq "$install | .env.COZY_LINSTOR_DRBD_ENABLED" "$wf")" != "false" ]; then
      echo "$wf: install does not set COZY_LINSTOR_DRBD_ENABLED=false" >&2
      return 1
    fi
    if [ "$(yq "$install | .env.COZY_E2E_STORAGE_CLASS" "$wf")" != "local" ]; then
      echo "$wf: install does not set COZY_E2E_STORAGE_CLASS=local" >&2
      return 1
    fi
    if [ "$(yq "$tests | .env.COZY_E2E_STORAGE_CLASS" "$wf")" != "local" ]; then
      echo "$wf: the suite run does not set COZY_E2E_STORAGE_CLASS=local" >&2
      return 1
    fi
  done
}

@test "a selector list is emitted under one disabledPackages key, merged with the container pair" {
  manifest=$(COZY_LINSTOR_DRBD_ENABLED=false COZY_DISABLED_PACKAGES="cozystack.goldpinger cozystack.linstor cozystack.keda" hack/e2e-platform-packages.sh)
  disabled=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.cozystack-platform") | .spec.components.platform.values.bundles.disabledPackages | join(",")')

  if [ "$disabled" != "cozystack.linstor,cozystack.kubevirt-cdi,cozystack.goldpinger,cozystack.keda" ]; then
    echo "selector list was not merged once with the container pair: $disabled" >&2
    return 1
  fi
}

@test "a selector list alone leaves the platform-managed packages in place" {
  manifest=$(COZY_DISABLED_PACKAGES="cozystack.goldpinger cozystack.keda" hack/e2e-platform-packages.sh)
  names=$(printf '%s\n' "$manifest" | yq -N '.metadata.name')
  disabled=$(printf '%s\n' "$manifest" | yq '.spec.components.platform.values.bundles.disabledPackages | join(",")')

  if [ "$names" != "cozystack.cozystack-platform" ]; then
    echo "a selector list unexpectedly replaced a platform package: $names" >&2
    return 1
  fi
  if [ "$disabled" != "cozystack.goldpinger,cozystack.keda" ]; then
    echo "selector list was not emitted as given: $disabled" >&2
    return 1
  fi
}

@test "no selector list emits no disabledPackages key" {
  manifest=$(hack/e2e-platform-packages.sh)
  key=$(printf '%s\n' "$manifest" | yq '.spec.components.platform.values.bundles | has("disabledPackages")')

  if [ "$key" != "false" ]; then
    echo "default manifest carries disabledPackages: $key" >&2
    return 1
  fi
}

@test "root monitoring redirects stay off, including for a narrow suite selection" {
  for disabled in "" "$(hack/select-install.sh --disabled vminstance)"; do
    manifest=$(COZY_DISABLED_PACKAGES="$disabled" hack/e2e-platform-packages.sh)
    root=$(printf '%s\n' "$manifest" | yq 'select(.metadata.name == "cozystack.cozystack-platform") | .spec.components.platform.values.monitoring.rootEnabled')

    if [ "$root" != "false" ]; then
      echo "monitoring.rootEnabled is '$root' with disabledPackages '$disabled', but Tenant/root monitoring is off" >&2
      return 1
    fi
  done
}

@test "a malformed package name fails before emitting YAML" {
  for bad in "goldpinger" "cozystack." "cozystack.Gold" "cozystack.a;b"; do
    if manifest=$(COZY_DISABLED_PACKAGES="cozystack.keda $bad" hack/e2e-platform-packages.sh 2>/dev/null); then
      echo "malformed package name '$bad' unexpectedly succeeded" >&2
      return 1
    fi
    if [ -n "$manifest" ]; then
      echo "malformed package name '$bad' emitted a partial manifest" >&2
      return 1
    fi
  done
}

@test "both gating workflows select before installing and forward the list" {
  make_command=$(make -n -C packages/core/testing SANDBOX_NAME=test COZY_DISABLED_PACKAGES="cozystack.keda" install-cozystack)
  if ! printf '%s\n' "$make_command" | grep -Fq -- '-e COZY_DISABLED_PACKAGES="cozystack.keda"'; then
    echo "testing Makefile does not forward COZY_DISABLED_PACKAGES" >&2
    return 1
  fi

  for wf in .github/workflows/pull-requests.yaml .github/workflows/e2e-fork.yaml; do
    select_at=$(yq '.jobs.e2e.steps | to_entries | .[] | select(.value.name == "Select E2E tests") | .key' "$wf")
    install_at=$(yq '.jobs.e2e.steps | to_entries | .[] | select(.value.name == "Install Cozystack into sandbox") | .key' "$wf")
    forwarded=$(yq '.jobs.e2e.steps[] | select(.name == "Install Cozystack into sandbox") | .env.COZY_DISABLED_PACKAGES' "$wf")

    if [ -z "$select_at" ] || [ -z "$install_at" ] || [ "$select_at" -ge "$install_at" ]; then
      echo "$wf: selection (step $select_at) does not precede the install (step $install_at)" >&2
      return 1
    fi
    if [ "$forwarded" != '${{ steps.select.outputs.disabled }}' ]; then
      echo "$wf: install does not take the selector list: $forwarded" >&2
      return 1
    fi
  done
}