04_Testing_Guide - nzbgetcom/Extension-RemoveSamples GitHub Wiki

Testing Guide

Comprehensive testing procedures to verify RemoveSamples functionality across different platforms and scenarios.

🎯 Overview

Testing RemoveSamples ensures it works correctly in your environment before processing real downloads. This guide provides platform-specific testing procedures that create controlled test scenarios to verify detection logic, file removal, and system compatibility.

Why test RemoveSamples?

  • βœ… Verify functionality before trusting with important downloads
  • βœ… Understand detection behavior for your content types
  • βœ… Troubleshoot configuration issues safely
  • βœ… Validate platform compatibility (Docker, Unraid, etc.)
  • βœ… Build confidence in the extension's safety

πŸš€ Quick Test (All Platforms)

Prerequisites

  • RemoveSamples installed and configured
  • Access to NZBGet scripts directory
  • Basic command line knowledge
  • 10 minutes of time

Universal Test Steps

1. Create test directory:

# Navigate to a safe location (NOT in active downloads)
cd /tmp
mkdir -p RemoveSamples-Test
cd RemoveSamples-Test

2. Create test files:

# Legitimate files (should be preserved)
echo "large movie content" > Movie.2023.1080p.mkv
echo "soundtrack content" > soundtrack.mp3

# Sample files (should be removed)
echo "sample content" > Movie.2023.sample.mkv
echo "sample audio" > 30sec_sample.mp3

# Sample directory (should be removed)
mkdir samples
echo "sample clip" > samples/preview.mkv

3. Set permissions (if needed):

chmod 644 *.mkv *.mp3
chmod -R 755 samples/

4. Run manual test:

# Set environment variables
export NZBPP_DIRECTORY="$(pwd)"
export NZBPP_STATUS="SUCCESS"
export NZBPP_NZBNAME="RemoveSamples-Test"
export NZBPO_REMOVEDIRECTORIES="Yes"
export NZBPO_REMOVEFILES="Yes"
export NZBPO_DEBUG="Yes"
export NZBPO_VIDEOSIZETHRESHOLDMB="150"
export NZBPO_AUDIOSIZETHRESHOLDMB="2"
export NZBPO_VIDEOEXTS=".mkv,.mp4,.avi"
export NZBPO_AUDIOEXTS=".mp3,.flac,.aac"

# Run RemoveSamples (adjust path as needed)
python3 /path/to/nzbget/scripts/RemoveSamples/main.py

5. Check results:

ls -la
# Should show: Movie.2023.1080p.mkv and soundtrack.mp3
# Should NOT show: sample files or samples/ directory

6. Cleanup:

cd .. && rm -rf RemoveSamples-Test

🐧 Linux Testing

Standard Linux Installation

Prerequisites:

  • NZBGet installed via package manager or manual installation
  • Python 3.8+ installed
  • RemoveSamples extension installed

Detailed Test Procedure:

Step 1: Locate NZBGet Directory

# Find NZBGet scripts directory
find /opt /usr /var -name "scripts" -path "*/nzbget/*" 2>/dev/null
# Common locations:
# /opt/nzbget/scripts/
# /usr/share/nzbget/scripts/
# /var/lib/nzbget/scripts/

Step 2: Create Comprehensive Test

# Create test directory in safe location
TEST_DIR="/tmp/RemoveSamples-Linux-Test"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"

# Create video test files with realistic sizes
dd if=/dev/zero of="Movie.Name.2023.1080p.mkv" bs=1M count=200  # 200MB
dd if=/dev/zero of="Movie.Name.2023.sample.mkv" bs=1M count=45   # 45MB
dd if=/dev/zero of="sample.mp4" bs=1M count=30                   # 30MB
dd if=/dev/zero of="small_video.avi" bs=1M count=25              # 25MB (size-based)

# Create audio test files
dd if=/dev/zero of="soundtrack.mp3" bs=1K count=5000             # 5MB
dd if=/dev/zero of="sample_track.mp3" bs=1K count=1500           # 1.5MB
dd if=/dev/zero of="preview.mp3" bs=1K count=500                 # 0.5MB (size-based)

# Create directory scenarios
mkdir -p "samples"
dd if=/dev/zero of="samples/clip1.mkv" bs=1M count=20
dd if=/dev/zero of="samples/clip2.mp4" bs=1M count=15

mkdir -p "SAMPLE"
dd if=/dev/zero of="SAMPLE/preview.avi" bs=1M count=10

mkdir -p "Bonus_Features"  # Should be preserved
dd if=/dev/zero of="Bonus_Features/making_of.mkv" bs=1M count=180

