File size: 5,329 Bytes
0f07ba7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import unittest
import subprocess
import time
import backend_pb2
import backend_pb2_grpc

import grpc

import unittest
import subprocess
import time
import grpc
import backend_pb2_grpc
import backend_pb2

class TestBackendServicer(unittest.TestCase):
    """
    TestBackendServicer is the class that tests the gRPC service.

    This class contains methods to test the startup and shutdown of the gRPC service.
    """
    def setUp(self):
        self.service = subprocess.Popen(["python", "backend.py", "--addr", "localhost:50051"])
        time.sleep(10)

    def tearDown(self) -> None:
        self.service.terminate()
        self.service.wait()

    def test_server_startup(self):
        try:
            self.setUp()
            with grpc.insecure_channel("localhost:50051") as channel:
                stub = backend_pb2_grpc.BackendStub(channel)
                response = stub.Health(backend_pb2.HealthMessage())
                self.assertEqual(response.message, b'OK')
        except Exception as err:
            print(err)
            self.fail("Server failed to start")
        finally:
            self.tearDown()
    def test_load_model(self):
        """
        This method tests if the TTS model is loaded successfully
        """
        try:
            self.setUp()
            with grpc.insecure_channel("localhost:50051") as channel:
                stub = backend_pb2_grpc.BackendStub(channel)
                response = stub.LoadModel(backend_pb2.ModelOptions(Model="mlx-community/Kokoro-82M-4bit"))
                self.assertTrue(response.success)
                self.assertEqual(response.message, "MLX-Audio TTS model loaded successfully")
        except Exception as err:
            print(err)
            self.fail("LoadModel service failed")
        finally:
            self.tearDown()

    def test_tts_generation(self):
        """
        This method tests if TTS audio is generated successfully
        """
        try:
            self.setUp()
            with grpc.insecure_channel("localhost:50051") as channel:
                stub = backend_pb2_grpc.BackendStub(channel)
                response = stub.LoadModel(backend_pb2.ModelOptions(Model="mlx-community/Kokoro-82M-4bit"))
                self.assertTrue(response.success)
                
                # Test TTS generation
                tts_req = backend_pb2.TTSRequest(
                    text="Hello, this is a test of the MLX-Audio TTS system.",
                    model="mlx-community/Kokoro-82M-4bit",
                    voice="af_heart",
                    language="a"
                )
                tts_resp = stub.TTS(tts_req)
                self.assertTrue(tts_resp.success)
                self.assertIn("TTS audio generated successfully", tts_resp.message)
        except Exception as err:
            print(err)
            self.fail("TTS service failed")
        finally:
            self.tearDown()

    def test_tts_with_options(self):
        """
        This method tests if TTS works with various options and parameters
        """
        try:
            self.setUp()
            with grpc.insecure_channel("localhost:50051") as channel:
                stub = backend_pb2_grpc.BackendStub(channel)
                response = stub.LoadModel(backend_pb2.ModelOptions(
                    Model="mlx-community/Kokoro-82M-4bit",
                    Options=["voice:af_soft", "speed:1.2", "lang_code:b"]
                ))
                self.assertTrue(response.success)
                
                # Test TTS generation with different voice and language
                tts_req = backend_pb2.TTSRequest(
                    text="Hello, this is a test with British English accent.",
                    model="mlx-community/Kokoro-82M-4bit",
                    voice="af_soft",
                    language="b"
                )
                tts_resp = stub.TTS(tts_req)
                self.assertTrue(tts_resp.success)
                self.assertIn("TTS audio generated successfully", tts_resp.message)
        except Exception as err:
            print(err)
            self.fail("TTS with options service failed")
        finally:
            self.tearDown()


    def test_tts_multilingual(self):
        """
        This method tests if TTS works with different languages
        """
        try:
            self.setUp()
            with grpc.insecure_channel("localhost:50051") as channel:
                stub = backend_pb2_grpc.BackendStub(channel)
                response = stub.LoadModel(backend_pb2.ModelOptions(Model="mlx-community/Kokoro-82M-4bit"))
                self.assertTrue(response.success)
                
                # Test Spanish TTS
                tts_req = backend_pb2.TTSRequest(
                    text="Hola, esto es una prueba del sistema TTS MLX-Audio.",
                    model="mlx-community/Kokoro-82M-4bit",
                    voice="af_heart",
                    language="e"
                )
                tts_resp = stub.TTS(tts_req)
                self.assertTrue(tts_resp.success)
                self.assertIn("TTS audio generated successfully", tts_resp.message)
        except Exception as err:
            print(err)
            self.fail("Multilingual TTS service failed")
        finally:
            self.tearDown()