Browse Source

add unit test for SettingLoader

nico 8 years ago
parent
commit
9d346d3026

+ 1 - 1
core/ConfigurationManager/SettingLoader.py

@@ -54,7 +54,7 @@ class SettingLoader(object):
         if self.file_path is None:
             # use default file if not provided
             self.file_path = FILE_NAME
-        self.yaml_config = self._get_yaml_config
+        self.yaml_config = self._get_yaml_config()
         self.settings = self._get_settings()
 
     def _get_yaml_config(self):

+ 8 - 0
core/Models/RestAPI.py

@@ -25,3 +25,11 @@ class RestAPI(object):
                                                        self.password,
                                                        self.active,
                                                        self.port)
+
+    def __eq__(self, other):
+        """
+        This is used to compare 2 objects
+        :param other:
+        :return:
+        """
+        return self.__dict__ == other.__dict__

+ 8 - 0
core/Models/Settings.py

@@ -31,3 +31,11 @@ class Settings(object):
         self.rest_api = rest_api
         self.cache_path = cache_path
         self.machine = platform.machine()   # can be x86_64 or armv7l
+
+    def __eq__(self, other):
+        """
+        This is used to compare 2 objects
+        :param other:
+        :return:
+        """
+        return self.__dict__ == other.__dict__

+ 73 - 0
core/Tests/settings/settings_test.yml

@@ -0,0 +1,73 @@
+---
+# ---------------------------
+# Kalliope default settings
+# Use YAML syntax
+# ---------------------------
+
+# ---------------------------
+# Trigger
+# ---------------------------
+# This is the trigger that will catch your magic work to wake up Kalliope
+default_trigger: "snowboy"
+
+# Trigger engine configuration
+# Available engine are:
+# - snowboy
+triggers:
+  - snowboy:
+      pmdl_file: "trigger/snowboy/resources/kalliope-FR-6samples.pmdl"
+
+
+# ---------------------------
+# Speech to text
+# ---------------------------
+
+# This is the STT that will be used by default
+default_speech_to_text: "google"
+
+speech_to_text:
+  - google:
+      language: "fr-FR"
+
+
+# ---------------------------
+# Text to speech
+# ---------------------------
+# This is the default TTS that will be used by Kalliope to talk.
+default_text_to_speech: "pico2wave"
+# where we store generated audio files from TTS engine to reuse them
+cache_path: "/tmp/kalliope_tts_cache"
+
+text_to_speech:
+  - pico2wave:
+      language: "fr-FR"
+      cache: True
+  - voxygen:
+      voice: "Agnes"
+      cache: True
+
+# ---------------------------
+# Wake up answers
+# ---------------------------
+# When Kalliope detect the hotword/trigger, he will select randomly a phrase in the following list
+# to notify the user that he's listening for orders
+random_wake_up_answers:
+  - "Oui monsieur?"
+
+# You can play a sound when Kalliope detect the hotword/trigger instead of saying something from
+# the `random_wake_up_answers`.
+# Place here the full path of the sound file or just the name of the file in /usr/lib/kalliope/sounds
+# The file must be .wav or .mp3 format. By default two file are provided: ding.wav and dong.wav
+random_wake_up_sounds:
+  - "ding.wav"
+  - "dong.wav"
+
+# ---------------------------
+# Rest API
+# ---------------------------
+rest_api:
+  active: True
+  port: 5000
+  password_protected: True
+  login: admin
+  password: secret

+ 0 - 2
core/Tests/test_brain_loader.py

@@ -97,7 +97,5 @@ class TestBrainLoader(unittest.TestCase):
 
         self.assertTrue(bl1.brain == bl2.brain)
 
-
-
 if __name__ == '__main__':
     unittest.main()

+ 124 - 0
core/Tests/test_settings_loader.py