# Show test structure
echo "=== Test Structure Created ==="
find . -type f -exec ls -lh {} \;

Step 3: Run Test

# Set all required environment variables
export NZBPP_DIRECTORY="$TEST_DIR"
export NZBPP_STATUS="SUCCESS"
export NZBPP_NZBNAME="Linux-Test-Movie-2023"
export NZBPO_REMOVEDIRECTORIES="Yes"
export NZBPO_REMOVEFILES="Yes"
export NZBPO_DEBUG="Yes"
export NZBPO_VIDEOSIZETHRESHOLDMB="150"
export NZBPO_VIDEOEXTS=".mkv,.mp4,.avi,.mov,.wmv,.flv,.webm,.ts,.m4v,.vob"
export NZBPO_AUDIOSIZETHRESHOLDMB="2"
export NZBPO_AUDIOEXTS=".wav,.aiff,.mp3,.flac,.m4a,.ogg,.aac,.alac,.ape,.opus,.wma"

# Execute RemoveSamples (adjust path)
echo "=== Running RemoveSamples ==="
python3 /opt/nzbget/scripts/RemoveSamples/main.py

# Check results
echo "=== Results ==="
find . -type f -exec ls -lh {} \;

Step 4: Verify Results

Expected to remain:

  • Movie.Name.2023.1080p.mkv (200MB - above threshold)
  • soundtrack.mp3 (5MB - above threshold, no pattern)
  • Bonus_Features/making_of.mkv (180MB - legitimate content)

Expected to be removed:

  • Movie.Name.2023.sample.mkv (pattern match)
  • sample.mp4 (pattern match)
  • small_video.avi (size-based removal)
  • sample_track.mp3 (pattern match)
  • preview.mp3 (size-based removal)
  • samples/ directory and contents
  • SAMPLE/ directory and contents

Ubuntu/Debian Specific

# Install dependencies if needed
sudo apt update
sudo apt install python3 python3-pip

# Check Python version
python3 --version  # Should be 3.8+

# Test with systemd NZBGet
sudo systemctl status nzbget

CentOS/RHEL Specific

# Install dependencies if needed
sudo yum install python3 python3-pip

# Or for newer versions
sudo dnf install python3 python3-pip

# Check Python version
python3 --version

🐳 Docker Testing

General Docker Testing

Prerequisites:

  • Docker container running NZBGet
  • Access to container terminal
  • Volume mounts for scripts and downloads

Method 1: Inside Container Testing

# Access your NZBGet container
docker exec -it nzbget bash

# Navigate to container temp directory
cd /tmp
mkdir RemoveSamples-Docker-Test
cd RemoveSamples-Docker-Test

# Create test files (use container-appropriate sizes)
echo "Movie content placeholder" > Movie.2023.1080p.mkv
echo "Sample content" > Movie.2023.sample.mkv
echo "Sample clip" > sample.mp4
echo "Audio content" > soundtrack.mp3
echo "Sample audio" > 30sec_sample.mp3

# Create sample directory
mkdir samples
echo "Preview clip" > samples/preview.mkv

# Set environment variables for container paths
export NZBPP_DIRECTORY="/tmp/RemoveSamples-Docker-Test"
export NZBPP_STATUS="SUCCESS"
export NZBPP_NZBNAME="Docker-Test-Movie"
export NZBPO_REMOVEDIRECTORIES="Yes"
export NZBPO_REMOVEFILES="Yes"
export NZBPO_DEBUG="Yes"
export NZBPO_VIDEOSIZETHRESHOLDMB="1"    # Lower for small test files
export NZBPO_AUDIOSIZETHRESHOLDMB="1"    # Lower for small test files
export NZBPO_VIDEOEXTS=".mkv,.mp4,.avi"
export NZBPO_AUDIOEXTS=".mp3,.flac,.aac"

# Run RemoveSamples with container paths
python3 /opt/nzbget/scripts/RemoveSamples/main.py

# Check results
ls -la

Method 2: Host-Based Testing

# Create test on host system
TEST_DIR="/path/to/docker/volumes/downloads/test"
mkdir -p "$TEST_DIR"

# Use docker exec to run commands in container context
docker exec nzbget mkdir -p /downloads/test

# Copy test files or create them via docker exec
docker exec nzbget bash -c 'echo "content" > /downloads/test/sample.mkv'

# Run test via docker exec
docker exec -e NZBPP_DIRECTORY="/downloads/test" \
           -e NZBPP_STATUS="SUCCESS" \
           -e NZBPO_DEBUG="Yes" \
           nzbget python3 /opt/nzbget/scripts/RemoveSamples/main.py

