diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5ca1868a8c990ae3ac798d8e8059ffe2eba75858..ddd1ac582372c8c50ebfc1ee6194db3084b19292 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -18,6 +18,9 @@ before_script:
 simple_guru_help:
   stage: test
   script:
-    - whoami
     - python3 guru.py -h
 
+print_connection_status:
+  stage: test
+  script:
+    - python3 guru.py -pcs
\ No newline at end of file
diff --git a/aura.py b/aura.py
index b4f11040ed910ea5d566d22e2efabaf857b4caaa..984022063eb9bc99c2bd56cb40d70ca773624d83 100755
--- a/aura.py
+++ b/aura.py
@@ -1,16 +1,19 @@
 #!/usr/bin/python3
 
-import signal
 import os
+import sys
+import signal
+import unittest
 
 from modules.scheduling.scheduler import AuraScheduler
 from modules.communication.liquidsoap.communicator import LiquidSoapCommunicator
 from modules.communication.redis.adapter import ServerRedisAdapter
 from modules.web.routes import Routes
-from libraries.base.config import AuraConfig
 from libraries.base.logger import AuraLogger
 
-class Aura(AuraConfig, AuraLogger):
+from testing.test import TestConfig, TestLogger
+
+class Aura(AuraLogger):
     server = None
     messenger = None
     controller = None
@@ -19,9 +22,19 @@ class Aura(AuraConfig, AuraLogger):
     def __init__(self):
         super(Aura, self).__init__()
 
+    def test_yourself(self):
+        self.run_test(TestConfig)
+        self.run_test(TestLogger)
+
+    def run_test(self, testingClass):
+        runner = unittest.TextTestRunner()
+        result = runner.run(unittest.makeSuite(testingClass))
+
+    def startup(self):
+
         server = object
 
-#        self.controller = AuraController(self.config)
+        #        self.controller = AuraController(self.config)
         # create scheduler and ls_communicator
         self.liquidsoapcommunicator = LiquidSoapCommunicator(self.config)
         self.scheduler = AuraScheduler(self.config)
@@ -42,6 +55,9 @@ class Aura(AuraConfig, AuraLogger):
 
         signal.signal(signal.SIGUSR1, receive_signal)
 
+        self.join_comm()
+        self.start_web_service()
+
     def join_comm(self):
         # start listener thread
         self.messenger.start()
@@ -60,8 +76,13 @@ class Aura(AuraConfig, AuraLogger):
 # # ## ## ## ## ## # #
 def main():
     aura = Aura()
-    aura.join_comm()
-    aura.start_web_service()
+
+    if len(sys.argv) >= 2 and sys.argv[1] == "--na-gspiast-di-?":
+        aura.test_yourself()
+    else:
+        aura.startup()
+
+
 # # ## ## ## ## ## ## # #
 # # End ENTRY FUNCTION # #
 # # ## ## ## ## ## ## # #
diff --git a/configuration/engine.ini b/configuration/engine.ini
index 6f18c0d39249cbf04011b9985cc739684d2915dd..663e3c3faa6b53a01e3ed8a6d16e2d7b9980306d 100644
--- a/configuration/engine.ini
+++ b/configuration/engine.ini
@@ -73,7 +73,6 @@ importerurl="http://localhost:8008/api/v1/groups/_public/playlists/"
 audiobase="/var/audio/rec"
 altaudiobase="/var/audio/preprod"
 playlistdir="/var/audio/playlists/"
-install_dir="/home/gg/PycharmProjects/engine"
 
 [stream]
 stream="y"
diff --git a/libraries/base/config.py b/libraries/base/config.py
index c4ff1361738e667450e80a913e1900ac02d45f14..b4641dd1937f44a90ddc17ba1026f69b3f88879d 100644
--- a/libraries/base/config.py
+++ b/libraries/base/config.py
@@ -12,6 +12,8 @@ class AuraConfig:
     config = None
 
     def __init__(self):
+        super(AuraConfig, self).__init__()
+        self.config = ConfigReader()
         self.read_config()
 
     def read_config(self):
