diff --git a/tests/unit-tests/dummy-forwarder.cpp b/tests/dummy-forwarder.cpp
similarity index 100%
rename from tests/unit-tests/dummy-forwarder.cpp
rename to tests/dummy-forwarder.cpp
diff --git a/tests/unit-tests/dummy-forwarder.hpp b/tests/dummy-forwarder.hpp
similarity index 100%
rename from tests/unit-tests/dummy-forwarder.hpp
rename to tests/dummy-forwarder.hpp
diff --git a/tests/integrated-tests/chronoshare.cpp b/tests/integrated-tests/chronoshare.cpp
new file mode 100644
index 0000000..415f24d
--- /dev/null
+++ b/tests/integrated-tests/chronoshare.cpp
@@ -0,0 +1,281 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (c) 2013-2017 Regents of the University of California.
+ *
+ * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
+ *
+ * ndn-cxx library is free software: you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later version.
+ *
+ * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ *
+ * You should have received copies of the GNU General Public License and GNU Lesser
+ * General Public License along with ndn-cxx, e.g., in COPYING.md file.  If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
+ */
+#define BOOST_TEST_MAIN 1
+#define BOOST_TEST_DYN_LINK 1
+#define BOOST_TEST_MODULE ChronoShare Integrated Tests (ChronoShare)
+
+#include "gui/chronosharegui.hpp"
+#include "test-common.hpp"
+#include "dummy-forwarder.hpp"
+
+#include <boost/make_shared.hpp>
+#include <boost/test/unit_test.hpp>
+#include <boost/bind.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/lexical_cast.hpp>
+#include <thread>
+#include <chrono>
+
+namespace ndn {
+namespace chronoshare {
+namespace tests {
+
+using namespace std;
+namespace fs = boost::filesystem;
+
+_LOG_INIT(Test.Integrated.ChronoShare);
+
+class ChronoShareFixture : public IdentityManagementFixture
+{
+public:
+  ChronoShareFixture()
+    : forwarder(m_io, m_keyChain)
+    , folder("sharefolder")
+    , dir1(fs::path(fs::path(UNIT_TEST_CONFIG_PATH) / "sharefolder1"))
+    , dir2(fs::path(fs::path(UNIT_TEST_CONFIG_PATH) / "sharefolder2"))
+    , argc(0)
+  {
+
+    if (fs::exists(dir1)) {
+      fs::remove_all(dir1);
+    }
+
+    if (fs::exists(dir2)) {
+      fs::remove_all(dir2);
+    }
+
+    fs::create_directory(dir1);
+    fs::create_directory(dir2);
+  }
+
+  ~ChronoShareFixture()
+  {
+    //delete app;
+    // cleanup
+    if (fs::exists(dir1)) {
+      fs::remove_all(dir1);
+    }
+
+    // cleanup
+    if (fs::exists(dir2)) {
+      fs::remove_all(dir2);
+    }
+  }
+
+  void
+  advanceClocks(std::chrono::seconds delay)
+  {
+    std::chrono::milliseconds step = delay;
+    step /= 50;
+    for (int i = 0; i < 50; ++i) {
+      std::this_thread::sleep_for(step);
+      m_io.poll();
+      m_io.reset();
+    }
+  }
+
+  void
+  create_file(const fs::path& ph, const std::string& contents)
+  {
+    std::ofstream f(ph.string().c_str());
+    if (!f) {
+      abort();
+    }
+    if (!contents.empty()) {
+      f << contents;
+    }
+  }
+
+  void
+  run()
+  {
+      std::this_thread::sleep_for(std::chrono::seconds(5));
+
+      _LOG_DEBUG("======created files===========");
+      create_file(dir1 / folder / "test.txt", "hello");
+
+      std::this_thread::sleep_for(std::chrono::seconds(10));
+
+
+      BOOST_REQUIRE_MESSAGE(fs::exists(dir2 / folder / "test.txt"), "user1 failed to notify user2 about test.txt");
+      BOOST_CHECK_EQUAL(fs::file_size(dir1 / folder / "test.txt"), fs::file_size(dir2 / folder / "test.txt"));
+
+
+      fs::path subdir1 = dir1 / folder / "sub";
+      fs::path subdir2 = dir2 / folder / "sub";
+      fs::create_directory(subdir1);
+      for (int i = 0; i < 10; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        create_file(subdir1 / filename.c_str(), boost::lexical_cast<string>(i));
+      }
+
+      std::this_thread::sleep_for(std::chrono::seconds(10));
+      for (int i = 0; i < 10; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        BOOST_REQUIRE_MESSAGE(fs::exists(subdir2 / filename), "user1 failed to notify user2 about"<< filename);
+      }
+
+      //=========check copy file to sub directory==========
+      fs::create_directory(dir1 / folder / "sub1");
+      fs::path subsubdir1 = dir1 / folder / "sub1" / "sub2";
+      fs::path subsubdir2 = dir2 / folder / "sub1" / "sub2";
+      fs::copy_directory(subdir1, subsubdir1);
+      for (int i = 0; i < 5; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        fs::copy(subdir1 / filename.c_str(), subsubdir1 / filename.c_str());
+      }
+
+      std::this_thread::sleep_for(std::chrono::seconds(10));
+      // test.txt
+      // sub/0..9
+      // sub1/sub2/0..4
+      for (int i = 0; i < 5; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        BOOST_REQUIRE_MESSAGE(fs::exists(subsubdir2 / filename), "user1 failed to notify user2 about"<< filename);
+      }
+
+      // =============== check remove files =========================
+      for (int i = 0; i < 7; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        fs::remove(subdir1 / filename.c_str());
+      }
+
+      std::this_thread::sleep_for(std::chrono::seconds(10));
+      // test.txt
+      // sub/7..9
+      // sub1/sub2/0..4
+      for (int i = 0; i < 10; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        if (i < 7)
+          BOOST_REQUIRE_MESSAGE(!fs::exists(subdir2 / filename), "user1 failed to notify user2 about"<< filename);
+        else
+          BOOST_REQUIRE_MESSAGE(fs::exists(subdir2 / filename), "user1 failed to notify user2 about"<< filename);
+      }
+
+      // =================== check remove files again, remove the whole dir this time
+      // ===================
+      // before remove check
+      for (int i = 0; i < 5; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        BOOST_REQUIRE_MESSAGE(fs::exists(subsubdir2 / filename), "user1 failed to notify user2 about"<< filename);
+      }
+      fs::remove_all(subsubdir1);
+
+      std::this_thread::sleep_for(std::chrono::seconds(10));
+      // test.txt
+      // sub/7..9
+      BOOST_REQUIRE_MESSAGE(!fs::exists(subsubdir2), "user1 failed to notify user2 about sub1/sub2");
+
+      // =================== check rename files =======================
+      for (int i = 7; i < 10; i++) {
+        string filename = boost::lexical_cast<string>(i);
+        fs::rename(subdir1 / filename.c_str(), dir1 / folder / filename.c_str());
+      }
+      std::this_thread::sleep_for(std::chrono::seconds(10));
+      // test.txt
+      // 7
+      // 8
+      // 9
+      // sub
+      for (int i = 7; i < 10; i++) {
+        string filename = boost::lexical_cast<string>(i);
+
+        BOOST_REQUIRE_MESSAGE(!fs::exists(subdir2 / filename), "user1 failed to notify user2 about"<< filename);
+        BOOST_REQUIRE_MESSAGE(fs::exists(dir2 / folder / filename), "user1 failed to notify user2 about"<< filename);
+      }
+
+      create_file(dir1 / folder / "add-removal-check.txt", "add-removal-check");
+      std::this_thread::sleep_for(std::chrono::seconds(4));
+      BOOST_REQUIRE_MESSAGE(fs::exists(dir2 / folder / "add-removal-check.txt"),
+                            "user1 failed to notify user2 about add-removal-check.txt");
+
+      fs::remove(dir1 / folder / "add-removal-check.txt");
+      std::this_thread::sleep_for(std::chrono::seconds(4));
+      BOOST_REQUIRE_MESSAGE(!fs::exists(dir2 / folder / "add-removal-check.txt"),
+                            "user1 failed to notify user2 about add-removal-check.txt");
+
+      create_file(dir1 / folder / "add-removal-check.txt", "add-removal-check");
+      std::this_thread::sleep_for(std::chrono::seconds(4));
+      BOOST_REQUIRE_MESSAGE(fs::exists(dir2 / folder / "add-removal-check.txt"),
+                            "user1 failed to notify user2 about add-removal-check.txt");
+
+      fs::remove(dir1 / folder / "add-removal-check.txt");
+      std::this_thread::sleep_for(std::chrono::seconds(4));
+      BOOST_REQUIRE_MESSAGE(!fs::exists(dir2 / folder / "add-removal-check.txt"),
+                            "user1 failed to notify user2 about add-removal-check.txt");
+
+      create_file(dir1 / folder / "add-removal-check.txt", "add-removal-check");
+      std::this_thread::sleep_for(std::chrono::seconds(4));
+      BOOST_REQUIRE_MESSAGE(fs::exists(dir2 / folder / "add-removal-check.txt"),
+                            "user1 failed to notify user2 about add-removal-check.txt");
+
+      fs::remove(dir1 / folder / "add-removal-check.txt");
+      std::this_thread::sleep_for(std::chrono::seconds(4));
+      BOOST_REQUIRE_MESSAGE(!fs::exists(dir2 / folder / "add-removal-check.txt"),
+                            "user1 failed to notify user2 about add-removal-check.txt");
+
+      _LOG_DEBUG("======finish thread===========");
+  }
+
+public:
+  DummyForwarder forwarder;
+  std::string folder;
+  fs::path dir1;
+  fs::path dir2;
+
+  int argc;
+  //TestApp* app;
+};
+
+BOOST_FIXTURE_TEST_SUITE(TestChronoShare, ChronoShareFixture)
+
+BOOST_AUTO_TEST_CASE(Chronoshare)
+{
+  QApplication app(argc, nullptr);
+
+  // do not quit when last window closes
+  app.setQuitOnLastWindowClosed(false);
+  // invoke gui
+  ndn::chronoshare::ChronoShareGui gui1(QString::fromStdString(dir1.generic_string()),
+                                        QString::fromStdString("user1"),
+                                        QString::fromStdString("sharefolder"));
+
+  // invoke gui
+  ndn::chronoshare::ChronoShareGui gui2(QString::fromStdString(dir2.generic_string()),
+                                        QString::fromStdString("user2"),
+                                        QString::fromStdString("sharefolder"));
+
+  QTimer::singleShot(95000, &app, SLOT(quit()));
+
+  _LOG_DEBUG("run thread");
+  std::thread workThread(boost::bind(&ChronoShareFixture::run, this));
+
+  app.exec();
+  workThread.join();
+  _LOG_DEBUG("thread finished");
+}
+
+BOOST_AUTO_TEST_SUITE_END()
+
+} // namespace tests
+} // namespace chronoshare
+} // namespace ndn
diff --git a/tests/integrated-tests/fs-watcher.t.cpp b/tests/integrated-tests/fs-watcher.cpp
similarity index 95%
rename from tests/integrated-tests/fs-watcher.t.cpp
rename to tests/integrated-tests/fs-watcher.cpp
index 05f9764..c29da56 100644
--- a/tests/integrated-tests/fs-watcher.t.cpp
+++ b/tests/integrated-tests/fs-watcher.cpp
@@ -17,6 +17,9 @@
  *
  * See AUTHORS.md for complete list of ChronoShare authors and contributors.
  */
