From 1689a45e3e4ac61500941c5b779494912c2b24a0 Mon Sep 17 00:00:00 2001 From: misyaguziya <53165965+misyaguziya@users.noreply.github.com> Date: Tue, 23 Sep 2025 14:45:08 +0900 Subject: [PATCH] Refactor test_endpoints.py: Enhance endpoint testing with structured tests for ON/OFF states, random access, and continuous testing. Introduce Color class for colored output and streamline endpoint handling logic. --- src-python/controller.py | 40 +- src-python/test_endpoints.py | 918 +++++++++-------------------------- 2 files changed, 262 insertions(+), 696 deletions(-) diff --git a/src-python/controller.py b/src-python/controller.py index b10d5617..ec287267 100644 --- a/src-python/controller.py +++ b/src-python/controller.py @@ -1699,14 +1699,16 @@ class Controller: @staticmethod def setEnableLoggerFeature(*args, **kwargs) -> dict: - config.LOGGER_FEATURE = True - model.startLogger() + if config.LOGGER_FEATURE is False: + model.startLogger() + config.LOGGER_FEATURE = True return {"status":200, "result":config.LOGGER_FEATURE} @staticmethod def setDisableLoggerFeature(*args, **kwargs) -> dict: - model.stopLogger() - config.LOGGER_FEATURE = False + if config.LOGGER_FEATURE is True: + model.stopLogger() + config.LOGGER_FEATURE = False return {"status":200, "result":config.LOGGER_FEATURE} @staticmethod @@ -2245,24 +2247,28 @@ class Controller: @staticmethod def setEnableWebSocketServer(*args, **kwargs) -> dict: - if isAvailableWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT) is True: - model.startWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT) - config.WEBSOCKET_SERVER = True - response = {"status":200, "result":config.WEBSOCKET_SERVER} - else: - response = { - "status":400, - "result":{ - "message":"WebSocket server host or port is not available", - "data": config.WEBSOCKET_SERVER + if config.WEBSOCKET_SERVER is False: + if isAvailableWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT) is True: + model.startWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT) + config.WEBSOCKET_SERVER = True + response = {"status":200, "result":config.WEBSOCKET_SERVER} + else: + response = { + "status":400, + "result":{ + "message":"WebSocket server host or port is not available", + "data": config.WEBSOCKET_SERVER + } } - } + else: + response = {"status":200, "result":config.WEBSOCKET_SERVER} return response @staticmethod def setDisableWebSocketServer(*args, **kwargs) -> dict: - config.WEBSOCKET_SERVER = False - model.stopWebSocketServer() + if config.WEBSOCKET_SERVER is True: + config.WEBSOCKET_SERVER = False + model.stopWebSocketServer() return {"status":200, "result":config.WEBSOCKET_SERVER} def initializationProgress(self, progress): diff --git a/src-python/test_endpoints.py b/src-python/test_endpoints.py index 03892fa8..b0664b50 100644 --- a/src-python/test_endpoints.py +++ b/src-python/test_endpoints.py @@ -1,15 +1,40 @@ -import sys -import unittest - # 初期化のため、config.jsonの削除 import os +import pprint +import time +import random if os.path.exists("config.json"): os.remove("config.json") from mainloop import main_instance -class TestMainloop(unittest.TestCase): - def setUp(self): +class Color: + BLACK = '\033[30m'#(文字)黒 + RED = '\033[31m'#(文字)赤 + GREEN = '\033[32m'#(文字)緑 + YELLOW = '\033[33m'#(文字)黄 + BLUE = '\033[34m'#(文字)青 + MAGENTA = '\033[35m'#(文字)マゼンタ + CYAN = '\033[36m'#(文字)シアン + WHITE = '\033[37m'#(文字)白 + COLOR_DEFAULT = '\033[39m'#文字色をデフォルトに戻す + BOLD = '\033[1m'#太字 + UNDERLINE = '\033[4m'#下線 + INVISIBLE = '\033[08m'#不可視 + REVERCE = '\033[07m'#文字色と背景色を反転 + BG_BLACK = '\033[40m'#(背景)黒 + BG_RED = '\033[41m'#(背景)赤 + BG_GREEN = '\033[42m'#(背景)緑 + BG_YELLOW = '\033[43m'#(背景)黄 + BG_BLUE = '\033[44m'#(背景)青 + BG_MAGENTA = '\033[45m'#(背景)マゼンタ + BG_CYAN = '\033[46m'#(背景)シアン + BG_WHITE = '\033[47m'#(背景)白 + BG_DEFAULT = '\033[49m'#背景色をデフォルトに戻す + RESET = '\033[0m'#全てリセット + +class TestMainloop(): + def __init__(self): self.main = main_instance self.main.startReceiver() self.main.startHandler() @@ -23,434 +48,119 @@ class TestMainloop(unittest.TestCase): for key in self.main.mapping.keys(): self.main.mapping[key]["status"] = True - def test_endpoints(self): - print("単体動作の確認") - # エンドポイントとテストデータの定義 - endpoints = { - # Main Window - "/set/enable/translation": [{"data": None, "status": 200, "result": True}], - "/set/disable/translation": [{"data": None, "status": 200, "result": False}], - "/set/enable/transcription_send": [{"data": None, "status": 200, "result": True}], - "/set/disable/transcription_send": [{"data": None, "status": 200, "result": False}], - "/set/enable/transcription_receive": [{"data": None, "status": 200, "result": True}], - "/set/disable/transcription_receive": [{"data": None, "status": 200, "result": False}], - "/set/enable/foreground": [{"data": None, "status": 200, "result": True}], - "/set/disable/foreground": [{"data": None, "status": 200, "result": False}], - "/get/data/selected_tab_no": [{"data": None, "status": 200, "result": "1"}], - "/set/data/selected_tab_no": [ - {"data": "1", "status": 200, "result": "1"}, - {"data": "2", "status": 200, "result": "2"}, - {"data": "3", "status": 200, "result": "3"}, - ], - "/get/data/main_window_sidebar_compact_mode": [{"data": None, "status": 200, "result": False}], - "/set/enable/main_window_sidebar_compact_mode": [{"data": None, "status": 200, "result": True}], - "/set/disable/main_window_sidebar_compact_mode": [{"data": None, "status": 200, "result": False}], - "/get/data/translation_engines": [{"data": None, "status": 200, "result": ['DeepL', 'Google', 'Bing', 'Papago', 'CTranslate2']}], - "/get/data/selectable_language_list": [ - { - "data": None, - "status": 200, - "result": - [ - {'language': 'Afrikaans', 'country': 'South Africa'}, - {'language': 'Albanian', 'country': 'Albania'}, - {'language': 'Amharic', 'country': 'Ethiopia'}, - {'language': 'Arabic', 'country': 'Algeria'}, - {'language': 'Arabic', 'country': 'Bahrain'}, - {'language': 'Arabic', 'country': 'Egypt'}, - {'language': 'Arabic', 'country': 'Israel'}, - {'language': 'Arabic', 'country': 'Iraq'}, - {'language': 'Arabic', 'country': 'Jordan'}, - {'language': 'Arabic', 'country': 'Kuwait'}, - {'language': 'Arabic', 'country': 'Lebanon'}, - {'language': 'Arabic', 'country': 'Mauritania'}, - {'language': 'Arabic', 'country': 'Morocco'}, - {'language': 'Arabic', 'country': 'Oman'}, - {'language': 'Arabic', 'country': 'Qatar'}, - {'language': 'Arabic', 'country': 'Saudi Arabia'}, - {'language': 'Arabic', 'country': 'Palestine'}, - {'language': 'Arabic', 'country': 'Syria'}, - {'language': 'Arabic', 'country': 'Tunisia'}, - {'language': 'Arabic', 'country': 'United Arab Emirates'}, - {'language': 'Arabic', 'country': 'Yemen'}, - {'language': 'Armenian', 'country': 'Armenia'}, - {'language': 'Azerbaijani', 'country': 'Azerbaijan'}, - {'language': 'Basque', 'country': 'Spain'}, - {'language': 'Bengali', 'country': 'Bangladesh'}, - {'language': 'Bengali', 'country': 'India'}, - {'language': 'Bosnian', 'country': 'Bosnia and Herzegovina'}, - {'language': 'Bulgarian', 'country': 'Bulgaria'}, - {'language': 'Catalan', 'country': 'Spain'}, - {'language': 'Chinese Simplified', 'country': 'China'}, - {'language': 'Chinese Simplified', 'country': 'Hong Kong'}, - {'language': 'Chinese Traditional', 'country': 'Taiwan'}, - {'language': 'Chinese Traditional', 'country': 'Hong Kong'}, - {'language': 'Croatian', 'country': 'Croatia'}, - {'language': 'Czech', 'country': 'Czech Republic'}, - {'language': 'Danish', 'country': 'Denmark'}, - {'language': 'Dutch', 'country': 'Belgium'}, - {'language': 'Dutch', 'country': 'Netherlands'}, - {'language': 'English', 'country': 'Australia'}, - {'language': 'English', 'country': 'Canada'}, - {'language': 'English', 'country': 'Ghana'}, - {'language': 'English', 'country': 'Hong Kong'}, - {'language': 'English', 'country': 'India'}, - {'language': 'English', 'country': 'Ireland'}, - {'language': 'English', 'country': 'Kenya'}, - {'language': 'English', 'country': 'New Zealand'}, - {'language': 'English', 'country': 'Nigeria'}, - {'language': 'English', 'country': 'Philippines'}, - {'language': 'English', 'country': 'Singapore'}, - {'language': 'English', 'country': 'South Africa'}, - {'language': 'English', 'country': 'Tanzania'}, - {'language': 'English', 'country': 'United Kingdom'}, - {'language': 'English', 'country': 'United States'}, - {'language': 'Estonian', 'country': 'Estonia'}, - {'language': 'Filipino', 'country': 'Philippines'}, - {'language': 'Finnish', 'country': 'Finland'}, - {'language': 'French', 'country': 'Belgium'}, - {'language': 'French', 'country': 'Canada'}, - {'language': 'French', 'country': 'France'}, - {'language': 'French', 'country': 'Switzerland'}, - {'language': 'Galician', 'country': 'Spain'}, - {'language': 'Georgian', 'country': 'Georgia'}, - {'language': 'German', 'country': 'Austria'}, - {'language': 'German', 'country': 'Germany'}, - {'language': 'German', 'country': 'Switzerland'}, - {'language': 'Greek', 'country': 'Greece'}, - {'language': 'Gujarati', 'country': 'India'}, - {'language': 'Hebrew', 'country': 'Israel'}, - {'language': 'Hindi', 'country': 'India'}, - {'language': 'Hungarian', 'country': 'Hungary'}, - {'language': 'Icelandic', 'country': 'Iceland'}, - {'language': 'Indonesian', 'country': 'Indonesia'}, - {'language': 'Italian', 'country': 'Italy'}, - {'language': 'Italian', 'country': 'Switzerland'}, - {'language': 'Japanese', 'country': 'Japan'}, - {'language': 'Kannada', 'country': 'India'}, - {'language': 'Kazakh', 'country': 'Kazakhstan'}, - {'language': 'Khmer', 'country': 'Cambodia'}, - {'language': 'Korean', 'country': 'South Korea'}, - {'language': 'Lao', 'country': 'Laos'}, - {'language': 'Latvian', 'country': 'Latvia'}, - {'language': 'Lithuanian', 'country': 'Lithuania'}, - {'language': 'Macedonian', 'country': 'North Macedonia'}, - {'language': 'Malay', 'country': 'Malaysia'}, - {'language': 'Malayalam', 'country': 'India'}, - {'language': 'Mongolian', 'country': 'Mongolia'}, - {'language': 'Nepali', 'country': 'Nepal'}, - {'language': 'Norwegian', 'country': 'Norway'}, - {'language': 'Persian', 'country': 'Iran'}, - {'language': 'Polish', 'country': 'Poland'}, - {'language': 'Portuguese', 'country': 'Brazil'}, - {'language': 'Portuguese', 'country': 'Portugal'}, - {'language': 'Romanian', 'country': 'Romania'}, - {'language': 'Russian', 'country': 'Russia'}, - {'language': 'Serbian', 'country': 'Serbia'}, - {'language': 'Sinhala', 'country': 'Sri Lanka'}, - {'language': 'Slovak', 'country': 'Slovakia'}, - {'language': 'Slovenian', 'country': 'Slovenia'}, - {'language': 'Spanish', 'country': 'Argentina'}, - {'language': 'Spanish', 'country': 'Bolivia'}, - {'language': 'Spanish', 'country': 'Chile'}, - {'language': 'Spanish', 'country': 'Colombia'}, - {'language': 'Spanish', 'country': 'Costa Rica'}, - {'language': 'Spanish', 'country': 'Dominican Republic'}, - {'language': 'Spanish', 'country': 'Ecuador'}, - {'language': 'Spanish', 'country': 'El Salvador'}, - {'language': 'Spanish', 'country': 'Guatemala'}, - {'language': 'Spanish', 'country': 'Honduras'}, - {'language': 'Spanish', 'country': 'Mexico'}, - {'language': 'Spanish', 'country': 'Nicaragua'}, - {'language': 'Spanish', 'country': 'Panama'}, - {'language': 'Spanish', 'country': 'Paraguay'}, - {'language': 'Spanish', 'country': 'Peru'}, - {'language': 'Spanish', 'country': 'Puerto Rico'}, - {'language': 'Spanish', 'country': 'Spain'}, - {'language': 'Spanish', 'country': 'United States'}, - {'language': 'Spanish', 'country': 'Uruguay'}, - {'language': 'Spanish', 'country': 'Venezuela'}, - {'language': 'Sundanese', 'country': 'Indonesia'}, - {'language': 'Swahili', 'country': 'Kenya'}, - {'language': 'Swahili', 'country': 'Tanzania'}, - {'language': 'Swedish', 'country': 'Sweden'}, - {'language': 'Tamil', 'country': 'India'}, - {'language': 'Tamil', 'country': 'malaysia'}, - {'language': 'Tamil', 'country': 'Singapore'}, - {'language': 'Tamil', 'country': 'Sri Lanka'}, - {'language': 'Telugu', 'country': 'India'}, - {'language': 'Thai', 'country': 'Thailand'}, - {'language': 'Turkish', 'country': 'Turkey'}, - {'language': 'Ukrainian', 'country': 'Ukraine'}, - {'language': 'Urdu', 'country': 'India'}, - {'language': 'Urdu', 'country': 'Pakistan'}, - {'language': 'Uzbek', 'country': 'Uzbekistan'}, - {'language': 'Vietnamese', 'country': 'Vietnam'} - ]}], - "/get/data/selected_translation_engines": [{"data": None, "status": 200, "result": {'1': 'CTranslate2', '2': 'CTranslate2', '3': 'CTranslate2'}}], - "/set/data/selected_translation_engines": [ - { - "data": {'1': 'DeepL', '2': 'Google', '3': 'Papago'}, - "status": 200, - "result": {'1': 'DeepL', '2': 'Google', '3': 'Papago'} - }, - ], - "/get/data/selected_your_languages": [ - { - "data": None, - "status": 200, - "result": { - '1': { - '1': { - 'language': 'Japanese', - 'country': 'Japan', - 'enable': True - } - }, - '2': { - '1': { - 'language': 'Japanese', - 'country': 'Japan', - 'enable': True - } - }, - '3': { - '1': { - 'language': 'Japanese', - 'country': 'Japan', - 'enable': True - } - } - } - } - ], - "/set/data/selected_your_languages": [ - { - "data": { - '1': { - '1': { - 'language': 'Japanese', - 'country': 'Japan', - 'enable': True - }, - }, - '2': { - '1': { - 'language': 'English', - 'country': 'United States', - 'enable': True - }, - }, - '3': { - '1': { - 'language': 'French', - 'country': 'France', - 'enable': True - } - } - }, - "status": 200, - "result": { - '1': { - '1': { - 'language': 'Japanese', - 'country': 'Japan', - 'enable': True - }, - }, - '2': { - '1': { - 'language': 'English', - 'country': 'United States', - 'enable': True - }, - }, - '3': { - '1': { - 'language': 'French', - 'country': 'France', - 'enable': True - } - } - } - } - ], - "/get/data/selected_target_languages": [ - { - "data": None, - "status": 200, - "result": { - "1": { - "1": { - "language": "English", - "country": "United States", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": False - }, - "3": { - "language": "English", - "country": "United States", - "enable": False - } - }, - "2": { - "1": { - "language": "English", - "country": "United States", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": False - }, - "3": { - "language": "English", - "country": "United States", - "enable": False - } - }, - "3": { - "1": { - "language": "English", - "country": "United States", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": False - }, - "3": { - "language": "English", - "country": "United States", - "enable": False - } - } - }, - } - ], - "/set/data/selected_target_languages": [ - { - "data": { - "1": { - "1": { - "language": "Japanese", - "country": "Japan", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": True - }, - "3": { - "language": "French", - "country": "France", - "enable": True - } - }, - "2": { - "1": { - "language": "Japanese", - "country": "Japan", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": True - }, - "3": { - "language": "French", - "country": "France", - "enable": True - } - }, - "3": { - "1": { - "language": "Japanese", - "country": "Japan", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": True - }, - "3": { - "language": "French", - "country": "France", - "enable": True - } - } - }, - "status": 200, - "result": { - "1": { - "1": { - "language": "Japanese", - "country": "Japan", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": True - }, - "3": { - "language": "French", - "country": "France", - "enable": True - } - }, - "2": { - "1": { - "language": "Japanese", - "country": "Japan", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": True - }, - "3": { - "language": "French", - "country": "France", - "enable": True - } - }, - "3": { - "1": { - "language": "Japanese", - "country": "Japan", - "enable": True - }, - "2": { - "language": "English", - "country": "United States", - "enable": True - }, - "3": { - "language": "French", - "country": "France", - "enable": True - } - } - }, - } - ], - "/get/data/transcription_engines": [{"data": None, "status": 200, "result": ['Google', 'Whisper']}], - "/get/data/selected_transcription_engine": [{"data": None, "status": 200, "result": "Google"}], - "/set/data/selected_transcription_engine": [ - {"data": "Google", "status": 200, "result": "Google"}, - {"data": "Whisper", "status": 200, "result": "Whisper"}, - ], + self.config_dict = {} + for endpoint in self.main.mapping.keys(): + if endpoint.startswith("/get/data/"): + self.config_dict[endpoint.split("/")[-1]] = self.main.handleRequest(endpoint, None)[0] + elif endpoint.startswith("/set/disable/"): + self.config_dict[endpoint.split("/")[-1]] = self.main.handleRequest(endpoint, None)[0] + print(self.config_dict) + + self.validity_endpoints = [ + "/set/enable/translation", + "/set/disable/translation", + "/set/enable/transcription_send", + "/set/disable/transcription_send", + "/set/enable/transcription_receive", + "/set/disable/transcription_receive", + "/set/enable/foreground", + "/set/disable/foreground", + "/set/enable/main_window_sidebar_compact_mode", + "/set/disable/main_window_sidebar_compact_mode", + "/set/enable/show_resend_button", + "/set/disable/show_resend_button", + "/set/enable/convert_message_to_romaji", + "/set/disable/convert_message_to_romaji", + "/set/enable/convert_message_to_hiragana", + "/set/disable/convert_message_to_hiragana", + # "/set/enable/auto_mic_select", + # "/set/disable/auto_mic_select", + "/set/enable/mic_automatic_threshold", + "/set/disable/mic_automatic_threshold", + # "/set/enable/check_mic_threshold", + # "/set/disable/check_mic_threshold", + # "/set/enable/auto_speaker_select", + # "/set/disable/auto_speaker_select", + "/set/enable/speaker_automatic_threshold", + "/set/disable/speaker_automatic_threshold", + # "/set/enable/check_speaker_threshold", + # "/set/disable/check_speaker_threshold", + "/set/enable/overlay_small_log", + "/set/disable/overlay_small_log", + "/set/enable/overlay_large_log", + "/set/disable/overlay_large_log", + "/set/enable/overlay_show_only_translated_messages", + "/set/disable/overlay_show_only_translated_messages", + "/set/enable/auto_clear_message_box", + "/set/disable/auto_clear_message_box", + "/set/enable/send_only_translated_messages", + "/set/disable/send_only_translated_messages", + "/set/enable/logger_feature", + "/set/disable/logger_feature", + "/set/enable/vrc_mic_mute_sync", + "/set/disable/vrc_mic_mute_sync", + "/set/enable/send_message_to_vrc", + "/set/disable/send_message_to_vrc", + "/set/enable/send_received_message_to_vrc", + "/set/disable/send_received_message_to_vrc", + "/set/enable/websocket_server", + "/set/disable/websocket_server", + "/set/enable/notification_vrc_sfx", + "/set/disable/notification_vrc_sfx", + ] + + self.set_data_endpoints = [ + "/set/data/selected_tab_no", + "/set/data/selected_translation_engines", + "/set/data/selected_your_languages", + "/set/data/selected_target_languages" + "/set/data/selected_transcription_engine", + "/set/data/transparency", + "/set/data/ui_scaling", + "/set/data/textbox_ui_scaling", + "/set/data/message_box_ratio", + "/set/data/send_message_button_type", + "/set/data/font_family", + "/set/data/ui_language", + "/set/data/main_window_geometry", + "/set/data/selected_translation_compute_device", + "/set/data/selected_transcription_compute_device", + "/set/data/ctranslate2_weight_type", + "/set/data/deepl_auth_key", + "/set/data/selected_mic_host", + "/set/data/selected_mic_device", + "/set/data/mic_threshold", + "/set/data/mic_record_timeout", + "/set/data/mic_phrase_timeout", + "/set/data/mic_max_phrases", + "/set/data/hotkeys", + "/set/data/plugins_status", + "/set/data/mic_avg_logprob", + "/set/data/mic_no_speech_prob", + "/set/data/mic_word_filter", + "/set/data/selected_speaker_device", + "/set/data/speaker_threshold", + "/set/data/speaker_record_timeout", + "/set/data/speaker_phrase_timeout", + "/set/data/speaker_max_phrases", + "/set/data/speaker_avg_logprob", + "/set/data/speaker_no_speech_prob", + "/set/data/whisper_weight_type", + "/set/data/overlay_small_log_settings", + "/set/data/overlay_large_log_settings", + "/set/data/send_message_format_parts", + "/set/data/received_message_format_parts", + "/set/data/websocket_host", + "/set/data/websocket_port", + "/set/data/osc_ip_address", + "/set/data/osc_port", + ] + + self.delete_data_endpoints = [ + "/delete/data/deepl_auth_key", + ] + + self.run_endpoints = { "/run/send_message_box": [ { "data": {"id":"123456", "message":"test"}, @@ -472,256 +182,106 @@ class TestMainloop(unittest.TestCase): # !!!Cant be tested here!!! # "/run/update_software": [{"data": None, "status": 200, "result": True}], # "/run/update_cuda_software": [{"data": None, "status": 200, "result": True}], - - # Config Window - # Appearance - "/get/data/version": [{"data": None, "status": 200, "result": "3.2.2"}], - "/get/data/transparency": [{"data": None, "status": 200, "result": 100}], - "/set/data/transparency": [ - {"data": 100, "status": 200, "result": 100}, - {"data": 80, "status": 200, "result": 80}, - {"data": 50, "status": 200, "result": 50}, - {"data": 20, "status": 200, "result": 20}, - {"data": 0, "status": 200, "result": 0}, + "/run/download_ctranslate2_weight": [ + {"data": "small", "status": 200, "result": True}, + {"data": "large", "status": 400, "result": False}, ], - "/get/data/ui_scaling": [{"data": None, "status": 200, "result": 100}], - "/set/data/ui_scaling": [ - {"data": 100, "status": 200, "result": 100}, - {"data": 80, "status": 200, "result": 80}, - {"data": 50, "status": 200, "result": 50}, - {"data": 20, "status": 200, "result": 20}, - {"data": 10, "status": 200, "result": 10}, + "/run/download_whisper_weight": [ + {"data": "tiny", "status": 200, "result": True}, + {"data": "base", "status": 200, "result": True}, + {"data": "small", "status": 200, "result": True}, + {"data": "medium", "status": 200, "result": True}, + {"data": "large-v1", "status": 200, "result": True}, + {"data": "large-v2", "status": 400, "result": False}, + {"data": "large-v3", "status": 400, "result": False}, + {"data": "large-v3-turbo-int8", "status": 400, "result": False}, + {"data": "large-v3-turbo", "status": 400, "result": False} ], - "/get/data/textbox_ui_scaling": [{"data": None, "status": 200, "result": 100}], - "/set/data/textbox_ui_scaling": [ - {"data": 100, "status": 200, "result": 100}, - {"data": 80, "status": 200, "result": 80}, - {"data": 50, "status": 200, "result": 50}, - {"data": 20, "status": 200, "result": 20}, - {"data": 10, "status": 200, "result": 10}, - ], - "/get/data/message_box_ratio": [{"data": None, "status": 200, "result": 10}], - "/set/data/message_box_ratio": [ - {"data": 10, "status": 200, "result": 10}, - {"data": 9, "status": 200, "result": 5.5}, - {"data": 1, "status": 200, "result": 1}, - ], - "/get/data/send_message_button_type": [{"data": None, "status": 200, "result": "show"}], - "/set/data/send_message_button_type": [ - {"data": "show", "status": 200, "result": "show"}, - {"data": "hide", "status": 200, "result": "hide"}, - {"data": "show_and_disable_enter_key", "status": 200, "result": "show_and_disable_enter_key"}, - ], - "/get/data/show_resend_button": [{"data": None, "status": 200, "result": False}], - "/set/enable/show_resend_button": [{"data": None, "status": 200, "result": True}], - "/set/disable/show_resend_button": [{"data": None, "status": 200, "result": False}], - "/get/data/font_family": [{"data": None, "status": 200, "result": "Yu Gothic UI"}], - "/set/data/font_family": [{"data": "Yu Gothic UI", "status": 200, "result": "Yu Gothic UI"}], - "/get/data/ui_language": [{"data": None, "status": 200, "result": "en"}], - "/set/data/ui_language": [ - {"data": "en", "status": 200, "result": "en"}, - {"data": "ja", "status": 200, "result": "ja"}, - {"data": "ko", "status": 200, "result": "ko"}, - {"data": "zh-Hant", "status": 200, "result": "zh-Hant"}, - {"data": "zh-Hans", "status": 200, "result": "zh-Hans"}, - ], - "/get/data/main_window_geometry": [{"data": None, "status": 200, "result": {"x_pos": 0, "y_pos": 0, "width": 870, "height": 654}}], - "/set/data/main_window_geometry": [ - { - "data": {"x_pos": 0, "y_pos": 0, "width": 870, "height": 654}, - "status": 200, - "result": {"x_pos": 0, "y_pos": 0, "width": 870, "height": 654} - }, - ], - # Compute device - "/get/data/compute_mode": [{"data": None, "status": 200, "result": "cpu"}], - "/get/data/translation_compute_device_list": [{"data": None, "status": 200, "result": [{"device": "cpu", "device_index": 0, "device_name": "cpu"}]}], - "/get/data/selected_translation_compute_device": [{"data": None, "status": 200, "result": {"device": "cpu", "device_index": 0, "device_name": "cpu"}}], - "/set/data/selected_translation_compute_device": [ - { - "data": {"device": "cpu", "device_index": 0, "device_name": "cpu"}, - "status": 200, - "result": {"device": "cpu", "device_index": 0, "device_name": "cpu"} - } - ], - "/get/data/transcription_compute_device_list": [ - { - "data": None, - "status": 200, - "result": [{"device": "cpu", "device_index": 0, "device_name": "cpu"}] - } - ], - "/get/data/selected_transcription_compute_device": [ - { - "data": None, - "status": 200, - "result": {"device": "cpu", "device_index": 0, "device_name": "cpu"} - } - ], - "/set/data/selected_transcription_compute_device": [ - { - "data": {"device": "cpu", "device_index": 0, "device_name": "cpu"}, - "status": 200, - "result": {"device": "cpu", "device_index": 0, "device_name": "cpu"} - }, - ], - # Translation - "/get/data/selectable_ctranslate2_weight_type_dict": [ - { - "data": None, - "status": 200, - "result": {"small": True, "large": False} - }, - ], - "/get/data/ctranslate2_weight_type": [ - { - "data": "small", - "status": 200, - "result": "small" - }, - ], - # "/set/data/ctranslate2_weight_type": {"data": None}, - # "/run/download_ctranslate2_weight": {"data": None}, - # "/get/data/deepl_auth_key": {"data": None}, - # "/set/data/deepl_auth_key": {"data": None}, - # "/delete/data/deepl_auth_key": {"data": None}, - # "/get/data/convert_message_to_romaji": {"data": None}, - # "/set/enable/convert_message_to_romaji": {"data": None}, - # "/set/disable/convert_message_to_romaji": {"data": None}, - # "/get/data/convert_message_to_hiragana": {"data": None}, - # "/set/enable/convert_message_to_hiragana": {"data": None}, - # "/set/disable/convert_message_to_hiragana": {"data": None}, - # # Transcription - # "/get/data/mic_host_list": {"data": None}, - # "/get/data/mic_device_list": {"data": None}, - # "/get/data/speaker_device_list": {"data": None}, - # "/get/data/auto_mic_select": {"data": None}, - # "/set/enable/auto_mic_select": {"data": None}, - # "/set/disable/auto_mic_select": {"data": None}, - # "/get/data/selected_mic_host": {"data": None}, - # "/set/data/selected_mic_host": {"data": None}, - # "/get/data/selected_mic_device": {"data": None}, - # "/set/data/selected_mic_device": {"data": None}, - # "/get/data/mic_threshold": {"data": None}, - # "/set/data/mic_threshold": {"data": None}, - # "/get/data/mic_automatic_threshold": {"data": None}, - # "/set/enable/mic_automatic_threshold": {"data": None}, - # "/set/disable/mic_automatic_threshold": {"data": None}, - # "/get/data/mic_record_timeout": {"data": None}, - # "/set/data/mic_record_timeout": {"data": None}, - # "/get/data/mic_phrase_timeout": {"data": None}, - # "/set/data/mic_phrase_timeout": {"data": None}, - # "/get/data/mic_max_phrases": {"data": None}, - # "/set/data/mic_max_phrases": {"data": None}, - # "/get/data/hotkeys": {"data": None}, - # "/set/data/hotkeys": {"data": None}, - # "/get/data/plugins_status": {"data": None}, - # "/set/data/plugins_status": {"data": None}, - # "/get/data/mic_avg_logprob": {"data": None}, - # "/set/data/mic_avg_logprob": {"data": None}, - # "/get/data/mic_no_speech_prob": {"data": None}, - # "/set/data/mic_no_speech_prob": {"data": None}, - # "/set/enable/check_mic_threshold": {"data": None}, - # "/set/disable/check_mic_threshold": {"data": None}, - # "/get/data/mic_word_filter": {"data": None}, - # "/set/data/mic_word_filter": {"data": None}, - # "/get/data/auto_speaker_select": {"data": None}, - # "/set/enable/auto_speaker_select": {"data": None}, - # "/set/disable/auto_speaker_select": {"data": None}, - # "/get/data/selected_speaker_device": {"data": None}, - # "/set/data/selected_speaker_device": {"data": None}, - # "/get/data/speaker_threshold": {"data": None}, - # "/set/data/speaker_threshold": {"data": None}, - # "/get/data/speaker_automatic_threshold": {"data": None}, - # "/set/enable/speaker_automatic_threshold": {"data": None}, - # "/set/disable/speaker_automatic_threshold": {"data": None}, - # "/get/data/speaker_record_timeout": {"data": None}, - # "/set/data/speaker_record_timeout": {"data": None}, - # "/get/data/speaker_phrase_timeout": {"data": None}, - # "/set/data/speaker_phrase_timeout": {"data": None}, - # "/get/data/speaker_max_phrases": {"data": None}, - # "/set/data/speaker_max_phrases": {"data": None}, - # "/get/data/speaker_avg_logprob": {"data": None}, - # "/set/data/speaker_avg_logprob": {"data": None}, - # "/get/data/speaker_no_speech_prob": {"data": None}, - # "/set/data/speaker_no_speech_prob": {"data": None}, - # "/set/enable/check_speaker_threshold": {"data": None}, - # "/set/disable/check_speaker_threshold": {"data": None}, - # "/get/data/selectable_whisper_weight_type_dict": {"data": None}, - # "/get/data/whisper_weight_type": {"data": None}, - # "/set/data/whisper_weight_type": {"data": None}, - # "/run/download_whisper_weight": {"data": None}, - # # VR - # "/get/data/overlay_small_log": {"data": None}, - # "/set/enable/overlay_small_log": {"data": None}, - # "/set/disable/overlay_small_log": {"data": None}, - # "/get/data/overlay_small_log_settings": {"data": None}, - # "/set/data/overlay_small_log_settings": {"data": None}, - # "/get/data/overlay_large_log": {"data": None}, - # "/set/enable/overlay_large_log": {"data": None}, - # "/set/disable/overlay_large_log": {"data": None}, - # "/get/data/overlay_large_log_settings": {"data": None}, - # "/set/data/overlay_large_log_settings": {"data": None}, - # "/get/data/overlay_show_only_translated_messages": {"data": None}, - # "/set/enable/overlay_show_only_translated_messages": {"data": None}, - # "/set/disable/overlay_show_only_translated_messages": {"data": None}, - # # Others - # "/get/data/send_message_format_parts": {"data": None}, - # "/set/data/send_message_format_parts": {"data": None}, - # "/get/data/received_message_format_parts": {"data": None}, - # "/set/data/received_message_format_parts": {"data": None}, - # "/get/data/auto_clear_message_box": {"data": None}, - # "/set/enable/auto_clear_message_box": {"data": None}, - # "/set/disable/auto_clear_message_box": {"data": None}, - # "/get/data/send_only_translated_messages": {"data": None}, - # "/set/enable/send_only_translated_messages": {"data": None}, - # "/set/disable/send_only_translated_messages": {"data": None}, - # "/get/data/logger_feature": {"data": None}, - # "/set/enable/logger_feature": {"data": None}, - # "/set/disable/logger_feature": {"data": None}, - # "/run/open_filepath_logs": {"data": None}, - # "/get/data/vrc_mic_mute_sync": {"data": None}, - # "/set/enable/vrc_mic_mute_sync": {"data": None}, - # "/set/disable/vrc_mic_mute_sync": {"data": None}, - # "/get/data/send_message_to_vrc": {"data": None}, - # "/set/enable/send_message_to_vrc": {"data": None}, - # "/set/disable/send_message_to_vrc": {"data": None}, - # "/get/data/send_received_message_to_vrc": {"data": None}, - # "/set/enable/send_received_message_to_vrc": {"data": None}, - # "/set/disable/send_received_message_to_vrc": {"data": None}, - # # WebSocket Settings - # "/get/data/websocket_host": {"data": None}, - # "/set/data/websocket_host": {"data": None}, - # "/get/data/websocket_port": {"data": None}, - # "/set/data/websocket_port": {"data": None}, - # "/get/data/websocket_server": {"data": None}, - # "/set/enable/websocket_server": {"data": None}, - # "/set/disable/websocket_server": {"data": None}, - # # Advanced Settings - # "/get/data/osc_ip_address": {"data": None}, - # "/set/data/osc_ip_address": {"data": None}, - # "/get/data/osc_port": {"data": None}, - # "/set/data/osc_port": {"data": None}, - # "/get/data/notification_vrc_sfx": {"data": None}, - # "/set/enable/notification_vrc_sfx": {"data": None}, - # "/set/disable/notification_vrc_sfx": {"data": None}, - # "/run/open_filepath_config_file": {"data": None}, - # "/run/feed_watchdog": {"data": None}, + "/run/open_filepath_logs": {"data": None, "status": 200, "result": True}, + "/run/open_filepath_config_file": {"data": None, "status": 200, "result": True}, + "/run/feed_watchdog": {"data": None, "status": 200, "result": True}, } - for endpoint, value in endpoints.items(): - with self.subTest(endpoint=endpoint): - for item in value: - input_data = item["data"] - expected_status = item["status"] - expected_result = item["result"] - result, status = self.main.handleRequest(endpoint, input_data) - print(f"Endpoint: {endpoint}, Status: {status}, Result: {result}") - self.assertEqual(status, expected_status) - self.assertEqual(result, expected_result) + def test_endpoints_on_off_single(self): + print("----ON/OFF系のエンドポイントのテスト----") + for endpoint in self.validity_endpoints: + print(f"Testing endpoint: {endpoint}", end="", flush=True) + if endpoint.startswith("/set/enable/"): + result, status = self.main.handleRequest(endpoint, None) + if result is True and status == 200: + self.config_dict[endpoint.split("/")[-1]] = result + print(f"\t -> {Color.GREEN}[PASS]{Color.RESET} Status: {status}, Result: {result}") + else: + print(f"\t -> {Color.RED}[ERROR]{Color.RESET} Status: {status}, Result: {result}") + print(f"Current config_dict: {self.config_dict}") + break + elif endpoint.startswith("/set/disable/"): + result, status = self.main.handleRequest(endpoint, None) + if result is False and status == 200: + self.config_dict[endpoint.split("/")[-1]] = result + print(f"\t -> {Color.GREEN}[PASS]{Color.RESET} Status: {status}, Result: {result}") + else: + print(f"\t -> {Color.RED}[ERROR]{Color.RESET} Status: {status}, Result: {result}") + print(f"Current config_dict: {self.config_dict}") + break + print("----ON/OFF系のエンドポイントのテスト終了----") - def tearDown(self): - self.main.stop() + def test_endpoints_on_off_random(self): + print("----ON/OFFでのランダムアクセスのテスト----") + for i in range(1000): + endpoint = random.choice(self.validity_endpoints) + print(f"No.{i:04} Testing endpoint: {endpoint}", end="", flush=True) + if endpoint.startswith("/set/enable/"): + result, status = self.main.handleRequest(endpoint, None) + expected_result = True + if result == expected_result and status == 200: + self.config_dict[endpoint.split("/")[-1]] = result + print(f"\t -> {Color.GREEN}[PASS]{Color.RESET} Status: {status}, Result: {result}") + else: + print(f"\t -> {Color.RED}[ERROR]{Color.RESET} Status: {status}, Result: {result}, Expected: {expected_result}") + pprint.pprint(self.config_dict) + break + elif endpoint.startswith("/set/disable/"): + result, status = self.main.handleRequest(endpoint, None) + expected_result = False + if result == expected_result and status == 200: + self.config_dict[endpoint.split("/")[-1]] = result + print(f"\t -> {Color.GREEN}[PASS]{Color.RESET} Status: {status}, Result: {result}") + else: + print(f"\t -> {Color.RED}[ERROR]{Color.RESET} Status: {status}, Result: {result}, Expected: {expected_result}") + pprint.pprint(self.config_dict) + break + print("----ON/OFFでのランダムアクセスのテスト終了----") + + def test_endpoints_continuous(self): + print("----連続テスト----") + # endpoints = ["/set/enable/websocket_server", "/set/disable/websocket_server"] + endpoints = ["/set/enable/transcription_receive", "/set/disable/transcription_receive"] + for i in range(1000): + endpoint = random.choice(endpoints) + print(f"No.{i:04} Testing endpoint: {endpoint}", end="", flush=True) + if endpoint.startswith("/set/enable/"): + result, status = self.main.handleRequest(endpoint, None) + expected_result = True + if result == expected_result and status == 200: + self.config_dict[endpoint.split("/")[-1]] = result + print(f"\t -> {Color.GREEN}[PASS]{Color.RESET} Status: {status}, Result: {result}") + else: + print(f"\t -> {Color.RED}[ERROR]{Color.RESET} Status: {status}, Result: {result}, Expected: {expected_result}") + pprint.pprint(self.config_dict) + break + elif endpoint.startswith("/set/disable/"): + result, status = self.main.handleRequest(endpoint, None) + expected_result = False + if result == expected_result and status == 200: + self.config_dict[endpoint.split("/")[-1]] = result + print(f"\t -> {Color.GREEN}[PASS]{Color.RESET} Status: {status}, Result: {result}") + else: + print(f"\t -> {Color.RED}[ERROR]{Color.RESET} Status: {status}, Result: {result}, Expected: {expected_result}") + pprint.pprint(self.config_dict) + break + print("----連続テスト終了----") if __name__ == "__main__": - unittest.main() \ No newline at end of file + test = TestMainloop() + test.test_endpoints_continuous() \ No newline at end of file