Coverage for tests/test_wrapper_fluxupscaler.py: 100%
49 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-09 04:47 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-09 04:47 +0000
1#!/usr/bin/env python3
3import sys
4import pytest
6from unittest.mock import patch
7from unittest.mock import MagicMock
8from tests.torch_mock import TorchMock
9from tests.diffusers_mock import DiffusersMock
11from PIL import Image
13mock_torch = TorchMock()
14mock_diffusers = DiffusersMock()
16sys.path.append("wrapper")
17sys.path.append("wrapper/flux")
18sys.path.append("wrapper/fluxupscaler")
20mock_modules = {
21 'nvidia_smi': MagicMock(),
22 'imageio': MagicMock(),
23 'cv2': MagicMock(),
24 'torch': mock_torch,
25 'xfuser': MagicMock(),
26 'xfuser.config': MagicMock(),
27 'xfuser.core': MagicMock(),
28 'xfuser.core.distributed': MagicMock(),
29 'xfuser.model_executor': MagicMock(),
30 'xfuser.model_executor.models': MagicMock(),
31 'xfuser.model_executor.models.transformers.transformer_flux': MagicMock(),
32 'xfuser.model_executor.layers': MagicMock(),
33 'xfuser.model_executor.layers.attention_processor': MagicMock(),
34}
35mock_modules.update(mock_torch.get_sub_modules())
36mock_modules.update(mock_diffusers.get_sub_modules())
38with patch.dict(sys.modules, mock_modules):
39 from image_utils import img_to_base64
40 from fluxupscaler.wrapper_fluxupscaler import FluxUpscalerGeneration
43@pytest.mark.asyncio
44async def test_wrapper_fluxupscaler() -> None:
45 model = FluxUpscalerGeneration()
46 assert model is not None
47 assert model.model_name == "fluxupscaler"
48 assert model.status == "initializing"
50 img = Image.new("RGB", (40, 30))
51 img_base64 = img_to_base64(img)
53 with pytest.raises(ValueError, match="Model not initialized"):
54 await model.generate(
55 img=img,
56 width=128,
57 height=80,
58 prompt="test prompt")
60 model.init()
61 assert model.status == "ok"
63 health = model.get_health()
64 assert health is not None
65 timestamps = model.get_timestamps()
66 assert timestamps is not None
68 await model.get_rest_args({})
70 await model.get_rest_args({
71 "img": img_base64,
72 })
74 with pytest.raises(ValueError, match="Missing JSON body"):
75 await model.get_rest_args(None)
77 # Success case
78 await model.get_rest_args({
79 "job_id": "unittest",
80 "prompt": "Test prompt",
81 "width": 80,
82 "height": 60,
83 "img": img_base64
84 })
86 await model.warmup()
88 image = await model.generate(
89 img=img,
90 width=256,
91 height=160,
92 prompt="Test prompt",
93 )
94 assert image is not None
95 assert isinstance(image, Image.Image)
97 # Bad cases: _assert_args only rejects when world_size > 1
98 model.world_size = 2
99 with pytest.raises(ValueError, match="48x48 not supported for 2 GPUs"):
100 await model.generate(
101 img=img,
102 width=48,
103 height=48,
104 prompt="Test prompt",
105 )
106 with pytest.raises(ValueError, match="208x116 not supported for 2 GPUs"):
107 await model.generate(
108 img=img,
109 width=208,
110 height=116,
111 prompt="Test prompt",
112 )
114 del model