#!/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