LinuxServer NZBGet Container

# Access LSIO container
docker exec -it nzbget bash

# Container-specific paths
SCRIPTS_DIR="/config/scripts/RemoveSamples"
DOWNLOADS_DIR="/downloads"

# Check if RemoveSamples is installed
ls -la $SCRIPTS_DIR/

# Create test in downloads directory
mkdir -p $DOWNLOADS_DIR/RemoveSamples-Test
cd $DOWNLOADS_DIR/RemoveSamples-Test

# Use realistic container testing
# (follow general Docker testing steps above)

Official NZBGet Container

# Access official container
docker exec -it nzbget bash

# Container-specific paths
SCRIPTS_DIR="/opt/nzbget/scripts/RemoveSamples"
DOWNLOADS_DIR="/downloads"

# Check Python availability
python3 --version

# If Python missing, may need to install
# (official container may require manual Python installation)

Docker Compose Testing

# Add to your docker-compose.yml for testing
version: '3.8'
services:
  nzbget:
    image: linuxserver/nzbget:latest
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./config:/config
      - ./downloads:/downloads
      - ./test-scripts:/test-scripts  # Mount test directory
    command: |
      bash -c "
        # Wait for NZBGet to start
        sleep 10
        # Run test script
        /test-scripts/run-removesamples-test.sh
      "

πŸ“¦ Unraid Testing

Unraid Docker Container Testing

Prerequisites:

  • Unraid server with NZBGet docker container
  • SSH access to Unraid or use Unraid terminal
  • RemoveSamples installed in NZBGet appdata

Step 1: Access Unraid System

# SSH to Unraid server
ssh root@unraid-server-ip

# Or use Unraid web terminal
# Main β†’ Terminal

Step 2: Navigate to NZBGet Appdata

# Standard Unraid NZBGet paths
cd /mnt/user/appdata/nzbget/

# Verify RemoveSamples installation
ls -la scripts/RemoveSamples/
# Should show: main.py and manifest.json

Step 3: Create Test in Downloads Directory

# Create test directory in downloads area
TEST_DIR="/mnt/user/downloads/nzbget/RemoveSamples-Unraid-Test"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"

# Create test files with proper Unraid permissions
echo "Movie content" > Movie.2023.1080p.mkv
echo "Sample content" > Movie.2023.sample.mkv
echo "Sample clip" > sample.mp4
echo "Audio content" > soundtrack.mp3
echo "Sample audio" > sample_track.mp3

# Create sample directory
mkdir samples
echo "Preview content" > samples/preview.mkv
mkdir SAMPLE
echo "Sample content" > SAMPLE/clip.avi

# Set Unraid-appropriate permissions
chown -R nobody:users *
chmod 644 *.mkv *.mp4 *.mp3
chmod -R 755 samples/ SAMPLE/

Step 4: Run Test via Docker Exec

# Get NZBGet container name
docker ps | grep nzbget

# Execute test in container context
docker exec -it nzbget bash -c "
export NZBPP_DIRECTORY='/downloads/RemoveSamples-Unraid-Test'
export NZBPP_STATUS='SUCCESS'
export NZBPP_NZBNAME='Unraid-Test-Movie'
export NZBPO_REMOVEDIRECTORIES='Yes'
export NZBPO_REMOVEFILES='Yes'
export NZBPO_DEBUG='Yes'
export NZBPO_VIDEOSIZETHRESHOLDMB='1'
export NZBPO_AUDIOSIZETHRESHOLDMB='1'
export NZBPO_VIDEOEXTS='.mkv,.mp4,.avi'
export NZBPO_AUDIOEXTS='.mp3,.flac,.aac'
python3 /opt/nzbget/scripts/RemoveSamples/main.py
"

# Check results on host
ls -la "$TEST_DIR"

Step 5: Unraid-Specific Verification

# Verify permissions after test
ls -la "$TEST_DIR"
# Files should still be owned by nobody:users

# Check container logs
docker logs nzbget --tail 50 | grep -i removesamples

# Verify NZBGet sees the extension
# Check NZBGet web interface: Settings β†’ Extension Manager

Unraid Community Applications NZBGet

# Standard CA NZBGet container settings
Container: nzbget
Repository: linuxserver/nzbget
Config Path: /mnt/user/appdata/nzbget/
Downloads: /mnt/user/downloads/nzbget/
Scripts: /mnt/user/appdata/nzbget/scripts/

# User settings typically
PUID: 99
PGID: 100
User: nobody
Group: users

πŸͺŸ Windows Testing

Windows Native NZBGet

