diff --git a/static-data/www/shared/sidebar/sidebar.css b/static-data/www/shared/sidebar/sidebar.css
new file mode 100644
index 00000000..e69de29b
diff --git a/static-data/www/shared/sidebar/sidebar.html b/static-data/www/shared/sidebar/sidebar.html
new file mode 100644
index 00000000..06d3805b
--- /dev/null
+++ b/static-data/www/shared/sidebar/sidebar.html
@@ -0,0 +1,17 @@
+
+
diff --git a/static-data/www/shared/sidebar/sidebar.js b/static-data/www/shared/sidebar/sidebar.js
new file mode 100644
index 00000000..5af867c6
--- /dev/null
+++ b/static-data/www/shared/sidebar/sidebar.js
@@ -0,0 +1,18 @@
+fetch('/shared/sidebar/sidebar.html', {
+ "method": "get",
+ headers: {
+ "token": webpass
+ }})
+.then((resp) => resp.text())
+.then(function(resp) {
+ document.getElementById('sidebarContainer').innerHTML = resp
+})
+
+
+
+window.addEventListener("keydown", function(event) {
+ if (event.key === "s"){
+ let quickviews = bulmaQuickview.attach()
+ document.getElementsByClassName('sidebarBtn')[0].click()
+ }
+}, true)
diff --git a/tests/test_onionr_threads.py b/tests/test_onionr_threads.py
new file mode 100644
index 00000000..ce3539c7
--- /dev/null
+++ b/tests/test_onionr_threads.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+import sys, os
+sys.path.append(".")
+sys.path.append("src/")
+import unittest, uuid
+from time import sleep
+
+TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
+print("Test directory:", TEST_DIR)
+os.environ["ONIONR_HOME"] = TEST_DIR
+from utils import networkmerger
+from coredb import keydb
+import onionrsetup as setup
+from utils import createdirs
+from onionrthreads import add_onionr_thread
+createdirs.create_dirs()
+setup.setup_config()
+class OnionrThreadsTests(unittest.TestCase):
+
+ def test_onionr_thread(self):
+ l = []
+ def _test_func(obj_list):
+ obj_list.append(1)
+
+ add_onionr_thread(_test_func, (l,), 0.05, 0)
+ sleep(0.05)
+ self.assertGreaterEqual(len(l), 1)
+
+ def test_onionr_thread_initial_sleep(self):
+ l = []
+ def _test_func(obj_list):
+ obj_list.append(1)
+
+ add_onionr_thread(_test_func, (l,), 0.05, 0.1)
+ sleep(0.06)
+ self.assertEqual(len(l), 0)
+
+
+unittest.main()
diff --git a/tests/test_setupkvvars.py b/tests/test_setupkvvars.py
new file mode 100644
index 00000000..f2143195
--- /dev/null
+++ b/tests/test_setupkvvars.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+import sys, os
+sys.path.append(".")
+sys.path.append("src/")
+import unittest, uuid
+import time
+import math
+
+from deadsimplekv import DeadSimpleKV
+import setupkvvars
+
+TEST_DIR = 'testdata/%s-%s' % (uuid.uuid4(), os.path.basename(__file__)) + '/'
+print("Test directory:", TEST_DIR)
+os.environ["ONIONR_HOME"] = TEST_DIR
+from utils import networkmerger
+from coredb import keydb
+import onionrsetup as setup
+from utils import createdirs
+createdirs.create_dirs()
+setup.setup_config()
+
+class SetupKVVarsTest(unittest.TestCase):
+ def test_set_var_values(self):
+
+ kv = DeadSimpleKV()
+ setupkvvars.setup_kv(kv)
+ self.assertEqual(kv.get('blockQueue'), {})
+ self.assertFalse(kv.get('shutdown'))
+ self.assertEqual(kv.get('onlinePeers'), [])
+ self.assertEqual(kv.get('offlinePeers'), [])
+ self.assertEqual(kv.get('peerProfiles'), [])
+ self.assertEqual(kv.get('connectTimes'), {})
+ self.assertEqual(kv.get('currentDownloading'), [])
+ self.assertEqual(kv.get('announceCache'), {})
+ self.assertEqual(kv.get('newPeers'), [])
+ self.assertEqual(kv.get('dbTimestamps'), {})
+ self.assertEqual(kv.get('blocksToUpload'), [])
+ self.assertEqual(kv.get('cooldownPeer'), {})
+ self.assertEqual(kv.get('generating_blocks'), [])
+ self.assertEqual(kv.get('lastNodeSeen'), None)
+ self.assertAlmostEqual(math.floor(kv.get('startTime')), math.floor(time.time()), places=0)
+ self.assertTrue(kv.get('isOnline'))
+
+
+unittest.main()