+#define BOOST_TEST_MAIN 1
+#define BOOST_TEST_DYN_LINK 1
+#define BOOST_TEST_MODULE ChronoShare Integrated Tests (FsWatcher)
 
 #include "fs-watcher.hpp"
 #include "test-common.hpp"
@@ -32,8 +35,7 @@
 #include <iostream>
 #include <thread>
 #include <set>
-
-#include "fs-watcher.t.hpp"
+#include <QtWidgets>
 
 using namespace std;
 namespace fs = boost::filesystem;
@@ -44,14 +46,6 @@
 namespace chronoshare {
 namespace tests {
 
-fsWatcherApp::fsWatcherApp(int& argc, char** argv)
-  : QCoreApplication(argc, argv)
-{
-  connect(this, SIGNAL(stopApp()), this, SLOT(quit()), Qt::QueuedConnection);
-}
-
-fsWatcherApp::~fsWatcherApp() = default;
-
 class TestFSWatcherFixture : public IdentityManagementFixture
 {
 public:
@@ -115,19 +109,21 @@
   void
   run()
   {
-    app = new fsWatcherApp(argc, nullptr);
+    QApplication app(argc, nullptr);
     new FsWatcher(m_io, dir.string().c_str(),
                   std::bind(&TestFSWatcherFixture::onChange, this, std::ref(files), _1),
                   std::bind(&TestFSWatcherFixture::onDelete, this, std::ref(files), _1),
-                  app);
-    app->exec();
+                  &app);
+
+    QTimer::singleShot(21000, &app, SLOT(quit()));
+    app.exec();
   }
 
 public:
   fs::path dir;
   set<string> files;
   int argc;
-  fsWatcherApp* app;
+  //fsWatcherApp* app;
 };
 
 BOOST_FIXTURE_TEST_SUITE(TestFsWatcher, TestFSWatcherFixture)
@@ -255,7 +251,7 @@
   this->advanceClocks(std::chrono::seconds(2));
   BOOST_CHECK(files.find("add-removal-check.txt") == files.end());
 
-  emit app->stopApp();
+  //emit app->stopApp();
 
   workThread.join();
 }
