asteroid/docs/TESTING.org

6.5 KiB

Asteroid Radio Testing Guide

Overview

This document describes the automated testing system for Asteroid Radio.

Note on Package Managers: Examples use apt (Debian/Ubuntu). Replace with your distribution's package manager (dnf, pacman, zypper, apk, etc.).

Test Script

The test-server.sh script provides comprehensive testing of all server endpoints and functionality.

Features

  • Tests all API endpoints (15 endpoints)
  • Tests HTML page rendering (5 pages)
  • Tests static file serving
  • Validates JSON response format
  • Color-coded output for easy reading
  • Detailed pass/fail reporting
  • Verbose mode for debugging

Usage

Basic Usage

# Test local server (default: http://localhost:8080)
./test-server.sh

# Verbose mode (shows response details)
./test-server.sh -v

# Test remote server
./test-server.sh -u http://example.com

# Show help
./test-server.sh -h

Environment Variables

# Set base URL via environment
ASTEROID_URL=http://example.com ./test-server.sh

# Enable verbose mode
VERBOSE=1 ./test-server.sh

Test Categories

1. Server Status

  • Server accessibility check
  • API response format validation

2. Status Endpoints

  • /api/asteroid/status - Server status
  • /api/asteroid/auth-status - Authentication status
  • /api/asteroid/icecast-status - Icecast streaming status

3. Track Endpoints

  • /api/asteroid/tracks - Track listing
  • /api/asteroid/admin/tracks - Admin track listing

4. Player Control Endpoints

  • /api/asteroid/player/status - Player status
  • /api/asteroid/player/play - Play track
  • /api/asteroid/player/pause - Pause playback
  • /api/asteroid/player/stop - Stop playback
  • /api/asteroid/player/resume - Resume playback

5. Playlist Endpoints

  • /api/asteroid/playlists - Playlist listing
  • /api/asteroid/playlists/create - Create playlist
  • /api/asteroid/playlists/add-track - Add track to playlist
  • /api/asteroid/playlists/get - Get playlist details

6. Admin Endpoints

  • /api/asteroid/admin/tracks - Admin track listing
  • /api/asteroid/admin/scan-library - Library scan

7. HTML Pages

  • /asteroid/ - Front page
  • /asteroid/admin - Admin dashboard
  • /asteroid/player - Web player
  • /asteroid/profile - User profile
  • /asteroid/register - Registration page

8. Static Files

  • CSS files (/asteroid/static/*.css)
  • JavaScript files (/asteroid/static/js/*.js)

Example Output

╔═══════════════════════════════════════╗
║  Asteroid Radio Server Test Suite    ║
╔═══════════════════════════════════════╗

INFO: Testing server at: http://localhost:8080
INFO: Verbose mode: 0

========================================
Checking Server Status
========================================

TEST: Server is accessible
✓ PASS: Server is running at http://localhost:8080

========================================
Testing API Response Format
========================================

TEST: API returns JSON format
✓ PASS: API returns JSON (not S-expressions)

========================================
Testing Status Endpoints
========================================

TEST: Server status endpoint
✓ PASS: Server status endpoint - Response contains 'asteroid-radio'

TEST: Authentication status endpoint
✓ PASS: Authentication status endpoint - Response contains 'loggedIn'

...

========================================
Test Summary
========================================

Tests Run:    25
Tests Passed: 25
Tests Failed: 0

✓ All tests passed!

Exit Codes

  • 0 - All tests passed
  • 1 - One or more tests failed or server not accessible

Requirements

Required

  • bash - Shell script interpreter
  • curl - HTTP client for testing endpoints

Optional

  • jq - JSON processor for advanced JSON validation (recommended)

Install jq:

# Ubuntu/Debian
sudo apt install jq

# macOS
brew install jq

Integration with CI/CD

The test script can be integrated into continuous integration pipelines:

# Example GitHub Actions workflow
- name: Start Asteroid Server
  run: ./asteroid &
  
- name: Wait for server
  run: sleep 5

- name: Run tests
  run: ./test-server.sh

Extending the Tests

To add new tests, edit test-server.sh and add test functions:

test_my_new_feature() {
    print_header "Testing My New Feature"
    
    test_api_endpoint "/my-endpoint" \
        "My endpoint description" \
        "expected-field"
}

# Add to main() function
main() {
    # ... existing tests ...
    test_my_new_feature
    # ...
}

Troubleshooting

Server not accessible

  • Ensure server is running: ./asteroid
  • Check server is on correct port: 8080
  • Verify firewall settings

Tests failing

  • Run with verbose mode: ./test-server.sh -v
  • Check server logs for errors
  • Verify database is initialized
  • Ensure all dependencies are installed

JSON format issues

  • Verify JSON API format is configured in asteroid.lisp
  • Check define-api-format json is defined
  • Ensure *default-api-format* is set to "json"

Manual Testing Checklist

For features not covered by automated tests:

Authentication

  • Login with admin/asteroid123
  • Logout functionality
  • Session persistence
  • Protected pages redirect to login

Music Library

  • Scan library adds tracks
  • Track metadata displays correctly
  • Audio streaming works
  • Search and filter tracks

Playlists

  • Create new playlist
  • Add tracks to playlist
  • Load playlist
  • Delete playlist

Player

  • Play/pause/stop controls work
  • Track progress updates
  • Queue management
  • Volume control

Admin Features

  • View all tracks
  • Scan library
  • User management
  • System status monitoring

Performance Testing

For load testing and performance validation:

# Simple load test with Apache Bench
ab -n 1000 -c 10 http://localhost:8080/api/asteroid/tracks

# Or with wrk
wrk -t4 -c100 -d30s http://localhost:8080/api/asteroid/tracks

Security Testing

API Security Checklist

  • Authentication required for protected endpoints
  • Authorization checks for admin endpoints
  • SQL injection prevention
  • XSS protection in templates
  • CSRF token validation
  • Rate limiting on API endpoints