#!/bin/bash # # Test fresh v4 installation from scratch # Tests the most common user scenario: clean install using curl | bash # set -e CONTAINER_NAME="nupst-test-fresh-v4" echo "================================================" echo " NUPST Fresh v4 Installation Test" echo "================================================" echo "" # Check if container already exists if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then echo "⚠️ Container ${CONTAINER_NAME} already exists" read -p "Remove and recreate? (y/N): " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "→ Stopping and removing existing container..." docker stop ${CONTAINER_NAME} 2>/dev/null || true docker rm ${CONTAINER_NAME} 2>/dev/null || true else echo "Exiting. Remove manually with: docker rm -f ${CONTAINER_NAME}" exit 1 fi fi echo "→ Creating Docker container with systemd..." docker run -d \ --name ${CONTAINER_NAME} \ --privileged \ --cgroupns=host \ -v /sys/fs/cgroup:/sys/fs/cgroup:rw \ ubuntu:22.04 \ /bin/bash -c "apt-get update && apt-get install -y systemd systemd-sysv && exec /sbin/init" echo "→ Waiting for systemd to initialize..." sleep 10 echo "→ Waiting for dpkg lock to be released..." docker exec ${CONTAINER_NAME} bash -c " while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do echo ' Waiting for dpkg lock...' sleep 2 done echo ' dpkg lock released' " echo "→ Installing prerequisites (curl)..." docker exec ${CONTAINER_NAME} bash -c " apt-get update -qq apt-get install -y -qq curl " echo "" echo "→ Installing NUPST v4 using curl | bash..." echo " Command: curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | bash -s -- -y" echo "" docker exec ${CONTAINER_NAME} bash -c " curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | bash -s -- -y " echo "" echo "================================================" echo " Verifying Installation" echo "================================================" echo "" echo "→ Checking binary location..." docker exec ${CONTAINER_NAME} bash -c " if [ -f /opt/nupst/nupst ]; then echo ' ✓ Binary exists at /opt/nupst/nupst' ls -lh /opt/nupst/nupst else echo ' ✗ Binary not found at /opt/nupst/nupst' exit 1 fi " echo "" echo "→ Checking symlink..." docker exec ${CONTAINER_NAME} bash -c " if [ -L /usr/local/bin/nupst ]; then echo ' ✓ Symlink exists at /usr/local/bin/nupst' ls -lh /usr/local/bin/nupst elif [ -L /usr/bin/nupst ]; then echo ' ✓ Symlink exists at /usr/bin/nupst' ls -lh /usr/bin/nupst else echo ' ✗ Symlink not found in /usr/local/bin or /usr/bin' exit 1 fi " echo "" echo "→ Checking PATH integration..." docker exec ${CONTAINER_NAME} bash -c " NUPST_PATH=\$(which nupst 2>/dev/null) if [ -n \"\$NUPST_PATH\" ]; then echo ' ✓ nupst found in PATH at: '\$NUPST_PATH else echo ' ✗ nupst not found in PATH' echo ' PATH contents:' echo \$PATH exit 1 fi " echo "" echo "→ Testing nupst command execution..." docker exec ${CONTAINER_NAME} nupst --version echo "" echo "→ Creating minimal config for service test..." docker exec ${CONTAINER_NAME} bash -c " mkdir -p /etc/nupst cat > /etc/nupst/config.json << 'EOF' { \"version\": \"4.0\", \"upsDevices\": [], \"groups\": [], \"checkInterval\": 30000 } EOF echo ' ✓ Minimal config created' " echo "" echo "→ Testing service creation..." docker exec ${CONTAINER_NAME} bash -c " echo ' Running: nupst service enable' nupst service enable if [ -f /etc/systemd/system/nupst.service ]; then echo ' ✓ Service file created successfully' else echo ' ✗ Service file creation failed' exit 1 fi " echo "" echo "→ Checking if service is enabled..." docker exec ${CONTAINER_NAME} systemctl is-enabled nupst echo "" echo "================================================" echo " ✓ Fresh v4 Installation Test Complete" echo "================================================" echo "" echo "Installation verified successfully:" echo " • Binary installed to /opt/nupst/nupst" echo " • Symlink created for global access" echo " • nupst command available in PATH" echo " • Command executes correctly" echo " • Systemd service file created" echo "" echo "Useful commands:" echo " docker exec -it ${CONTAINER_NAME} bash" echo " docker exec ${CONTAINER_NAME} nupst --help" echo " docker exec ${CONTAINER_NAME} nupst service status" echo " docker stop ${CONTAINER_NAME}" echo " docker rm -f ${CONTAINER_NAME}" echo ""