@@ -0,0 +1,124 @@
+import platform
+import unittest
+
+from core.ConfigurationManager import SettingLoader
+from core.Models.RestAPI import RestAPI
+from core.Models.Settings import Settings
+from core.Models.Stt import Stt
+from core.Models.Trigger import Trigger
+from core.Models.Tts import Tts
+
+
+class TestSettingsoader(unittest.TestCase):
+
+    def setUp(self):
+        self.settings_file_to_test = "core/Tests/settings/settings_test.yml"
+
+        self.settings_dict = {
+            'rest_api':
+                {'active': True, 'login': 'admin', 'password': 'secret',
+                 'password_protected': True, 'port': 5000},
+            'default_trigger': 'snowboy',
+            'triggers': [{'snowboy': {'pmdl_file': 'trigger/snowboy/resources/kalliope-FR-6samples.pmdl'}}],
+            'speech_to_text': [{'google': {'language': 'fr-FR'}}],
+            'cache_path': '/tmp/kalliope_tts_cache',
+            'random_wake_up_answers': ['Oui monsieur?'],
+            'default_text_to_speech': 'pico2wave',
+            'default_speech_to_text': 'google',
+            'random_wake_up_sounds': ['ding.wav', 'dong.wav'],
+            'text_to_speech': [
+                {'pico2wave': {'cache': True, 'language': 'fr-FR'}},
+                {'voxygen': {'voice': 'Agnes', 'cache': True}}
+            ]
+        }
+
+    def test_singleton(self):
+        s1 = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        s2 = SettingLoader.Instance(file_path=self.settings_file_to_test)
+
+        self.assertTrue(s1.settings == s2.settings)
+
+    def test_get_yaml_config(self):
+
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+
+        self.assertEqual(sl.yaml_config, self.settings_dict)
+
+    def test_get_settings(self):
+        settings_object = Settings()
+        settings_object.default_tts_name = "pico2wave"
+        settings_object.default_stt_name = "google"
+        settings_object.default_trigger_name = "snowboy"
+        tts1 = Tts(name="pico2wave", parameters={'cache': True, 'language': 'fr-FR'})
+        tts2 = Tts(name="voxygen", parameters={'voice': 'Agnes', 'cache': True})
+        settings_object.ttss = [tts1, tts2]
+        stt = Stt(name="google", parameters={'language': 'fr-FR'})
+        settings_object.stts = [stt]
+        settings_object.random_wake_up_answers = ['Oui monsieur?']
+        settings_object.random_wake_up_sounds = ['ding.wav', 'dong.wav']
+        trigger1 = Trigger(name="snowboy",
+                           parameters={'pmdl_file': 'trigger/snowboy/resources/kalliope-FR-6samples.pmdl'})
+        settings_object.triggers = [trigger1]
+        settings_object.rest_api = RestAPI(password_protected=True, active=True,
+                                           login="admin", password="secret", port=5000)
+        settings_object.cache_path = '/tmp/kalliope_tts_cache'
+        settings_object.machine = platform.machine()
+
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+
+        self.assertEqual(settings_object, sl.settings)
+
+    def test_get_default_speech_to_text(self):
+        expected_default_speech_to_text = "google"
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+
+        self.assertEqual(expected_default_speech_to_text, sl._get_default_speech_to_text(self.settings_dict))
+
+    def test_get_default_text_to_speech(self):
+        expected_default_text_to_speech = "pico2wave"
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+
+        self.assertEqual(expected_default_text_to_speech, sl._get_default_text_to_speech(self.settings_dict))
+
+    def test_get_default_trigger(self):
+        expected_default_trigger = "snowboy"
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+
+        self.assertEqual(expected_default_trigger, sl._get_default_trigger(self.settings_dict))
+
+    def test_get_stts(self):
+        stt = Stt(name="google", parameters={'language': 'fr-FR'})
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        self.assertEqual([stt], sl._get_stts(self.settings_dict))
+
+    def test_get_ttss(self):
+        tts1 = Tts(name="pico2wave", parameters={'cache': True, 'language': 'fr-FR'})
+        tts2 = Tts(name="voxygen", parameters={'voice': 'Agnes', 'cache': True})
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        self.assertEqual([tts1, tts2], sl._get_ttss(self.settings_dict))
+
+    def test_get_triggers(self):
+        trigger1 = Trigger(name="snowboy",
+                           parameters={'pmdl_file': 'trigger/snowboy/resources/kalliope-FR-6samples.pmdl'})
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        self.assertEqual([trigger1], sl._get_triggers(self.settings_dict))
+
+    def test_get_random_wake_up_answers(self):
+        expected_random_wake_up_answers = ['Oui monsieur?']
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        self.assertEqual(expected_random_wake_up_answers, sl._get_random_wake_up_answers(self.settings_dict))
+
+    def test_get_rest_api(self):
+        expected_rest_api = RestAPI(password_protected=True, active=True,
+                                    login="admin", password="secret", port=5000)
+
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        self.assertEqual(expected_rest_api, sl._get_rest_api(self.settings_dict))
+
+    def test_get_cache_path(self):
+        expected_cache_path = '/tmp/kalliope_tts_cache'
+        sl = SettingLoader.Instance(file_path=self.settings_file_to_test)
+        self.assertEqual(expected_cache_path, sl._get_cache_path(self.settings_dict))
+
+if __name__ == '__main__':
+    unittest.main()

+ 7 - 10
manual_testing.py

@@ -8,18 +8,15 @@ logging.basicConfig()
 logger = logging.getLogger("kalliope")
 logger.setLevel(logging.DEBUG)
 
-file_path = "core/Tests/brains/brain_test.yml"
+# file_path = "core/Tests/brains/brain_test.yml"
+#
+# brainloader1 = BrainLoader.Instance(file_path=file_path)
+#
+# brainloader2 = BrainLoader.Instance(file_path=file_path)
 
-brainloader1 = BrainLoader.Instance(file_path=file_path)
+sl = SettingLoader.Instance(file_path="core/Tests/settings/settings_test.yml")
+print sl.yaml_config
 
-brainloader2 = BrainLoader.Instance(file_path=file_path)
 
-if id(brainloader1) == id(brainloader2):
-    print "Same"
-else:
-    print "Different"
-
-
-print brainloader1.yaml_config