Files
truenas/scripts/test_truenas_api_connectivity.sh

124 lines
3.5 KiB
Bash
Raw Normal View History

#!/bin/bash
#
# TrueNAS Scale API Connectivity Test
# Purpose: Validate network connectivity and API accessibility for TrueNAS collection script
# Target: 192.168.2.150
# Date: 2025-12-14
set -euo pipefail
TRUENAS_IP="192.168.2.150"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
LOG_FILE="/tmp/truenas_api_test_$(date '+%Y%m%d_%H%M%S').log"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() {
echo -e "${1}" | tee -a "${LOG_FILE}"
}
TESTS_PASSED=0
TESTS_FAILED=0
log "${BLUE}=========================================="
log "TrueNAS Scale API Connectivity Test"
log "=========================================="
log "${NC}Target: ${TRUENAS_IP}"
log "Date: ${TIMESTAMP}"
log ""
# TEST 1: Network Connectivity
log "${YELLOW}[TEST 1] Network Connectivity${NC}"
if ping -c 3 -W 5 "${TRUENAS_IP}" >> "${LOG_FILE}" 2>&1; then
log "${GREEN}✓ PASS: Host reachable${NC}"
((TESTS_PASSED++))
else
log "${RED}✗ FAIL: Host NOT reachable${NC}"
((TESTS_FAILED++))
exit 1
fi
log ""
# TEST 2: HTTP Port
log "${YELLOW}[TEST 2] HTTP Port (80)${NC}"
if timeout 5 bash -c "echo > /dev/tcp/${TRUENAS_IP}/80" 2>/dev/null; then
log "${GREEN}✓ PASS: Port 80 OPEN${NC}"
((TESTS_PASSED++))
HTTP_AVAILABLE=true
else
log "${RED}✗ FAIL: Port 80 CLOSED${NC}"
((TESTS_FAILED++))
HTTP_AVAILABLE=false
fi
log ""
# TEST 3: HTTPS Port
log "${YELLOW}[TEST 3] HTTPS Port (443)${NC}"
if timeout 5 bash -c "echo > /dev/tcp/${TRUENAS_IP}/443" 2>/dev/null; then
log "${GREEN}✓ PASS: Port 443 OPEN${NC}"
((TESTS_PASSED++))
HTTPS_AVAILABLE=true
else
log "${RED}✗ FAIL: Port 443 CLOSED${NC}"
((TESTS_FAILED++))
HTTPS_AVAILABLE=false
fi
log ""
# TEST 4: HTTP API
if [ "$HTTP_AVAILABLE" = true ]; then
log "${YELLOW}[TEST 4] HTTP API Endpoint${NC}"
HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" -m 10 "http://${TRUENAS_IP}/api/v2.0/system/version" 2>&1 || echo "000")
HTTP_CODE=$(echo "$HTTP_RESPONSE" | tail -n 1)
log "HTTP Status: ${HTTP_CODE}"
if [ "$HTTP_CODE" = "200" ]; then
log "${GREEN}✓ PASS: HTTP API accessible${NC}"
((TESTS_PASSED++))
elif [ "$HTTP_CODE" = "401" ] || [ "$HTTP_CODE" = "403" ]; then
log "${YELLOW}⚠ INFO: Authentication required${NC}"
((TESTS_PASSED++))
else
log "${RED}✗ FAIL: Unexpected status ${HTTP_CODE}${NC}"
((TESTS_FAILED++))
fi
fi
log ""
# TEST 5: HTTPS API
if [ "$HTTPS_AVAILABLE" = true ]; then
log "${YELLOW}[TEST 5] HTTPS API Endpoint${NC}"
HTTPS_RESPONSE=$(curl -s -k -w "\n%{http_code}" -m 10 "https://${TRUENAS_IP}/api/v2.0/system/version" 2>&1 || echo "000")
HTTPS_CODE=$(echo "$HTTPS_RESPONSE" | tail -n 1)
HTTPS_BODY=$(echo "$HTTPS_RESPONSE" | sed '$d')
log "HTTPS Status: ${HTTPS_CODE}"
log "Response: ${HTTPS_BODY}"
if [ "$HTTPS_CODE" = "200" ]; then
log "${GREEN}✓ PASS: HTTPS API accessible${NC}"
((TESTS_PASSED++))
elif [ "$HTTPS_CODE" = "401" ] || [ "$HTTPS_CODE" = "403" ]; then
log "${YELLOW}⚠ INFO: Authentication required${NC}"
((TESTS_PASSED++))
else
log "${RED}✗ FAIL: Unexpected status ${HTTPS_CODE}${NC}"
((TESTS_FAILED++))
fi
fi
log ""
log "${BLUE}=========================================="
log "SUMMARY"
log "=========================================="
log "${NC}Passed: ${GREEN}${TESTS_PASSED}${NC}"
log "Failed: ${RED}${TESTS_FAILED}${NC}"
log ""
log "Log: ${LOG_FILE}"
exit $TESTS_FAILED