Prerequisites:

  • NZBGet installed on Windows
  • Python 3.8+ installed
  • RemoveSamples extension installed
  • PowerShell or Command Prompt access

Step 1: Locate NZBGet Installation

:: Common NZBGet locations
dir "C:\Program Files\NZBGet"
dir "C:\Program Files (x86)\NZBGet"
dir "%PROGRAMFILES%\NZBGet"

:: Check for scripts directory
dir "C:\Program Files\NZBGet\scripts\RemoveSamples"

Step 2: Create Test Directory

:: Create test directory
mkdir C:\Temp\RemoveSamples-Windows-Test
cd C:\Temp\RemoveSamples-Windows-Test

:: Create test files
echo Movie content > Movie.2023.1080p.mkv
echo Sample content > Movie.2023.sample.mkv
echo Sample clip > sample.mp4
echo Audio content > soundtrack.mp3
echo Sample audio > sample_track.mp3

:: Create sample directory
mkdir samples
echo Preview content > samples\preview.mkv

Step 3: Set Environment Variables

:: Set required environment variables
set NZBPP_DIRECTORY=C:\Temp\RemoveSamples-Windows-Test
set NZBPP_STATUS=SUCCESS
set NZBPP_NZBNAME=Windows-Test-Movie
set NZBPO_REMOVEDIRECTORIES=Yes
set NZBPO_REMOVEFILES=Yes
set NZBPO_DEBUG=Yes
set NZBPO_VIDEOSIZETHRESHOLDMB=1
set NZBPO_AUDIOSIZETHRESHOLDMB=1
set NZBPO_VIDEOEXTS=.mkv,.mp4,.avi
set NZBPO_AUDIOEXTS=.mp3,.flac,.aac

Step 4: Run Test

:: Run RemoveSamples (adjust path as needed)
python "C:\Program Files\NZBGet\scripts\RemoveSamples\main.py"

:: Check results
dir

PowerShell Testing Script

# PowerShell automated test script
$TestDir = "C:\Temp\RemoveSamples-PS-Test"
$ScriptPath = "C:\Program Files\NZBGet\scripts\RemoveSamples\main.py"

# Create test directory
New-Item -ItemType Directory -Path $TestDir -Force
Set-Location $TestDir

# Create test files
"Movie content" | Out-File "Movie.2023.1080p.mkv"
"Sample content" | Out-File "Movie.2023.sample.mkv"
"Sample clip" | Out-File "sample.mp4"
"Audio content" | Out-File "soundtrack.mp3"
"Sample audio" | Out-File "sample_track.mp3"

# Create sample directory
New-Item -ItemType Directory -Path "samples" -Force
"Preview content" | Out-File "samples\preview.mkv"

# Set environment variables
$env:NZBPP_DIRECTORY = $TestDir
$env:NZBPP_STATUS = "SUCCESS"
$env:NZBPP_NZBNAME = "PowerShell-Test-Movie"
$env:NZBPO_REMOVEDIRECTORIES = "Yes"
$env:NZBPO_REMOVEFILES = "Yes"
$env:NZBPO_DEBUG = "Yes"
$env:NZBPO_VIDEOSIZETHRESHOLDMB = "1"
$env:NZBPO_AUDIOSIZETHRESHOLDMB = "1"
$env:NZBPO_VIDEOEXTS = ".mkv,.mp4,.avi"
$env:NZBPO_AUDIOEXTS = ".mp3,.flac,.aac"

# Run test
Write-Host "Running RemoveSamples test..."
python $ScriptPath

# Show results
Write-Host "Test results:"
Get-ChildItem -Recurse

🍎 macOS Testing

macOS Native NZBGet

Prerequisites:

  • NZBGet installed via Homebrew or manual installation
  • Python 3.8+ (usually pre-installed or via Homebrew)
  • RemoveSamples extension installed

Step 1: Locate NZBGet Installation

# Common macOS NZBGet locations
ls -la /usr/local/share/nzbget/scripts/
ls -la /opt/homebrew/share/nzbget/scripts/
ls -la ~/Applications/NZBGet/scripts/

# If installed via Homebrew
brew --prefix nzbget

Step 2: Create Test Directory

# Create test directory
TEST_DIR="/tmp/RemoveSamples-macOS-Test"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"

# Create test files
echo "Movie content" > Movie.2023.1080p.mkv
echo "Sample content" > Movie.2023.sample.mkv
echo "Sample clip" > sample.mp4
echo "Audio content" > soundtrack.mp3
echo "Sample audio" > sample_track.mp3

# Create sample directory
mkdir samples
echo "Preview content" > samples/preview.mkv

