OnyxMunk/AudioForge
0
1"""Test script for music generation API."""
2
3import requests
4import json
5import time
6
7API_URL = "http://localhost:8000/api/v1"
8
9def test_music_generation():
10 """Test the music generation endpoint."""
11 print("Testing Music Generation API\n")
12 print("=" * 60)
13
14 # Test 1: Simple music generation
15 print("\n1. Testing simple music generation...")
16 payload = {
17 "prompt": "A calm acoustic guitar melody with soft percussion",
18 "duration": 2 # Short duration for testing
19 }
20
21 print(f" Payload: {json.dumps(payload, indent=2)}")
22
23 try:
24 response = requests.post(
25 f"{API_URL}/generations",
26 json=payload,
27 timeout=120
28 )
29
30 print(f" Status Code: {response.status_code}")
31
32 if response.status_code in [200, 202]:
33 result = response.json()
34 print(f" [SUCCESS] Generation created!")
35 print(f" Generation ID: {result.get('id')}")
36 print(f" Status: {result.get('status')}")
37
38 # Poll for completion
39 generation_id = result.get('id')
40 if generation_id:
41 print(f"\n Polling for completion...")
42 max_attempts = 60
43 for i in range(max_attempts):
44 time.sleep(2)
45 status_response = requests.get(f"{API_URL}/generations/{generation_id}")
46 if status_response.status_code == 200:
47 status_data = status_response.json()
48 current_status = status_data.get('status')
49 print(f" Attempt {i+1}/{max_attempts}: Status = {current_status}")
50
51 if current_status == 'completed':
52 print(f" [SUCCESS] Generation completed!")
53 print(f" Audio URL: {status_data.get('audio_url')}")
54 break
55 elif current_status == 'failed':
56 print(f" [FAILED] Generation failed!")
57 print(f" Error: {status_data.get('error_message')}")
58 break
59 else:
60 print(f" [WARNING] Failed to get status: {status_response.status_code}")
61 break
62 else:
63 print(f" [FAILED] Request failed!")
64 print(f" Response: {response.text}")
65
66 except requests.exceptions.ConnectionError:
67 print(f" [ERROR] Connection Error: Backend server not running on {API_URL}")
68 except requests.exceptions.Timeout:
69 print(f" [ERROR] Timeout: Request took too long")
70 except Exception as e:
71 print(f" [ERROR] {str(e)}")
72
73 # Test 2: List generations
74 print("\n2. Testing list generations...")
75 try:
76 response = requests.get(f"{API_URL}/generations")
77 print(f" Status Code: {response.status_code}")
78
79 if response.status_code == 200:
80 data = response.json()
81 generations = data.get('items', [])
82 total = data.get('total', 0)
83 print(f" [SUCCESS] Found {total} generation(s)")
84 for gen in generations[:3]: # Show first 3
85 print(f" - ID: {gen.get('id')}, Status: {gen.get('status')}")
86 else:
87 print(f" [FAILED] {response.text}")
88 except Exception as e:
89 print(f" [ERROR] {str(e)}")
90
91 print("\n" + "=" * 60)
92 print("[COMPLETE] Test completed!")
93
94if __name__ == "__main__":
95 test_music_generation()
96 