@@ -19,5 +21,4 @@ class AuraConfig:
         reads aura.ini
         :return:
         """
-        self.config = ConfigReader()
         self.config.load_config()
diff --git a/libraries/base/logger.py b/libraries/base/logger.py
index a1981d389cdb9145a5a06fa3464d255c38d9212a..0e854fb89a47dfa7f2aa5a71f7e92ff2287e901d 100644
--- a/libraries/base/logger.py
+++ b/libraries/base/logger.py
@@ -4,11 +4,14 @@ Aura logger functions
 
 import logging
 
+from libraries.base.config import AuraConfig
 
-class AuraLogger:
+
+class AuraLogger(AuraConfig):
     logger = None
 
     def __init__(self):
+        super(AuraLogger, self).__init__()
         self.__create_logger("AuraEngine")
 
     def __create_logger(self, name):
diff --git a/libraries/database/broadcasts.py b/libraries/database/broadcasts.py
index 9d3a2afd9a61a7ba54eaca956ae4c2a716d305bb..1c2a5be16498c72b9db1a0eedacf5a6e6906390d 100644
--- a/libraries/database/broadcasts.py
+++ b/libraries/database/broadcasts.py
@@ -86,6 +86,17 @@ class Schedule(DB.Model, AuraDatabaseModel):
     show_fallback_id = Column(Integer)
     station_fallback_id = Column(Integer)
 
+    @staticmethod
+    def select_all():
+        # fetching all entries
+        all_entries = DB.session.query(Schedule).filter().order_by(Schedule.schedule_start).all()
+        return all_entries
+
+    @staticmethod
+    def select_by_id(id):
+        entry = DB.session.query(Schedule).filter(Schedule.schedule_id == id).first()
+        return entry
+
     def get_length(self):
         sec1 = int(datetime.datetime.strptime(self.start[0:16].replace(" ", "T"), "%Y-%m-%dT%H:%M").strftime("%s"))
         sec2 = int(datetime.datetime.strptime(self.end[0:16].replace(" ", "T"), "%Y-%m-%dT%H:%M").strftime("%s"))
@@ -181,6 +192,11 @@ class ScheduleEntry(DB.Model, AuraDatabaseModel):
     def select_one(playlist_id, entry_num):
         return DB.session.query(ScheduleEntry).filter(ScheduleEntry.playlist_id == playlist_id, ScheduleEntry.entry_num == entry_num).first()
 
+    # ------------------------------------------------------------------------------------------ #
+    @staticmethod
+    def select_playlist(playlist_id):
+        return DB.session.query(ScheduleEntry).filter(ScheduleEntry.playlist_id == playlist_id).all()
+
     # ------------------------------------------------------------------------------------------ #
     def __str__(self):
         return "ScheduleID: #" + str(self.schedule_id) + " Showname: " + self.schedule.show_name + " starts @ " + str(self.entry_start) + " and plays " + self.source
@@ -206,9 +222,21 @@ class TrackService(DB.Model, AuraDatabaseModel):
     schedule_entry = relationship("ScheduleEntry", primaryjoin="and_(TrackService.playlist_id==ScheduleEntry.playlist_id, TrackService.entry_num==ScheduleEntry.entry_num)", lazy="joined")
 
     @staticmethod
+    # ------------------------------------------------------------------------------------------ #
     def select_one(trackservice_id):
         return DB.session.query(TrackService).filter(TrackService.trackservice_id == trackservice_id).first()
 
+    @staticmethod
+    # ------------------------------------------------------------------------------------------ #
+    def select_by_day(day):
+        day_plus_one = day + datetime.timedelta(days=1)
+        tracks = DB.session.query(TrackService).filter(TrackService.start >= str(day), TrackService.start < str(day_plus_one)).all()
+        return tracks
+
+    # ------------------------------------------------------------------------------------------ #
+    def __str__(self):
+        return "TrackServiceID: #" + str(self.trackservice_id) + " playlist_id: " + str(self.playlist_id) + " started @ " + str(self.start) + " and played " + self.source
+
 # ------------------------------------------------------------------------------------------ #
 # class TrackServiceSchedule(db.Model, AuraDatabaseModel):
 #     """
diff --git a/libraries/exceptions/auraexceptions.py b/libraries/exceptions/auraexceptions.py
index 12bd4c40b8faf89100d7e636a8eecd8ccd547ce3..766ed364b405488219a97384ea79a425f6630b7a 100644
--- a/libraries/exceptions/auraexceptions.py
+++ b/libraries/exceptions/auraexceptions.py
@@ -6,8 +6,10 @@ class NoProgrammeLoadedException(Exception):
 class LQConnectionError(Exception):
     pass
 