Step 3: Run Test

# Set environment variables
export NZBPP_DIRECTORY="$TEST_DIR"
export NZBPP_STATUS="SUCCESS"
export NZBPP_NZBNAME="macOS-Test-Movie"
export NZBPO_REMOVEDIRECTORIES="Yes"
export NZBPO_REMOVEFILES="Yes"
export NZBPO_DEBUG="Yes"
export NZBPO_VIDEOSIZETHRESHOLDMB="1"
export NZBPO_AUDIOSIZETHRESHOLDMB="1"
export NZBPO_VIDEOEXTS=".mkv,.mp4,.avi"
export NZBPO_AUDIOEXTS=".mp3,.flac,.aac"

# Run RemoveSamples (adjust path as needed)
python3 /usr/local/share/nzbget/scripts/RemoveSamples/main.py

# Check results
ls -la

πŸ” Advanced Testing Scenarios

Scenario 1: Edge Cases Testing

# Create files with tricky names
echo "content" > "Movie.Sample.Title.2023.mkv"      # "Sample" in title
echo "content" > "resample.mkv"                      # Contains "sample" but different word
echo "content" > "sampling_rate.wav"                 # Contains "sample" but different context
echo "content" > "SAMPLE.mkv"                        # All caps
echo "content" > "Ρ„Π°ΠΉΠ».sample.mkv"                   # Unicode characters
echo "content" > "movie with spaces.sample.mkv"      # Spaces in filename

Scenario 2: Size Threshold Testing

# Test files around thresholds
dd if=/dev/zero of="exactly_150MB.mkv" bs=1M count=150    # Exactly at threshold
dd if=/dev/zero of="just_over_150MB.mkv" bs=1M count=151  # Just over
dd if=/dev/zero of="just_under_150MB.mkv" bs=1M count=149 # Just under

Scenario 3: Directory Structure Testing

# Complex directory structures
mkdir -p "Movie.2023/Bonus/samples"                      # Nested samples
mkdir -p "Movie.2023/SAMPLE_FOOTAGE"                     # Sample in directory name
mkdir -p "Movie.2023/Behind_The_Scenes"                  # Legitimate directory
mkdir -p "Movie.2023/samples/more_samples"               # Deeply nested samples

Scenario 4: Mixed Content Testing

# Directory with mixed content
mkdir mixed_content
echo "legitimate" > mixed_content/movie.mkv
echo "sample" > mixed_content/sample.mkv
echo "more legitimate" > mixed_content/behind_scenes.mkv

Scenario 5: Permission Testing

# Test with different permissions
echo "content" > readonly_sample.mkv
chmod 444 readonly_sample.mkv                            # Read-only file

mkdir readonly_samples
echo "content" > readonly_samples/clip.mkv
chmod -R 555 readonly_samples                            # Read-only directory

πŸ“Š Understanding Test Results

Expected Behavior Matrix

File Type Pattern Match Size Check Expected Result
Video with "sample" pattern βœ… Yes Any size REMOVED
Video without pattern ❌ No Below threshold PRESERVED
Video without pattern ❌ No Above threshold PRESERVED
Audio with "sample" pattern βœ… Yes Any size REMOVED
Audio without pattern ❌ No Below threshold PRESERVED
Directory with "sample" pattern βœ… Yes N/A REMOVED
Directory without pattern ❌ No N/A PRESERVED

Debug Output Interpretation

[DEBUG] RemoveSamples: Checking file: movie.sample.mkv
[DEBUG] RemoveSamples: Pattern match: 'sample' found with word boundary
[DEBUG] RemoveSamples: File extension: .mkv is video file
[DEBUG] RemoveSamples: Size check: 45MB < 150MB threshold
[INFO] RemoveSamples: Removing sample file: movie.sample.mkv

What this means:

  • βœ… Pattern detected: File contains "sample" pattern
  • βœ… Video file confirmed: Extension matches video list
  • βœ… Below threshold: File size under limit
  • βœ… Action taken: File removed

Common Test Results

βœ… Successful test indicators:

  • Sample files and directories removed
  • Legitimate content preserved
  • Debug logs show correct detection logic
  • No errors in execution

❌ Issues to investigate:

  • Legitimate files removed (thresholds too high)
  • Sample files not removed (patterns not matching)
  • Permission errors during removal
  • Python execution errors

🚨 Troubleshooting Test Issues

Issue: Python Not Found

# Check Python installation
python3 --version
which python3

# Alternative Python commands to try
python --version
/usr/bin/python3 --version

Issue: Permission Denied

# Check file permissions
ls -la /path/to/scripts/RemoveSamples/main.py

