#!/usr/bin/env bash set -u OCF_SUCCESS=0 OCF_ERR_GENERIC=1 OCF_NOT_RUNNING=7 OCF_RUNNING_PROMOTED=8 MC_PROXY_RC_TRANSPORT=10 MC_PROXY_RC_HARD_FAILURE=11 OCF_RESOURCE_INSTANCE=postgresql-ha OCF_RESKEY_container_runtime=podman logs=() exit_reason="" score="" cache_rc="" application_rc=0 application_calls=0 proxy_result_value="delegate|container|podman" # Load the real function under test first. Test doubles defined below then # override its external dependencies, including promotion-score helpers. source ocf/loxthelion/managed-container.d/common.sh ocf_log() { logs+=("$*") } ocf_exit_reason() { exit_reason="$*" } mc_proxy_monitor() { printf '%s\n' "${proxy_result_value}" return 0 } mc_proxy_cached_monitor() { return 1 } mc_proxy_monitor_cache_clear() { cache_rc="cleared" return 0 } mc_proxy_monitor_cache_write() { cache_rc="$1" return 0 } mc_proxy_legacy_shadow_monitor() { echo "ERROR: shadow monitor must not execute for delegation" >&2 return 99 } mc_application_monitor() { application_calls=$((application_calls + 1)) return "${application_rc}" } mc_promotion_score_set() { score="$1" return 0 } mc_promotion_score_from_monitor() { case "$1" in 0|8) score="healthy:$1" ;; *) score="-INFINITY" ;; esac return 0 } echo "===== PODMAN DELEGATION SUCCESS =====" application_rc=0 proxy_result_value="delegate|container|podman" cache_rc="" score="" application_calls=0 mc_promotion_monitor rc=$? [ "$rc" -eq 0 ] [ "$application_calls" -eq 1 ] [ "$cache_rc" = 0 ] [ "$score" = "healthy:0" ] echo "podman_success accepted" echo echo "===== PROMOTED DELEGATION =====" application_rc=8 proxy_result_value="delegate|container|podman" cache_rc="" score="" application_calls=0 mc_promotion_monitor rc=$? [ "$rc" -eq 8 ] [ "$application_calls" -eq 1 ] [ "$cache_rc" = 8 ] [ "$score" = "healthy:8" ] echo "podman_promoted accepted" echo echo "===== RUNTIME MISMATCH =====" application_rc=0 proxy_result_value="delegate|container|docker" cache_rc="" score="" application_calls=0 mc_promotion_monitor rc=$? [ "$rc" -eq 1 ] [ "$application_calls" -eq 0 ] [ "$cache_rc" = "cleared" ] [ "$score" = "-INFINITY" ] echo "runtime_mismatch rejected" echo echo "===== MALFORMED DELEGATION =====" proxy_result_value="delegate|container|podman|extra" cache_rc="" score="" application_calls=0 mc_promotion_monitor rc=$? [ "$rc" -eq 1 ] [ "$application_calls" -eq 0 ] [ "$cache_rc" = "cleared" ] [ "$score" = "-INFINITY" ] echo "malformed_delegation rejected" echo echo "MONITOR_DELEGATION_SHELL_TEST_PASS=1"