+
 class RedisConnectionException(Exception):
     pass
 
+
 class PlaylistException(Exception):
     pass
diff --git a/modules/base/config.py b/modules/base/config.py
index 31fac6bc8f423bace176097c0da8a1b3e0228bc3..4c8200cefd68093b775eec6b9a483a4830dc5548 100644
--- a/modules/base/config.py
+++ b/modules/base/config.py
@@ -124,4 +124,6 @@ class ConfigReader(object):
                 v = config_parser.get(section, key).replace('"', '').strip()
                 self.set(key, v)
 
+        self.set("install_dir", os.path.realpath(__file__ + "../../../.."))
+
 
diff --git a/requirements.txt b/requirements.txt
index 92f76983d90b76a0ce412f2f6d47e0e006a955c4..8775dc8db2bef4c8bc5173db951e27b026644b8a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -7,3 +7,4 @@ redis==2.10.5
 simplejson==3.11.1
 mutagen==1.38
 python-dateutil==2.6.0
+validators==0.12.1
diff --git a/testing/test.py b/testing/test.py
new file mode 100644
index 0000000000000000000000000000000000000000..ef4405919e493613917e802de1fc8b55be18355f
--- /dev/null
+++ b/testing/test.py
@@ -0,0 +1,91 @@
+import os
+import unittest
+import validators
+
+from datetime import datetime
+
+# libraries.base
+from libraries.base.logger import AuraLogger
+from libraries.base.config import AuraConfig
+# libraries.database
+from libraries.database.broadcasts import Schedule, ScheduleEntry, TrackService
+
+
+class TestLogger(unittest.TestCase):
+    aura_logger = None
+
+    def setUp(self):
+        self.aura_logger = AuraLogger()
+
+    def test_logger(self):
+        self.assertTrue(self.aura_logger.logger.hasHandlers())
+
+
+class TestConfig(unittest.TestCase):
+    aura_config = None
+
+    def setUp(self):
+        self.aura_config = AuraConfig()
+
+    def test_config(self):
+        # is ini path correct set?
+        self.assertEqual(self.aura_config.config.ini_path, "/etc/aura/engine.ini")
+
+        # install_dir is set by runtime. is it a directory?
+        self.assertTrue(os.path.isdir(self.aura_config.config.get("install_dir")))
+
+        # calendarurl and importerurl set and valid urls?
+        self.assertTrue(validators.url(self.aura_config.config.get("calendarurl")))
+        self.assertTrue(validators.url(self.aura_config.config.get("importerurl")))
+
+        # is liquidsoap socketdir set and a directory?
+        self.assertTrue(os.path.isdir(self.aura_config.config.get("socketdir")))
+
+        # database settings set?
+        self.assertIsNotNone(self.aura_config.config.get("db_user"))
+        self.assertIsNotNone(self.aura_config.config.get("db_pass"))
+        self.assertIsNotNone(self.aura_config.config.get("db_name"))
+        self.assertIsNotNone(self.aura_config.config.get("db_host"))
+
+class TestSchedule(unittest.TestCase):
+    schedule = None
+
+    def setUp(self):
+        self.schedule = Schedule()
+
+    def test_schedule(self):
+        # select one and check if its not None and a Schedule
+        entry = self.schedule.select_by_id(1)
+        self.assertIsNotNone(entry)
+        self.assertIsInstance(entry, Schedule)
+
+
+class TestScheduleEntry(unittest.TestCase):
+    schedule_entry = None
+
+    def setUp(self):
+        self.schedule_entry = ScheduleEntry()
+
+    def test_schedule_entry(self):
+        # select one playlist and check if its not None, a ScheduleEntry
+        entry = self.schedule_entry.select_playlist(2)
+
+        self.assertIsNotNone(entry)
+        self.assertIsInstance(entry, list)
+        self.assertGreaterEqual(len(entry), 1)
+
+
+class TestTrackService(unittest.TestCase):
+    track_service = None
+
+    def setUp(self):
+        self.track_service = TrackService()
+
+    def test_track_service(self):
+        day = datetime.strptime('19.03.2018', '%d.%m.%Y')
+        entry = self.track_service.select_by_day(day)
+        self.assertIsNotNone(entry)
+        self.assertIsInstance(entry, list)
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file