# Fix permissions
chmod 755 /path/to/scripts/RemoveSamples/main.py

Issue: Module Import Errors

# Test basic Python functionality
python3 -c "import os, sys, json, re; print('Python modules OK')"

Issue: Files Not Removed

Check configuration:

  • Remove Files: Yes
  • Remove Directories: Yes
  • Appropriate thresholds for test file sizes
  • Debug mode enabled to see detection logic

Issue: Container Path Problems

# Verify container paths match host paths
docker exec container ls -la /downloads/test/
ls -la /host/path/to/downloads/test/

Issue: Environment Variables Not Set

# Verify all required variables
env | grep NZBP

πŸ“‹ Test Checklist

Pre-Test Checklist

  • RemoveSamples installed and visible in Extension Manager
  • Python 3.8+ available and working
  • Test directory created in safe location
  • Backup of important data (if testing near real downloads)

Test Execution Checklist

  • Test files created with appropriate sizes
  • Environment variables set correctly
  • RemoveSamples executed successfully
  • Results match expectations
  • Debug logs reviewed (if enabled)

Post-Test Checklist

  • Test directory cleaned up
  • Results documented
  • Any issues identified and addressed
  • Configuration adjusted if needed

🎯 Test Automation Script

Complete Test Script (Linux/macOS)

#!/bin/bash
# RemoveSamples Automated Test Script
# Usage: ./test-removesamples.sh [scripts-path]

set -e  # Exit on error

SCRIPTS_PATH="${1:-/opt/nzbget/scripts}"
TEST_DIR="/tmp/RemoveSamples-Auto-Test-$(date +%s)"

echo "=== RemoveSamples Automated Test ==="
echo "Scripts path: $SCRIPTS_PATH"
echo "Test directory: $TEST_DIR"

# Create test environment
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"

# Create test files
echo "Creating test files..."
echo "movie content" > "Movie.2023.1080p.mkv"      # Should remain
echo "sample content" > "Movie.2023.sample.mkv"    # Should be removed
echo "sample clip" > "sample.mp4"                  # Should be removed
echo "audio content" > "soundtrack.mp3"            # Should remain
echo "sample audio" > "sample_track.mp3"           # Should be removed

mkdir samples                                       # Should be removed
echo "clip content" > "samples/preview.mkv"

mkdir "Bonus_Features"                              # Should remain
echo "bonus content" > "Bonus_Features/extras.mkv"

echo "Test files created:"
find . -type f -exec ls -lh {} \;

# Set environment variables
export NZBPP_DIRECTORY="$TEST_DIR"
export NZBPP_STATUS="SUCCESS"
export NZBPP_NZBNAME="Automated-Test-Movie"
export NZBPO_REMOVEDIRECTORIES="Yes"
export NZBPO_REMOVEFILES="Yes"
export NZBPO_DEBUG="Yes"
export NZBPO_VIDEOSIZETHRESHOLDMB="1"    # Low threshold for small test files
export NZBPO_AUDIOSIZETHRESHOLDMB="1"    # Low threshold for small test files
export NZBPO_VIDEOEXTS=".mkv,.mp4,.avi"
export NZBPO_AUDIOEXTS=".mp3,.flac,.aac"

# Run RemoveSamples
echo "Running RemoveSamples..."
python3 "$SCRIPTS_PATH/RemoveSamples/main.py"

# Check results
echo "=== Test Results ==="
REMAINING_FILES=$(find . -type f | wc -l)
echo "Files remaining: $REMAINING_FILES"
find . -type f -exec ls -lh {} \;

# Validate results
EXPECTED_FILES=("Movie.2023.1080p.mkv" "soundtrack.mp3" "Bonus_Features/extras.mkv")
PASS=true

for expected in "${EXPECTED_FILES[@]}"; do
    if [ ! -f "$expected" ](/nzbgetcom/Extension-RemoveSamples/wiki/-!--f-"$expected"-); then
        echo "❌ FAIL: Expected file missing: $expected"
        PASS=false
    else
        echo "βœ… PASS: Expected file present: $expected"
    fi
done

UNEXPECTED_FILES=("Movie.2023.sample.mkv" "sample.mp4" "sample_track.mp3" "samples/preview.mkv")
for unexpected in "${UNEXPECTED_FILES[@]}"; do
    if [ -f "$unexpected" ](/nzbgetcom/Extension-RemoveSamples/wiki/--f-"$unexpected"-); then
        echo "❌ FAIL: Unexpected file present: $unexpected"
        PASS=false
    else
        echo "βœ… PASS: Unexpected file removed: $unexpected"
    fi
