Ctrl K
ComunidadGuías…

hack/isp-hosted-lane_test.bats

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

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env bats

# The isp-hosted lane (.github/workflows/e2e-isp-hosted.yaml) is the only CI
# coverage the isp-hosted platform variant and the hosted installer variant
# have. It runs once a day after merge, so a wiring mistake here goes unseen
# until a scheduled run: a Package naming another variant, or an install
# without the hosted installer variant, would leave the lane testing something
# other than its name says. These checks pin the wiring that makes the run mean
# "isp-hosted converged on a cluster that provides its own CNI and storage".

load test_helper

REPO_ROOT="$(cd "$(dirname "${BATS_TEST_FILENAME:-$0}")/.." && pwd)"
WORKFLOW="$REPO_ROOT/.github/workflows/e2e-isp-hosted.yaml"
PACKAGE="$REPO_ROOT/hack/e2e-isp-hosted-package.yaml"
KIND_CONFIG="$REPO_ROOT/hack/e2e-isp-hosted-kind.yaml"
INSTALL="$REPO_ROOT/hack/e2e-install-cozystack-hosted.bats"
TESTING_MAKEFILE="$REPO_ROOT/packages/core/testing/Makefile"

@test "the lane's platform Package selects the isp-hosted variant" {
  name="$(yq -r '.metadata.name' "$PACKAGE")"
  variant="$(yq -r '.spec.variant' "$PACKAGE")"
  if [ "$name" != "cozystack.cozystack-platform" ] || [ "$variant" != "isp-hosted" ]; then
    echo "expected cozystack.cozystack-platform with variant isp-hosted, got $name / $variant" >&2
    exit 1
  fi
}

@test "the operator registers isp-hosted with its own values file" {
  grep -Fq '{"isp-hosted", []string{"values.yaml", "values-isp-hosted.yaml"}}' \
    "$REPO_ROOT/cmd/cozystack-operator/main.go"
  [ -f "$REPO_ROOT/packages/core/platform/values-isp-hosted.yaml" ]
}

@test "the install suite uses the hosted installer variant and the lane's Package" {
  grep -Eq -- '--set cozystackOperator\.variant=hosted([[:space:]]|$)' "$INSTALL"
  grep -Fq 'hack/e2e-isp-hosted-package.yaml' "$INSTALL"
}

@test "the install suite is reachable through the testing Makefile" {
  grep -Eq "^install-cozystack-hosted:" "$TESTING_MAKEFILE"
  grep -Fq 'hack/cozytest.sh hack/e2e-install-cozystack-hosted.bats' "$TESTING_MAKEFILE"
}

# The platform renders service addresses from networking.clusterDomain, and
# several system packages still carry the domain as a literal, so a kind
# cluster on its own default (cluster.local) would fail for a reason that has
# nothing to do with the variant.
@test "the kind cluster DNS domain matches the platform cluster domain" {
  want="$(yq -r '.spec.components.platform.values.networking.clusterDomain // ""' "$PACKAGE")"
  if [ -z "$want" ]; then
    want="$(yq -r '.networking.clusterDomain' "$REPO_ROOT/packages/core/platform/values.yaml")"
  fi
  dns="$(yq -r '.kubeadmConfigPatches[] | from_yaml | select(.kind == "ClusterConfiguration") | .networking.dnsDomain' "$KIND_CONFIG")"
  kubelet="$(yq -r '.kubeadmConfigPatches[] | from_yaml | select(.kind == "KubeletConfiguration") | .clusterDomain' "$KIND_CONFIG")"
  if [ "$dns" != "$want" ] || [ "$kubelet" != "$want" ]; then
    echo "platform clusterDomain=$want, kind dnsDomain=$dns, kubelet clusterDomain=$kubelet" >&2
    exit 1
  fi
}

@test "the workflow creates the cluster from the lane's kind config and runs the hosted install" {
  grep -Fq 'hack/e2e-isp-hosted-kind.yaml' "$WORKFLOW"
  grep -Fq 'install-cozystack-hosted' "$WORKFLOW"
}

@test "the workflow pins the kind binary by checksum and the node image by digest" {
  grep -Eq '^[[:space:]]+KIND_SHA256: "?[0-9a-f]{64}"?$' "$WORKFLOW"
  grep -Eq '^[[:space:]]+KIND_NODE_IMAGE: "?kindest/node:v[0-9.]+@sha256:[0-9a-f]{64}"?$' "$WORKFLOW"
  grep -Fq 'sha256sum --check' "$WORKFLOW"
}

# Runs the install suite's no-Cilium check against a stubbed kubectl. The copy
# drops the e2e- prefix so hack/cozytest.sh arms no cluster captures, which
# would otherwise run the stub as if it were a cluster.
@test "the suite's no-Cilium check fails on any cilium.io CRD, not only CiliumNetworkPolicy" {
  tmp="$(mktemp -d)"
  mkdir -p "$tmp/bin"
  cp "$INSTALL" "$tmp/hosted.bats"
  printf '%s\n' \
    '#!/bin/sh' \
    '[ "$1 $2" = "get storageclass" ] && exit 1' \
    '[ "$1 $2" = "get crd" ] || exit 2' \
    'shift 2' \
    '[ -n "$FAKE_LIST_FAILS" ] && exit 1' \
    'case "$*" in' \
    '  -o\ jsonpath=*) for n in $FAKE_CRDS; do echo "${n#*.}"; done ;;' \
    '  -*) exit 2 ;;' \
    '  *) for n in $FAKE_CRDS; do [ "$n" = "$1" ] && exit 0; done; exit 1 ;;' \
    'esac' > "$tmp/bin/kubectl"
  chmod +x "$tmp/bin/kubectl"

  rc=0
  PATH="$tmp/bin:$PATH" FAKE_CRDS="packages.cozystack.io ciliumendpoints.cilium.io" COZY_REPORT_DIR="$tmp/report" COZYTEST_TRACE=0 \
    "$REPO_ROOT/hack/cozytest.sh" "$tmp/hosted.bats" "The cluster carries none" > "$tmp/partial.log" 2>&1 || rc=$?
  if [ "$rc" -eq 0 ]; then
    echo "the check passed with ciliumendpoints.cilium.io installed" >&2
    exit 1
  fi

  rc=0
  PATH="$tmp/bin:$PATH" FAKE_CRDS="" FAKE_LIST_FAILS=1 COZY_REPORT_DIR="$tmp/report" COZYTEST_TRACE=0 \
    "$REPO_ROOT/hack/cozytest.sh" "$tmp/hosted.bats" "The cluster carries none" > "$tmp/unreadable.log" 2>&1 || rc=$?
  if [ "$rc" -eq 0 ]; then
    echo "the check passed although the CRD list could not be read" >&2
    exit 1
  fi

  rc=0
  PATH="$tmp/bin:$PATH" FAKE_CRDS="packages.cozystack.io" COZY_REPORT_DIR="$tmp/report" COZYTEST_TRACE=0 \
    "$REPO_ROOT/hack/cozytest.sh" "$tmp/hosted.bats" "The cluster carries none" > "$tmp/clean.log" 2>&1 || rc=$?
  if [ "$rc" -ne 0 ] || ! grep -q "Test OK" "$tmp/clean.log"; then
    echo "the check did not pass on a cluster with no cilium.io CRD:" >&2
    cat "$tmp/clean.log" >&2
    exit 1
  fi
  rm -rf "$tmp"
}