diff --git a/tests/integrated-tests/fs-watcher.t.hpp b/tests/integrated-tests/fs-watcher.t.hpp
deleted file mode 100644
index 40c524b..0000000
--- a/tests/integrated-tests/fs-watcher.t.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2013-2017, Regents of the University of California.
- *
- * This file is part of ChronoShare, a decentralized file sharing application over NDN.
- *
- * ChronoShare is free software: you can redistribute it and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software Foundation, either
- * version 3 of the License, or (at your option) any later version.
- *
- * ChronoShare is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU General Public License for more details.
- *
- * You should have received copies of the GNU General Public License along with
- * ChronoShare, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
- *
- * See AUTHORS.md for complete list of ChronoShare authors and contributors.
- */
-
-#include <QtWidgets>
-
-namespace ndn {
-namespace chronoshare {
-namespace tests {
-
-class fsWatcherApp : public QCoreApplication
-{
-Q_OBJECT
-
-signals:
-  void
-  stopApp();
-
-public:
-  fsWatcherApp(int& argc, char** argv);
-  ~fsWatcherApp();
-};
-
-} // namespace tests
-} // namespace chronoshare
-} // namespace ndn
diff --git a/tests/integrated-tests/wscript b/tests/integrated-tests/wscript
new file mode 100644
index 0000000..3898a81
--- /dev/null
+++ b/tests/integrated-tests/wscript
@@ -0,0 +1,15 @@
+from waflib import Utils
+
+top = '..'
+
+def build(bld):
+
+    for i in bld.path.ant_glob(['*.cpp']):
+        name = str(i)[str.rfind(str(i),'/'):-len(".cpp")]
+        bld(features='qt5 cxx cxxprogram',
+            target=name,
+            source=[i],
+            use='chronoshare core-objects adhoc http_server chronoshare_gui boost-tests-base QT5CORE QT5WIDGETS',
+            includes='..',
+            defines=['UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % (bld.bldnode)],
+            install_path=None)
diff --git a/tests/wscript b/tests/wscript
index e900761..d624a7c 100644
--- a/tests/wscript
+++ b/tests/wscript
@@ -8,32 +8,37 @@
     if not bld.env['WITH_TESTS']:
         return
 
+    # precompiled headers (if enabled)
     bld(features='cxx',
-        target='tests-base',
         name='tests-base',
+        target='tests-base',
+        headers=['boost-test.hpp'],
+        use='NDN_CXX BOOST',
+        includes='.')
+
+    # core modules that can be shared between unit and integrated tests
+    bld(features="cxx",
+        target="boost-tests-base",
         source=bld.path.ant_glob(['*.cpp'], excl='main.cpp'),
-        use='core-objects',
-        includes='.. .',
-        defines='UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % (bld.bldnode)
-      )
+        use='core-objects tests-base BOOST',
+        includes='.',
+        defines=['UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % (bld.bldnode)],
+        install_path=None)
 
-    for module, name in {"unit": "Unit Tests",
-                         "integrated": "Integrated Tests"}.items():
-        bld(target='%s-tests-main' % module,
-            name='%s-tests-main' % module,
-            features='cxx',
-            use='core-objects BOOST',
-            source='main.cpp',
-            defines=['BOOST_TEST_MODULE=%s' % name]
-        )
+    bld(target='unit-tests-main',
+        name='unit-tests-main',
+        features='cxx',
+        use='tests-base boost-tests-base BOOST',
+        source='main.cpp',
+        defines=['BOOST_TEST_MODULE=Unit Test'])
 
-        tests = bld.program(
-            target='../%s-tests' % module,
-            features='qt5 cxx cxxprogram',
-            moc='' if module == 'unit' else 'integrated-tests/fs-watcher.t.hpp',
-            source=bld.path.ant_glob(['%s-tests/*.cpp' % module]),
-            use='chronoshare core-objects fs-watcher tests-base %s-tests-main QT5CORE QT5WIDGETS' % module,
-            install_path=None,
-            defines=['UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % (bld.bldnode)],
-            includes='.. ../src .',
-        )
+    unit_tests=bld(
+        target='../unit-tests',
+        features='cxx cxxprogram',
+        source=bld.path.ant_glob(['unit-tests/*.cpp']),
+        use='core-objects adhoc chronoshare http_server chronoshare_gui unit-tests-main',
+        install_path=None,
+        defines=['UNIT_TEST_CONFIG_PATH=\"%s/tmp-files/\"' % (bld.bldnode)],
+        includes='.. ../src .')
+
+    bld.recurse('integrated-tests')
\ No newline at end of file