done

# Cleanup
cd /
rm -rf "$TEST_DIR"

# Final result
if [ "$PASS" == "true" ](/nzbgetcom/Extension-RemoveSamples/wiki/-"$PASS"-==-"true"-); then
    echo "πŸŽ‰ TEST PASSED: RemoveSamples is working correctly!"
    exit 0
else
    echo "❌ TEST FAILED: RemoveSamples did not behave as expected!"
    exit 1
fi

Windows PowerShell Test Script

# RemoveSamples Automated Test Script for Windows
# Usage: .\Test-RemoveSamples.ps1 -ScriptsPath "C:\Program Files\NZBGet\scripts"

param(
    [Parameter(Mandatory=$false)]
    [string]$ScriptsPath = "C:\Program Files\NZBGet\scripts"
)

$TestDir = "C:\Temp\RemoveSamples-Auto-Test-$(Get-Date -Format 'yyyyMMddHHmmss')"

Write-Host "=== RemoveSamples Automated Test ===" -ForegroundColor Green
Write-Host "Scripts path: $ScriptsPath"
Write-Host "Test directory: $TestDir"

# Create test environment
New-Item -ItemType Directory -Path $TestDir -Force | Out-Null
Set-Location $TestDir

# Create test files
Write-Host "Creating test files..."
"movie content" | Out-File "Movie.2023.1080p.mkv" -Encoding UTF8
"sample content" | Out-File "Movie.2023.sample.mkv" -Encoding UTF8
"sample clip" | Out-File "sample.mp4" -Encoding UTF8
"audio content" | Out-File "soundtrack.mp3" -Encoding UTF8
"sample audio" | Out-File "sample_track.mp3" -Encoding UTF8

New-Item -ItemType Directory -Path "samples" -Force | Out-Null
"clip content" | Out-File "samples\preview.mkv" -Encoding UTF8

New-Item -ItemType Directory -Path "Bonus_Features" -Force | Out-Null
"bonus content" | Out-File "Bonus_Features\extras.mkv" -Encoding UTF8

Write-Host "Test files created:"
Get-ChildItem -Recurse | Format-Table Name, Length

# Set environment variables
$env:NZBPP_DIRECTORY = $TestDir
$env:NZBPP_STATUS = "SUCCESS"
$env:NZBPP_NZBNAME = "Automated-Test-Movie"
$env:NZBPO_REMOVEDIRECTORIES = "Yes"
$env:NZBPO_REMOVEFILES = "Yes"
$env:NZBPO_DEBUG = "Yes"
$env:NZBPO_VIDEOSIZETHRESHOLDMB = "1"
$env:NZBPO_AUDIOSIZETHRESHOLDMB = "1"
$env:NZBPO_VIDEOEXTS = ".mkv,.mp4,.avi"
$env:NZBPO_AUDIOEXTS = ".mp3,.flac,.aac"

# Run RemoveSamples
Write-Host "Running RemoveSamples..."
& python "$ScriptsPath\RemoveSamples\main.py"

# Check results
Write-Host "=== Test Results ===" -ForegroundColor Green
$RemainingFiles = (Get-ChildItem -Recurse -File).Count
Write-Host "Files remaining: $RemainingFiles"
Get-ChildItem -Recurse | Format-Table Name, Length

# Validate results
$ExpectedFiles = @("Movie.2023.1080p.mkv", "soundtrack.mp3", "Bonus_Features\extras.mkv")
$Pass = $true

foreach ($expected in $ExpectedFiles) {
    if (Test-Path $expected) {
        Write-Host "βœ… PASS: Expected file present: $expected" -ForegroundColor Green
    } else {
        Write-Host "❌ FAIL: Expected file missing: $expected" -ForegroundColor Red
        $Pass = $false
    }
}

$UnexpectedFiles = @("Movie.2023.sample.mkv", "sample.mp4", "sample_track.mp3", "samples\preview.mkv")
foreach ($unexpected in $UnexpectedFiles) {
    if (Test-Path $unexpected) {
        Write-Host "❌ FAIL: Unexpected file present: $unexpected" -ForegroundColor Red
        $Pass = $false
    } else {
        Write-Host "βœ… PASS: Unexpected file removed: $unexpected" -ForegroundColor Green
    }
}

# Cleanup
Set-Location C:\
Remove-Item -Path $TestDir -Recurse -Force

# Final result
if ($Pass) {
    Write-Host "πŸŽ‰ TEST PASSED: RemoveSamples is working correctly!" -ForegroundColor Green
    exit 0
} else {
    Write-Host "❌ TEST FAILED: RemoveSamples did not behave as expected!" -ForegroundColor Red
    exit 1
}

