# # This file is part of gunicorn released under the MIT license. # See the NOTICE for more information. #!/usr/bin/env python """ Test script to demonstrate Dirty App functionality directly. This tests the dirty app without running the full gunicorn server. Run with: python examples/dirty_example/test_dirty_app.py """ import sys import os # Add parent directory to path sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))) from examples.dirty_example.dirty_app import MLApp, ComputeApp def test_ml_app(): """Test the MLApp dirty application.""" print("=" * 60) print("Testing MLApp") print("=" * 60) # Create and initialize the app app = MLApp() print("\n1. Initializing app (loads default model)...") app.init() # List models print("\n2. Listing models...") result = app("list_models") print(f" Models: {result}") # Load another model print("\n3. Loading 'gpt-4' model...") result = app("load_model", "gpt-4") print(f" Result: {result}") # List models again print("\n4. Listing models again...") result = app("list_models") print(f" Models: {result}") # Run inference print("\n5. Running inference on 'default' model...") result = app("inference", "default", "Hello, world!") print(f" Result: {result}") # Run more inferences print("\n6. Running more inferences...") for i in range(3): result = app("inference", "gpt-4", f"Input data {i}") print(f" Inference {i+1}: {result['prediction']}") # Unload a model print("\n7. Unloading 'gpt-4' model...") result = app("unload_model", "gpt-4") print(f" Result: {result}") # Final stats print("\n8. Final stats...") result = app("list_models") print(f" {result}") # Close print("\n9. Closing app...") app.close() print("\n" + "=" * 60) print("MLApp test complete!") print("=" * 60) def test_compute_app(): """Test the ComputeApp dirty application.""" print("\n" + "=" * 60) print("Testing ComputeApp") print("=" * 60) # Create and initialize app = ComputeApp() app.init() # Fibonacci print("\n1. Computing Fibonacci numbers...") for n in [10, 20, 30, 40]: result = app("fibonacci", n) print(f" fib({n}) = {result['result']}") # Prime checks print("\n2. Checking prime numbers...") for n in [17, 100, 997, 1000]: result = app("prime_check", n) status = "is prime" if result['is_prime'] else "is NOT prime" print(f" {n} {status}") # Stats print("\n3. Stats...") result = app("stats") print(f" {result}") # Close app.close() print("\n" + "=" * 60) print("ComputeApp test complete!") print("=" * 60) def test_error_handling(): """Test error handling in dirty apps.""" print("\n" + "=" * 60) print("Testing Error Handling") print("=" * 60) app = MLApp() app.init() # Try to run inference on non-existent model print("\n1. Trying inference on non-existent model...") try: app("inference", "nonexistent", "data") except ValueError as e: print(f" Caught expected error: {e}") # Try unknown action print("\n2. Trying unknown action...") try: app("unknown_action") except ValueError as e: print(f" Caught expected error: {e}") # Try private method print("\n3. Trying private method...") try: app("_load_model", "test") except ValueError as e: print(f" Caught expected error: {e}") app.close() print("\n" + "=" * 60) print("Error handling test complete!") print("=" * 60) if __name__ == "__main__": print("\n" + "#" * 60) print("# Dirty App Demonstration") print("#" * 60) test_ml_app() test_compute_app() test_error_handling() print("\n" + "#" * 60) print("# All tests passed!") print("#" * 60 + "\n")