Merge remote-tracking branch 'upstream/master'
diff --git a/README.md b/README.md
index 6d54ca5..7016a22 100755
--- a/README.md
+++ b/README.md
@@ -89,7 +89,7 @@
 
 ### Run Unit Tests
 * `cd ~/son-emu`
-* `sudo py.test -v src/emuvim` (equivalent to `python setup.py test -v --addopts 'src/emuvim'` but with direct access to the commandline arguments)
+* `sudo py.test -v src/emuvim/test/unittests`
 
 ### CLI
 * [Full CLI command documentation](https://github.com/sonata-nfv/son-emu/wiki/CLI-Command-Overview)
diff --git a/src/emuvim/test/__main__.py b/src/emuvim/test/__main__.py
deleted file mode 100755
index f7fa66d..0000000
--- a/src/emuvim/test/__main__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-import runner
-import os
-
-
-if __name__ == '__main__':
-    thisdir = os.path.dirname( os.path.realpath( __file__ ) )
-    runner.main(thisdir)
diff --git a/src/emuvim/test/integrationtests/__init__.py b/src/emuvim/test/integrationtests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/emuvim/test/integrationtests/__init__.py
diff --git a/src/emuvim/test/runner.py b/src/emuvim/test/runner.py
deleted file mode 100755
index 469a99e..0000000
--- a/src/emuvim/test/runner.py
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/usr/bin/env python
-
-"""
-Run all tests
- -v : verbose output
- -e : emulator test only (no API tests)
- -a : API tests only
-"""
-
-from unittest import defaultTestLoader, TextTestRunner, TestSuite
-import os
-import sys
-from mininet.util import ensureRoot
-from mininet.clean import cleanup
-from mininet.log import setLogLevel
-
-
-def runTests( testDir, verbosity=1, emuonly=False, apionly=False ):
-    "discover and run all tests in testDir"
-    # ensure inport paths work
-    sys.path.append("%s/.." % testDir)
-    # ensure root and cleanup before starting tests
-    ensureRoot()
-    cleanup()
-    # discover all tests in testDir
-    testSuite = defaultTestLoader.discover( testDir )
-    if emuonly:
-        testSuiteFiltered = [s for s in testSuite if "Emulator" in str(s)]
-        testSuite = TestSuite()
-        testSuite.addTests(testSuiteFiltered)
-    if apionly:
-        testSuiteFiltered = [s for s in testSuite if "Api" in str(s)]
-        testSuite = TestSuite()
-        testSuite.addTests(testSuiteFiltered)
-
-    # run tests
-    TextTestRunner( verbosity=verbosity ).run( testSuite )
-
-
-def main(thisdir):
-    setLogLevel( 'warning' )
-    # get the directory containing example tests
-    vlevel = 2 if '-v' in sys.argv else 1
-    emuonly = ('-e' in sys.argv)
-    apionly = ('-a' in sys.argv)
-    runTests(
-        testDir=thisdir, verbosity=vlevel, emuonly=emuonly, apionly=apionly)
-
-
-if __name__ == '__main__':
-    thisdir = os.path.dirname( os.path.realpath( __file__ ) )
-    main(thisdir)
diff --git a/src/emuvim/test/test_api_zerorpc.py b/src/emuvim/test/test_api_zerorpc.py
deleted file mode 100755
index 2830872..0000000
--- a/src/emuvim/test/test_api_zerorpc.py
+++ /dev/null
@@ -1 +0,0 @@
-#TODO we'll need this at some time. But I'am lazy. A good REST API seems to be more important.
diff --git a/src/emuvim/test/unittests/__init__.py b/src/emuvim/test/unittests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/emuvim/test/unittests/__init__.py
diff --git a/src/emuvim/test/test_emulator.py b/src/emuvim/test/unittests/test_emulator.py
similarity index 100%
rename from src/emuvim/test/test_emulator.py
rename to src/emuvim/test/unittests/test_emulator.py
diff --git a/src/emuvim/test/test_resourcemodel.py b/src/emuvim/test/unittests/test_resourcemodel.py
similarity index 98%
rename from src/emuvim/test/test_resourcemodel.py
rename to src/emuvim/test/unittests/test_resourcemodel.py
index a1d273c..165893d 100644
--- a/src/emuvim/test/test_resourcemodel.py
+++ b/src/emuvim/test/unittests/test_resourcemodel.py
@@ -1,5 +1,6 @@
 import time
 import os
+import unittest
 from emuvim.test.base import SimpleTestTopology
 from emuvim.dcemulator.resourcemodel import BaseResourceModel, ResourceFlavor, NotEnoughResourcesAvailable, ResourceModelRegistrar
 from emuvim.dcemulator.resourcemodel.upb.simple import UpbSimpleCloudDcRM, UpbOverprovisioningCloudDcRM, UpbDummyRM
@@ -211,15 +212,13 @@
         rm.free(c1)
         self.assertTrue(rm.dc_alloc_cu == 0)
 
+    @unittest.skipIf(os.environ.get("SON_EMU_IN_DOCKER") is not None,
+                     "skipping test when running inside Docker container")
     def testInRealTopo(self):
         """
         Start a real container and check if limitations are really passed down to Conteinernet.
         :return:
         """
-        # ATTENTION: This test should only be executed if emu runs not inside a Docker container,
-        # because it manipulates cgroups.
-        if os.environ.get("SON_EMU_IN_DOCKER") is not None:
-            return
         # create network
         self.createNet(nswitches=0, ndatacenter=1, nhosts=2, ndockers=0)
         # setup links
diff --git a/src/emuvim/test/test_sonata_dummy_gatekeeper.py b/src/emuvim/test/unittests/test_sonata_dummy_gatekeeper.py
similarity index 81%
rename from src/emuvim/test/test_sonata_dummy_gatekeeper.py
rename to src/emuvim/test/unittests/test_sonata_dummy_gatekeeper.py
index 33a1d57..428a51f 100644
--- a/src/emuvim/test/test_sonata_dummy_gatekeeper.py
+++ b/src/emuvim/test/unittests/test_sonata_dummy_gatekeeper.py
@@ -6,11 +6,12 @@
 from emuvim.test.base import SimpleTestTopology
 from emuvim.api.sonata import SonataDummyGatekeeperEndpoint
 
-
+PACKAGE_PATH = "misc/sonata-demo-docker.son"
 
 class testSonataDummyGatekeeper(SimpleTestTopology):
 
-    @unittest.skip("disabled test since ubuntu:trusty not used in current example package")
+    @unittest.skipIf(os.environ.get("SON_EMU_IN_DOCKER") is None,
+                     "skipping dummy GK test in local environment")
     def testAPI(self):
         # create network
         self.createNet(nswitches=0, ndatacenter=2, nhosts=2, ndockers=0)
@@ -28,22 +29,12 @@
         self.startNet()
         time.sleep(1)
 
-        # download example from GitHub
-        print "downloading latest son-demo.son from GitHub"
-        subprocess.call(
-            ["wget",
-             "http://github.com/sonata-nfv/son-schema/blob/master/package-descriptor/examples/sonata-demo.son?raw=true",
-             "-O",
-             "son-demo.son"]
-        )
-
         print "starting tests"
         # board package
-        files = {"package": open("son-demo.son", "rb")}
+        files = {"package": open(PACKAGE_PATH, "rb")}
         r = requests.post("http://127.0.0.1:5000/packages", files=files)
         self.assertEqual(r.status_code, 200)
         self.assertTrue(r.json().get("service_uuid") is not None)
-        os.remove("son-demo.son")
 
         # instantiate service
         service_uuid = r.json().get("service_uuid")
diff --git a/utils/ci/build_01_unit_tests.sh b/utils/ci/build_01_unit_tests.sh
index ab6ece3..5544503 100755
--- a/utils/ci/build_01_unit_tests.sh
+++ b/utils/ci/build_01_unit_tests.sh
@@ -10,4 +10,4 @@
 rm -rf utils/ci/junit-xml/*
 
 # Launch the unit testing on emuvim
-py.test -v --junit-xml=utils/ci/junit-xml/pytest_emuvim.xml src/emuvim
+py.test -v --junit-xml=utils/ci/junit-xml/pytest_emuvim.xml src/emuvim/test/unittests
diff --git a/utils/docker/Dockerfile b/utils/docker/Dockerfile
index 7270ab5..ef6c8fb 100644
--- a/utils/docker/Dockerfile
+++ b/utils/docker/Dockerfile
@@ -15,3 +15,5 @@
     && echo 'Done'
 
 ENTRYPOINT ["/son-emu/utils/docker/entrypoint.sh"]
+
+EXPORT
\ No newline at end of file