πŸ† Test Success Criteria

Minimum Passing Requirements

For a test to be considered successful, the following must be true:

βœ… File Preservation (Critical):

  • Large legitimate files remain untouched
  • Files without sample patterns above size threshold preserved
  • Normal directories without sample patterns preserved

βœ… Sample Detection (Critical):

  • Files with "sample" pattern removed regardless of size
  • Directories with "sample" patterns completely removed
  • Files below size threshold (without pattern) preserved (size alone doesn't trigger removal)

βœ… System Stability (Critical):

  • No Python errors during execution
  • No permission errors that prevent operation
  • Extension completes successfully (exit code 93)

Advanced Success Indicators

βœ… Edge Case Handling:

  • Unicode filenames processed correctly
  • Files with spaces in names handled properly
  • Case-insensitive pattern matching works
  • Word boundary detection prevents false positives

βœ… Performance:

  • Test completes in reasonable time (< 30 seconds for standard test)
  • Memory usage remains stable
  • No file corruption or data loss

πŸ“– Interpreting Test Logs

Debug Log Analysis

When debug mode is enabled, look for these log patterns:

Successful Pattern Detection:

[DEBUG] RemoveSamples: Checking file: movie.sample.mkv
[DEBUG] RemoveSamples: Pattern check: 'sample' found with word boundary
[DEBUG] RemoveSamples: Extension check: .mkv is video file
[DEBUG] RemoveSamples: Size check: 45MB < 150MB threshold
[INFO] RemoveSamples: Removing sample file: movie.sample.mkv

Successful Preservation:

[DEBUG] RemoveSamples: Checking file: movie.1080p.mkv
[DEBUG] RemoveSamples: Pattern check: no sample pattern found
[DEBUG] RemoveSamples: Size check: 8500MB > 150MB threshold
[DEBUG] RemoveSamples: Decision: PRESERVE (no pattern + above threshold)

Directory Processing:

[DEBUG] RemoveSamples: Checking directory: samples/
[DEBUG] RemoveSamples: Directory pattern match: 'samples' matches sample pattern
[INFO] RemoveSamples: Removing sample directory: samples/ (2 files)

Error Log Analysis

Permission Issues:

[ERROR] RemoveSamples: Permission denied: /path/to/file
[ERROR] RemoveSamples: Cannot remove directory: Permission denied

Solution: Check file/directory permissions and ownership

Python Issues:

[ERROR] RemoveSamples: Python interpreter not found
[ERROR] RemoveSamples: ModuleNotFoundError: No module named 'json'

Solution: Verify Python installation and version

πŸ”§ Customizing Tests for Your Environment

Adjusting Test File Sizes

# For systems with different thresholds
# If your video threshold is 300MB:
dd if=/dev/zero of="large_movie.mkv" bs=1M count=400    # Above threshold
dd if=/dev/zero of="sample_video.mkv" bs=1M count=250   # Below threshold

# If your audio threshold is 10MB:
dd if=/dev/zero of="full_song.mp3" bs=1M count=12       # Above threshold
dd if=/dev/zero of="sample_audio.mp3" bs=1M count=8     # Below threshold

Testing Custom Extensions

# If you've added custom video extensions
export NZBPO_VIDEOEXTS=".mkv,.mp4,.avi,.webm,.ts,.m2ts"

# If you've added custom audio extensions
export NZBPO_AUDIOEXTS=".mp3,.flac,.aac,.dts,.ac3"

Testing Different Configurations

# Conservative configuration test
export NZBPO_VIDEOSIZETHRESHOLDMB="500"
export NZBPO_AUDIOSIZETHRESHOLDMB="10"

# Aggressive configuration test
export NZBPO_VIDEOSIZETHRESHOLDMB="50"
export NZBPO_AUDIOSIZETHRESHOLDMB="1"

# Files-only test
export NZBPO_REMOVEDIRECTORIES="No"
export NZBPO_REMOVEFILES="Yes"

# Directories-only test
export NZBPO_REMOVEDIRECTORIES="Yes"
export NZBPO_REMOVEFILES="No"

πŸ“ž Support and Documentation

If Tests Fail

  1. Review the debug logs for specific error messages
  2. Check the Troubleshooting Guide for common issues
  3. Verify your configuration against the Configuration Reference
  4. Report issues via GitHub Issues with:
    • Your test results
    • Debug logs
    • System information
    • Configuration settings

Additional Resources


Ready to test? Choose your platform above and follow the step-by-step instructions!
Having issues? β†’ Troubleshooting Guide | FAQ