http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/bundle_context.c
----------------------------------------------------------------------
diff --git a/framework/private/src/bundle_context.c 
b/framework/private/src/bundle_context.c
index 8a52790..35d27ce 100644
--- a/framework/private/src/bundle_context.c
+++ b/framework/private/src/bundle_context.c
@@ -45,7 +45,6 @@ celix_status_t bundleContext_create(framework_pt framework, 
framework_logger_pt
         } else {
             context->framework = framework;
             context->bundle = bundle;
-            context->logger = logger;
 
             *bundle_context = context;
         }

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/bundle_revision.c
----------------------------------------------------------------------
diff --git a/framework/private/src/bundle_revision.c 
b/framework/private/src/bundle_revision.c
index c91976c..6c538f9 100644
--- a/framework/private/src/bundle_revision.c
+++ b/framework/private/src/bundle_revision.c
@@ -34,7 +34,7 @@
 #include "archive.h"
 #include "celix_log.h"
 
-celix_status_t bundleRevision_create(framework_logger_pt loggera, char *root, 
char *location, long revisionNr, char *inputFile, bundle_revision_pt 
*bundle_revision) {
+celix_status_t bundleRevision_create(char *root, char *location, long 
revisionNr, char *inputFile, bundle_revision_pt *bundle_revision) {
     celix_status_t status = CELIX_SUCCESS;
        bundle_revision_pt revision = NULL;
 
@@ -61,7 +61,6 @@ celix_status_t bundleRevision_create(framework_logger_pt 
loggera, char *root, ch
                 revision->revisionNr = revisionNr;
                 revision->root = strdup(root);
                 revision->location = strdup(location);
-                revision->logger = loggera;
 
                 *bundle_revision = revision;
 

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/celix_errorcodes.c
----------------------------------------------------------------------
diff --git a/framework/private/src/celix_errorcodes.c 
b/framework/private/src/celix_errorcodes.c
index ac24c10..ec25cff 100644
--- a/framework/private/src/celix_errorcodes.c
+++ b/framework/private/src/celix_errorcodes.c
@@ -48,7 +48,7 @@ static char *celix_error_string(celix_status_t statcode) {
        case CELIX_SERVICE_EXCEPTION:
         return "Service exception";
        }
-       return "Unkown code";
+       return "Unknown code";
 }
 
 char *celix_strerror(celix_status_t errorcode, char *buffer, size_t 
bufferSize) {

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/framework.c
----------------------------------------------------------------------
diff --git a/framework/private/src/framework.c 
b/framework/private/src/framework.c
index 5ca35a5..47aabb3 100644
--- a/framework/private/src/framework.c
+++ b/framework/private/src/framework.c
@@ -234,7 +234,7 @@ celix_status_t framework_create(framework_pt *framework, 
properties_pt config) {
             (*framework)->logger = logger;
 
 
-            status = CELIX_DO_IF(status, bundle_create(&(*framework)->bundle, 
(*framework)->logger));
+            status = CELIX_DO_IF(status, bundle_create(&(*framework)->bundle));
             status = CELIX_DO_IF(status, 
arrayList_create(&(*framework)->globalLockWaitersList));
             status = CELIX_DO_IF(status, 
bundle_setFramework((*framework)->bundle, (*framework)));
             if (status == CELIX_SUCCESS) {
@@ -372,7 +372,7 @@ celix_status_t fw_init(framework_pt framework) {
        if (status == CELIX_SUCCESS) {
            if ((state == OSGI_FRAMEWORK_BUNDLE_INSTALLED) || (state == 
OSGI_FRAMEWORK_BUNDLE_RESOLVED)) {
                bundle_state_e state;
-               status = CELIX_DO_IF(status, 
bundleCache_create(framework->configurationMap, framework->logger, 
&framework->cache));
+               status = CELIX_DO_IF(status, 
bundleCache_create(framework->configurationMap,&framework->cache));
                status = CELIX_DO_IF(status, bundle_getState(framework->bundle, 
&state));
                if (status == CELIX_SUCCESS) {
                    if (state == OSGI_FRAMEWORK_BUNDLE_INSTALLED) {

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/module.c
----------------------------------------------------------------------
diff --git a/framework/private/src/module.c b/framework/private/src/module.c
index 15d5c0e..17fea5c 100644
--- a/framework/private/src/module.c
+++ b/framework/private/src/module.c
@@ -258,6 +258,19 @@ void module_removeDependentImporter(module_pt module, 
module_pt importer) {
     arrayList_removeElement(module->dependentImporters, importer);
 }
 
+//----------------------------------------------------
+//TODO add implementation (functions not implemented but already exported)
+array_list_pt module_getDependentRequirers(module_pt module) {
+       return NULL;
+}
+
+void module_addDependentRequirer(module_pt module, module_pt requirer) {
+}
+
+void module_removeDependentRequirer(module_pt module, module_pt requirer) {
+}
+//----------------------------------------------------
+
 array_list_pt module_getDependents(module_pt module) {
     array_list_pt dependents = NULL;
     arrayList_create(&dependents);

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/service_tracker.c
----------------------------------------------------------------------
diff --git a/framework/private/src/service_tracker.c 
b/framework/private/src/service_tracker.c
index 1221e0c..b81b4d0 100644
--- a/framework/private/src/service_tracker.c
+++ b/framework/private/src/service_tracker.c
@@ -200,7 +200,7 @@ void 
*serviceTracker_getServiceByReference(service_tracker_pt tracker, service_r
        tracked_pt tracked;
        unsigned int i;
        for (i = 0; i < arrayList_size(tracker->tracked); i++) {
-               bool equals;
+               bool equals = false;
                tracked = (tracked_pt) arrayList_get(tracker->tracked, i);
                serviceReference_equals(reference, tracked->reference, &equals);
                if (equals) {
@@ -232,7 +232,7 @@ static celix_status_t 
serviceTracker_track(service_tracker_pt tracker, service_r
        int found = -1;
        unsigned int i;
        for (i = 0; i < arrayList_size(tracker->tracked); i++) {
-               bool equals;
+               bool equals = false;
                tracked = (tracked_pt) arrayList_get(tracker->tracked, i);
                serviceReference_equals(reference, tracked->reference, &equals);
                if (equals) {

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/src/version_range.c
----------------------------------------------------------------------
diff --git a/framework/private/src/version_range.c 
b/framework/private/src/version_range.c
index 6f4b598..cc53691 100644
--- a/framework/private/src/version_range.c
+++ b/framework/private/src/version_range.c
@@ -135,7 +135,7 @@ celix_status_t versionRange_parse(char * rangeStr, 
version_range_pt *range) {
        celix_status_t status;
        if (strchr(rangeStr, ',') != NULL) {
                        int vlowL = strcspn(rangeStr+1, ",");
-                       char * vlow = (char *) malloc(sizeof(*vlow * (vlowL + 
1)));
+                       char * vlow = (char *) malloc(sizeof(char) * (vlowL + 
1));
                        if (!vlow) {
                                status = CELIX_ENOMEM;
                        } else {
@@ -144,7 +144,7 @@ celix_status_t versionRange_parse(char * rangeStr, 
version_range_pt *range) {
                                vlow = strncpy(vlow, rangeStr+1, vlowL);
                                vlow[vlowL] = '\0';
                                vhighL = strlen(rangeStr+1) - vlowL - 2;
-                               vhigh = (char *) malloc(sizeof(*vhigh * 
(vhighL+1)));
+                               vhigh = (char *) malloc(sizeof(char) * 
(vhighL+1));
                                if (!vhigh) {
                                        status = CELIX_ENOMEM;
                                } else {                                        
@@ -169,7 +169,10 @@ celix_status_t versionRange_parse(char * rangeStr, 
version_range_pt *range) {
                                                                );
                                                }
                                        }
+                                       free(vhigh);
                                }
+                               free(vlow);
+
                }
        } else {
                version_pt version = NULL;

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/attribute_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/attribute_test.cpp 
b/framework/private/test/attribute_test.cpp
index 5847c02..c378b3a 100644
--- a/framework/private/test/attribute_test.cpp
+++ b/framework/private/test/attribute_test.cpp
@@ -25,6 +25,7 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
+#include <string.h>
 
 #include "CppUTest/TestHarness.h"
 #include "CppUTest/TestHarness_c.h"
@@ -35,17 +36,32 @@ extern "C" {
 #include "attribute_private.h"
 #include "celix_log.h"
 
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x42;
 }
 
 int main(int argc, char** argv) {
        return RUN_ALL_TESTS(argc, argv);
 }
 
+static char* my_strdup(const char* s){
+       if(s==NULL){
+               return NULL;
+       }
+
+       size_t len = strlen(s);
+
+       char *d = (char*) calloc (len + 1,sizeof(char));
+
+       if (d == NULL){
+               return NULL;
+       }
+
+       strncpy (d,s,len);
+       return d;
+}
+
 TEST_GROUP(attribute) {
        void setup(void) {
-               logger = (framework_logger_pt) malloc(sizeof(*logger));
-               logger->logFunction = frameworkLogger_log;
        }
 
        void teardown() {
@@ -55,13 +71,22 @@ TEST_GROUP(attribute) {
 };
 
 TEST(attribute, create) {
-       char key[] = "key";
-       char value[] = "value";
+       char * key = (char*) my_strdup("key");
+       char * value = (char*) my_strdup("value");
 
        attribute_pt attribute = NULL;
        celix_status_t status = attribute_create(key, value, &attribute);
        STRCMP_EQUAL(key, attribute->key);
        STRCMP_EQUAL(value, attribute->value);
+       LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       mock().expectOneCall("framework_logCode")
+                       .withParameter("code", CELIX_ILLEGAL_ARGUMENT);
+
+       status = attribute_create(NULL, NULL, NULL);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+       attribute_destroy(attribute);
 }
 
 TEST(attribute, getKey) {
@@ -75,6 +100,8 @@ TEST(attribute, getKey) {
        char *actual = NULL;
        celix_status_t status = attribute_getKey(attribute, &actual);
        STRCMP_EQUAL(key, actual);
+
+       free(attribute);
 }
 
 TEST(attribute, getValue) {
@@ -88,4 +115,6 @@ TEST(attribute, getValue) {
        char *actual = NULL;
        celix_status_t status = attribute_getValue(attribute, &actual);
        STRCMP_EQUAL(value, actual);
+
+       free(attribute);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/bundle_archive_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/bundle_archive_test.cpp 
b/framework/private/test/bundle_archive_test.cpp
index e8f5f60..f5baa2d 100644
--- a/framework/private/test/bundle_archive_test.cpp
+++ b/framework/private/test/bundle_archive_test.cpp
@@ -25,6 +25,10 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <unistd.h>
+#include <string.h>
 
 #include "CppUTest/TestHarness.h"
 #include "CppUTest/TestHarness_c.h"
@@ -33,18 +37,100 @@
 
 extern "C" {
 #include "bundle_archive.h"
-
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x42;
 }
 
 int main(int argc, char** argv) {
        return RUN_ALL_TESTS(argc, argv);
 }
 
+static char* my_strdup(const char* s) {
+       if (s == NULL) {
+               return NULL;
+       }
+
+       size_t len = strlen(s);
+
+       char *d = (char*) calloc(len + 1, sizeof(char));
+
+       if (d == NULL) {
+               return NULL;
+       }
+
+       strncpy(d, s, len);
+       return d;
+}
+
+static int remove_directory_recursive(const char *path) {
+       DIR *d = opendir(path);
+       size_t path_len = strlen(path);
+       int r = -1;
+
+       if (d) {
+               struct dirent *p;
+
+               r = 0;
+
+               while (!r && (p = readdir(d))) {
+                       int r2 = -1;
+                       char *buf;
+                       size_t len;
+
+                       /* Skip the names "." and ".." as we don't want to 
recurse on them. */
+                       if (!strcmp(p->d_name, ".") || !strcmp(p->d_name, 
"..")) {
+                               continue;
+                       }
+
+                       len = path_len + strlen(p->d_name) + 2;
+                       buf = (char*) malloc(len);
+
+                       if (buf) {
+                               struct stat statbuf;
+                               snprintf(buf, len, "%s/%s", path, p->d_name);
+
+                               if (!stat(buf, &statbuf)) {
+                                       if (S_ISDIR(statbuf.st_mode)) {
+                                               r2 = 
remove_directory_recursive(buf);
+                                       } else {
+                                               r2 = unlink(buf);
+                                       }
+                               }
+
+                               free(buf);
+                       }
+                       r = r2;
+               }
+               closedir(d);
+       }
+       if (!r) {
+               r = rmdir(path);
+       }
+       return r;
+}
+
+//----------------------TESTGROUP DEFINES----------------------
+
 TEST_GROUP(bundle_archive) {
+       bundle_archive_pt bundle_archive;
+       char * bundle_path;                     //uses the default build shell 
bundle
+       char * alternate_bundle_path;//alternative bundle, if shell bundle not 
found
+       char cache_path[512];                           //a local cache folder
+
        void setup(void) {
-           logger = (framework_logger_pt) malloc(sizeof(*logger));
-        logger->logFunction = frameworkLogger_log;
+               char cwd[512];
+               bundle_archive = NULL;
+               bundle_path = (char*) "../shell/shell.zip"; //uses the default 
build shell bundle
+               alternate_bundle_path = (char*) 
"../log_service/log_service.zip"; //alternative bundle, if shell bundle not 
found
+               snprintf(cache_path, sizeof(cache_path), "%s/.cache", 
getcwd(cwd, sizeof(cwd)));                                                      
  //a local cache folder
+               struct stat file_stat;
+
+               if (stat(bundle_path, &file_stat) < 0) {
+                       if (stat(alternate_bundle_path, &file_stat) < 0) {
+                               FAIL("failed to find needed test bundle");
+                       } else {
+                               bundle_path = alternate_bundle_path;
+                       }
+               }
        }
 
        void teardown() {
@@ -53,6 +139,238 @@ TEST_GROUP(bundle_archive) {
        }
 };
 
+//----------------------TEST DEFINES----------------------
+//WARNING: if one test fails, it does not clean up properly,
+//causing most if not all of the subsequent tests to also fail
+
+TEST(bundle_archive, create) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+       bundle_archive = (bundle_archive_pt) 0x42;
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleArchive_create(cache_path, 5, 
bundle_path, NULL, &bundle_archive));
+
+       bundle_archive = NULL;
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 5, 
bundle_path, NULL, &bundle_archive));
+       CHECK(bundle_archive != NULL);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, createSystemBundleArchive) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+       bundle_archive = (bundle_archive_pt) 0x42;
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, 
bundleArchive_createSystemBundleArchive(&bundle_archive ));
+
+       bundle_archive = NULL;
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_createSystemBundleArchive(&bundle_archive));
+       CHECK(bundle_archive != NULL);
+
+       //LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, recreate) {
+       char * get_root;
+       char * get_location;
+       bundle_archive_pt recr_archive = NULL;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 5, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_recreate(cache_path, 
&recr_archive));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getArchiveRoot(recr_archive, 
&get_root));
+       STRCMP_EQUAL(cache_path, get_root);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getLocation(recr_archive, 
&get_location));
+       STRCMP_EQUAL(bundle_path, get_location);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(recr_archive));
+}
+
+TEST(bundle_archive, getId) {
+       long get_id;
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, -42, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getId(bundle_archive, 
&get_id));
+       LONGS_EQUAL(-42, get_id);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+       bundle_archive = NULL;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 666, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getId(bundle_archive, 
&get_id));
+       LONGS_EQUAL(666, get_id);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, getLocation) {
+       char * get_loc;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getLocation(bundle_archive, 
&get_loc));
+       STRCMP_EQUAL(bundle_path, get_loc);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
 
+TEST(bundle_archive, getArchiveRoot) {
+       char * get_root;
 
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getArchiveRoot(bundle_archive, 
&get_root));
+       STRCMP_EQUAL(cache_path, get_root);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, getCurrentRevisionNumber) {
+       long get_rev_num;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getCurrentRevisionNumber(bundle_archive, &get_rev_num));
+       LONGS_EQUAL(0, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_revise(bundle_archive, 
bundle_path, NULL));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getCurrentRevisionNumber(bundle_archive,
+                                       &get_rev_num));
+       LONGS_EQUAL(1, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_revise(bundle_archive, 
bundle_path, NULL));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getCurrentRevisionNumber(bundle_archive, &get_rev_num));
+       LONGS_EQUAL(2, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, getCurrentRevision) {
+       long get_rev_num;
+       bundle_revision_pt get_rev;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getCurrentRevision(bundle_archive, &get_rev));
+       bundleRevision_getNumber(get_rev, &get_rev_num);
+       LONGS_EQUAL(0, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_revise(bundle_archive, 
bundle_path, NULL));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getCurrentRevision(bundle_archive, &get_rev));
+       bundleRevision_getNumber(get_rev, &get_rev_num);
+       LONGS_EQUAL(1, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, getRevision) {
+       long get_rev_num;
+       bundle_revision_pt get_rev;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_revise(bundle_archive, 
bundle_path, NULL));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_revise(bundle_archive, 
bundle_path, NULL));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getRevision(bundle_archive, 0, 
&get_rev));
+       bundleRevision_getNumber(get_rev, &get_rev_num);
+       LONGS_EQUAL(0, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getRevision(bundle_archive, 2, 
&get_rev));
+       bundleRevision_getNumber(get_rev, &get_rev_num);
+       LONGS_EQUAL(2, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getRevision(bundle_archive, 1, 
&get_rev));
+       bundleRevision_getNumber(get_rev, &get_rev_num);
+       LONGS_EQUAL(1, get_rev_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, set_getPersistentState) {
+       bundle_state_e get;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setPersistentState(bundle_archive, 
OSGI_FRAMEWORK_BUNDLE_UNKNOWN));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getPersistentState(bundle_archive, &get));
+       LONGS_EQUAL(OSGI_FRAMEWORK_BUNDLE_INSTALLED, get);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setPersistentState(bundle_archive, OSGI_FRAMEWORK_BUNDLE_ACTIVE));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getPersistentState(bundle_archive, &get));
+       LONGS_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, get);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setPersistentState(bundle_archive, 
OSGI_FRAMEWORK_BUNDLE_STARTING));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getPersistentState(bundle_archive, &get));
+       LONGS_EQUAL(OSGI_FRAMEWORK_BUNDLE_STARTING, get);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setPersistentState(bundle_archive, 
OSGI_FRAMEWORK_BUNDLE_UNINSTALLED));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getPersistentState(bundle_archive, &get));
+       LONGS_EQUAL(OSGI_FRAMEWORK_BUNDLE_UNINSTALLED, get);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, set_getRefreshCount) {
+       long get_refresh_num;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getRefreshCount(bundle_archive, &get_refresh_num));
+       LONGS_EQUAL(0, get_refresh_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setRefreshCount(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getRefreshCount(bundle_archive, &get_refresh_num));
+       LONGS_EQUAL(0, get_refresh_num);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+TEST(bundle_archive, get_setLastModified) {
+       time_t set_time;
+       time_t get_time;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+
+       time(&set_time);
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setLastModified(bundle_archive, set_time));
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_getLastModified(bundle_archive, &get_time));
+       CHECK(set_time == get_time);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}
+
+//CANT seem to find a way to test this static function
+/*TEST(bundle_archive, readLastModified) {
+       mock().expectOneCall("framework_logCode");
+
+       time_t set_time;
+       time_t get_time;
+       bundle_archive_pt recr_archive = NULL;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_create(cache_path, 1, 
bundle_path, NULL, &bundle_archive));
+
+       time(&set_time);
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_setLastModified(bundle_archive, set_time));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_recreate(cache_path, 
&recr_archive));
+       LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_getLastModified(recr_archive, 
&get_time));
+       LONGS_EQUAL(set_time, get_time);
+
+       LONGS_EQUAL(CELIX_SUCCESS, 
bundleArchive_closeAndDelete(bundle_archive));
+       //LONGS_EQUAL(CELIX_SUCCESS, bundleArchive_destroy(bundle_archive));
+}*/
+
+TEST(bundle_archive, rollbackRevise) {
+       bool get;
+       bundleArchive_rollbackRevise(NULL, &get);
+
+       LONGS_EQUAL(true, get);
+
+}
 

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/bundle_cache_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/bundle_cache_test.cpp 
b/framework/private/test/bundle_cache_test.cpp
index 9043727..71174fe 100644
--- a/framework/private/test/bundle_cache_test.cpp
+++ b/framework/private/test/bundle_cache_test.cpp
@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <sys/stat.h>
+#include <string.h>
 #include <unistd.h>
 
 #include "CppUTest/TestHarness.h"
@@ -37,17 +38,32 @@ extern "C" {
 #include "bundle_cache_private.h"
 #include "celix_log.h"
 
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x42;
 }
 
 int main(int argc, char** argv) {
        return RUN_ALL_TESTS(argc, argv);
 }
 
+static char* my_strdup(const char* s) {
+       if (s == NULL) {
+               return NULL;
+       }
+
+       size_t len = strlen(s);
+
+       char *d = (char*) calloc(len + 1, sizeof(char));
+
+       if (d == NULL) {
+               return NULL;
+       }
+
+       strncpy(d, s, len);
+       return d;
+}
+
 TEST_GROUP(bundle_cache) {
        void setup(void) {
-               logger = (framework_logger_pt) malloc(sizeof(*logger));
-        logger->logFunction = frameworkLogger_log;
        }
 
        void teardown() {
@@ -65,23 +81,23 @@ TEST(bundle_cache, create) {
                .andReturnValue((char *) NULL);
 
        bundle_cache_pt cache = NULL;
-       celix_status_t status = bundleCache_create(configuration, logger, 
&cache);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleCache_create(configuration, &cache));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleCache_destroy(&cache));
 }
 
 TEST(bundle_cache, deleteTree) {
        bundle_cache_pt cache = (bundle_cache_pt) malloc(sizeof(*cache));
        char cacheDir[] = "bundle_cache_test_directory";
-       char cacheFile[] = "bundle_cache_test_directory/temp";
+       char cacheDir2[] = "bundle_cache_test_directory/testdir";
+       char cacheFile[] = "bundle_cache_test_directory/tempXXXXXX";
        cache->cacheDir = cacheDir;
 
        mkdir(cacheDir, S_IRWXU);
+       mkdir(cacheDir2, S_IRWXU);
        mktemp(cacheFile);
 
-       celix_status_t status = bundleCache_delete(cache);
-
-       LONGS_EQUAL(CELIX_SUCCESS, status);
-
+       LONGS_EQUAL(CELIX_SUCCESS, bundleCache_delete(cache));
 }
 
 TEST(bundle_cache, getArchive) {
@@ -102,9 +118,8 @@ TEST(bundle_cache, getArchive) {
                .andReturnValue(CELIX_SUCCESS);
 
        array_list_pt archives = NULL;
-       celix_status_t status = bundleCache_getArchives(cache, &archives);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleCache_getArchives(cache, &archives));
 
-       LONGS_EQUAL(CELIX_SUCCESS, status);
        CHECK(archives);
        LONGS_EQUAL(1, arrayList_size(archives));
        POINTERS_EQUAL(archive, arrayList_get(archives, 0));
@@ -112,6 +127,9 @@ TEST(bundle_cache, getArchive) {
        rmdir(bundle0);
        rmdir(bundle1);
        rmdir(cacheDir);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundleCache_getArchives(cache, &archives));
+       rmdir(cacheDir);
 }
 
 TEST(bundle_cache, createArchive) {
@@ -124,7 +142,6 @@ TEST(bundle_cache, createArchive) {
        char location[] = "test.zip";
        bundle_archive_pt archive = (bundle_archive_pt) 0x10;
        mock().expectOneCall("bundleArchive_create")
-        .withParameter("logger", (void *) NULL)
                .withParameter("archiveRoot", archiveRoot)
                .withParameter("id", id)
                .withParameter("location", location)

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/bundle_context_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/bundle_context_test.cpp 
b/framework/private/test/bundle_context_test.cpp
index db2792d..fcd6dfa 100644
--- a/framework/private/test/bundle_context_test.cpp
+++ b/framework/private/test/bundle_context_test.cpp
@@ -35,7 +35,7 @@ extern "C" {
 #include "bundle_context_private.h"
 #include "celix_log.h"
 
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x42;
 }
 
 int main(int argc, char** argv) {
@@ -44,8 +44,6 @@ int main(int argc, char** argv) {
 
 TEST_GROUP(bundle_context) {
        void setup(void) {
-               logger = (framework_logger_pt) malloc(sizeof(*logger));
-        logger->logFunction = frameworkLogger_log;
        }
 
        void teardown() {
@@ -55,17 +53,21 @@ TEST_GROUP(bundle_context) {
 };
 
 TEST(bundle_context, create) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        framework_pt framework = (framework_pt) 0x10;
-        bundle_pt bundle = (bundle_pt) 0x20;
+       bundle_pt bundle = (bundle_pt) 0x20;
 
-        bundle_context_pt context = NULL;
-        bundleContext_create(framework, logger, bundle, &context);
-        POINTERS_EQUAL(framework, context->framework)
-        POINTERS_EQUAL(bundle, context->bundle)
-//      CHECK(context->pool);
+       bundle_context_pt context = NULL;
+       bundleContext_create(framework, logger, bundle, &context);
+       POINTERS_EQUAL(framework, context->framework)
+       POINTERS_EQUAL(bundle, context->bundle)
+
+       bundleContext_create(NULL, logger, NULL, &context);
 }
 
 TEST(bundle_context, destroy) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -80,41 +82,43 @@ TEST(bundle_context, destroy) {
 }
 
 TEST(bundle_context, getBundle) {
-        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
-        framework_pt framework = (framework_pt) 0x10;
-        bundle_pt bundle = (bundle_pt) 0x20;
-        context->framework = framework;
-        context->bundle = bundle;
-
-        celix_status_t status;
-        bundle_pt actualBundle = NULL;
+       mock().expectNCalls(2, "framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+       bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
+       framework_pt framework = (framework_pt) 0x10;
+       bundle_pt bundle = (bundle_pt) 0x20;
+       context->framework = framework;
+       context->bundle = bundle;
+
+       celix_status_t status;
+       bundle_pt actualBundle = NULL;
        status = bundleContext_getBundle(context, &actualBundle);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(bundle, actualBundle);
 
        framework_pt actualFramework = NULL;
        status = bundleContext_getFramework(context, &actualFramework);
-        LONGS_EQUAL(CELIX_SUCCESS, status);
-        POINTERS_EQUAL(framework, actualFramework);
+       LONGS_EQUAL(CELIX_SUCCESS, status);
+       POINTERS_EQUAL(framework, actualFramework);
 
-        actualBundle = NULL;
-        status = bundleContext_getBundle(NULL, &actualBundle);
-        LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       actualBundle = NULL;
+       status = bundleContext_getBundle(NULL, &actualBundle);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
 
-        actualFramework = NULL;
-        status = bundleContext_getFramework(NULL, &actualFramework);
-        LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       actualFramework = NULL;
+       status = bundleContext_getFramework(NULL, &actualFramework);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
 }
 
 TEST(bundle_context, installBundle) {
-        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
-        framework_pt framework = (framework_pt) 0x10;
-        bundle_pt bundle = (bundle_pt) 0x20;
-        context->framework = framework;
-        context->bundle = bundle;
-
-        char location[] = "test.zip";
-        bundle_pt installedBundle = (bundle_pt) 0x40;
+       bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
+       framework_pt framework = (framework_pt) 0x10;
+       bundle_pt bundle = (bundle_pt) 0x20;
+       context->framework = framework;
+       context->bundle = bundle;
+
+       char location[] = "test.zip";
+       bundle_pt installedBundle = (bundle_pt) 0x40;
        mock().expectOneCall("fw_installBundle")
                .withParameter("framework", framework)
                .withParameter("location", location)
@@ -129,6 +133,8 @@ TEST(bundle_context, installBundle) {
 }
 
 TEST(bundle_context, installBundle2) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -156,6 +162,8 @@ TEST(bundle_context, installBundle2) {
 }
 
 TEST(bundle_context, registerService) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -187,6 +195,8 @@ TEST(bundle_context, registerService) {
 }
 
 TEST(bundle_context, registerServiceFactory) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -218,6 +228,8 @@ TEST(bundle_context, registerServiceFactory) {
 }
 
 TEST(bundle_context, getServiceReferences) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -247,6 +259,8 @@ TEST(bundle_context, getServiceReferences) {
 }
 
 TEST(bundle_context, getServiceReference) {
+       mock().expectNCalls(3, "framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -268,16 +282,38 @@ TEST(bundle_context, getServiceReference) {
                .andReturnValue(CELIX_SUCCESS);
 
        service_reference_pt actualReference = NULL;
-       celix_status_t status = bundleContext_getServiceReference(context, 
serviceName, &actualReference);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleContext_getServiceReference(context, 
serviceName, &actualReference));
        POINTERS_EQUAL(reference, actualReference);
 
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, 
bundleContext_getServiceReference(NULL, serviceName, &actualReference));
        actualReference = NULL;
-       status = bundleContext_getServiceReference(context, NULL, 
&actualReference);
-       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, 
bundleContext_getServiceReference(context, NULL, &actualReference));
+}
+
+TEST(bundle_context, ungetServiceReference) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+       bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
+       framework_pt framework = (framework_pt) 0x10;
+       bundle_pt bundle = (bundle_pt) 0x20;
+       context->framework = framework;
+       context->bundle = bundle;
+       service_reference_pt reference = (service_reference_pt) 0x30;
+
+    mock().expectOneCall("framework_ungetServiceReference")
+               .withParameter("framework", framework)
+               .withParameter("bundle", bundle)
+               .withParameter("reference", reference);
+
+       service_reference_pt actualReference = NULL;
+       LONGS_EQUAL(CELIX_SUCCESS, bundleContext_ungetServiceReference(context, 
reference));
+
+    LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, 
bundleContext_ungetServiceReference(context, NULL));
 }
 
 TEST(bundle_context, getService) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -306,6 +342,8 @@ TEST(bundle_context, getService) {
 }
 
 TEST(bundle_context, ungetService) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -334,6 +372,8 @@ TEST(bundle_context, ungetService) {
 }
 
 TEST(bundle_context, getBundles) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -357,6 +397,8 @@ TEST(bundle_context, getBundles) {
 }
 
 TEST(bundle_context, getBundleById) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -382,6 +424,8 @@ TEST(bundle_context, getBundleById) {
 }
 
 TEST(bundle_context, addServiceListener) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -407,6 +451,8 @@ TEST(bundle_context, addServiceListener) {
 }
 
 TEST(bundle_context, removeServiceListener) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -430,6 +476,8 @@ TEST(bundle_context, removeServiceListener) {
 }
 
 TEST(bundle_context, addBundleListener) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -453,6 +501,8 @@ TEST(bundle_context, addBundleListener) {
 }
 
 TEST(bundle_context, removeBundleListener) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;
@@ -475,7 +525,49 @@ TEST(bundle_context, removeBundleListener) {
        LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
 }
 
+TEST(bundle_context, addFrameworkListener){
+               mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+               bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
+               framework_pt framework = (framework_pt) 0x10;
+               bundle_pt bundle = (bundle_pt) 0x20;
+               context->framework = framework;
+               context->bundle = bundle;
+               framework_listener_pt listener = (framework_listener_pt) 0x30;
+
+           mock().expectOneCall("fw_addframeworkListener")
+                       .withParameter("framework", framework)
+                   .withParameter("bundle", bundle)
+                   .withParameter("listener", listener);
+
+               LONGS_EQUAL(CELIX_SUCCESS, 
bundleContext_addFrameworkListener(context, listener));
+
+               LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, 
bundleContext_addFrameworkListener(context, NULL));
+}
+
+TEST(bundle_context, removeFrameworkListener){
+               mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+               bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
+               framework_pt framework = (framework_pt) 0x10;
+               bundle_pt bundle = (bundle_pt) 0x20;
+               context->framework = framework;
+               context->bundle = bundle;
+               framework_listener_pt listener = (framework_listener_pt) 0x30;
+
+           mock().expectOneCall("fw_removeframeworkListener")
+                       .withParameter("framework", framework)
+                   .withParameter("bundle", bundle)
+                   .withParameter("listener", listener);
+
+               LONGS_EQUAL(CELIX_SUCCESS, 
bundleContext_removeFrameworkListener(context, listener));
+
+               LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, 
bundleContext_removeFrameworkListener(context, NULL));
+}
+
 TEST(bundle_context, getProperty) {
+       mock().expectOneCall("framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_context_pt context = (bundle_context_pt) 
malloc(sizeof(*context));
        framework_pt framework = (framework_pt) 0x10;
        bundle_pt bundle = (bundle_pt) 0x20;

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/bundle_revision_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/bundle_revision_test.cpp 
b/framework/private/test/bundle_revision_test.cpp
index a71b8df..c9fb567 100644
--- a/framework/private/test/bundle_revision_test.cpp
+++ b/framework/private/test/bundle_revision_test.cpp
@@ -35,7 +35,7 @@ extern "C" {
 #include "bundle_revision_private.h"
 #include "celix_log.h"
 
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x10;
 }
 
 int main(int argc, char** argv) {
@@ -44,8 +44,6 @@ int main(int argc, char** argv) {
 
 TEST_GROUP(bundle_revision) {
        void setup(void) {
-               logger = (framework_logger_pt) malloc(sizeof(*logger));
-        logger->logFunction = frameworkLogger_log;
        }
 
        void teardown() {
@@ -71,11 +69,13 @@ TEST(bundle_revision, create) {
             .andReturnValue(CELIX_SUCCESS);
 
        bundle_revision_pt revision = NULL;
-       celix_status_t status = bundleRevision_create(logger, root, location, 
revisionNr, inputFile, &revision);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_create(root, location, 
revisionNr, inputFile, &revision));
        LONGS_EQUAL(revisionNr, revision->revisionNr);
        STRCMP_EQUAL(root, revision->root);
        STRCMP_EQUAL(location, revision->location);
+
+    mock().expectOneCall("manifest_destroy");
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_destroy(revision));
 }
 
 TEST(bundle_revision, createWithInput) {
@@ -96,55 +96,62 @@ TEST(bundle_revision, createWithInput) {
         .andReturnValue(CELIX_SUCCESS);
 
        bundle_revision_pt revision = NULL;
-       celix_status_t status = bundleRevision_create(logger, root, location, 
revisionNr, inputFile, &revision);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_create(root, location, 
revisionNr, inputFile, &revision));
        LONGS_EQUAL(revisionNr, revision->revisionNr);
        STRCMP_EQUAL(root, revision->root);
        STRCMP_EQUAL(location, revision->location);
+
+    mock().expectOneCall("manifest_destroy");
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_destroy(revision));
 }
 
 TEST(bundle_revision, getters) {
+       mock().expectNCalls(5, "framework_logCode").withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        bundle_revision_pt revision = (bundle_revision_pt) 
malloc(sizeof(*revision));
        char root[] = "bundle_revision_test";
        char location[] = "test_bundle.zip";
        long revisionNr = 1l;
-       manifest_pt expected = (manifest_pt) 0x42;
+       manifest_pt expectedManifest = (manifest_pt) 0x42;
+       array_list_pt handles = NULL;
+       arrayList_create(&handles);
        revision->root = root;
        revision->location = location;
        revision->revisionNr = revisionNr;
-       revision->manifest = expected;
+       revision->manifest = expectedManifest;
+       revision->libraryHandles = handles;
 
        char *actualRoot = NULL;
        char *actualLocation = NULL;
        long actualRevisionNr = 0l;
        manifest_pt actualManifest = NULL;
-       celix_status_t status = CELIX_SUCCESS;
+       array_list_pt actualHandles = NULL;
 
-       status = bundleRevision_getNumber(revision, &actualRevisionNr);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_getNumber(revision, 
&actualRevisionNr));
        LONGS_EQUAL(revisionNr, actualRevisionNr);
 
-       status = bundleRevision_getLocation(revision, &actualLocation);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_getLocation(revision, 
&actualLocation));
        STRCMP_EQUAL(location, actualLocation);
 
-       status = bundleRevision_getRoot(revision, &actualRoot);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_getRoot(revision, 
&actualRoot));
        STRCMP_EQUAL(root, actualRoot);
 
-       status = bundleRevision_getManifest(revision, &actualManifest);
-    LONGS_EQUAL(CELIX_SUCCESS, status);
-    POINTERS_EQUAL(expected, actualManifest);
+       LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_getManifest(revision, 
&actualManifest));
+    POINTERS_EQUAL(expectedManifest, actualManifest);
+
+    LONGS_EQUAL(CELIX_SUCCESS, bundleRevision_getHandles(revision, 
&actualHandles));
+    POINTERS_EQUAL(handles, actualHandles);
+
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleRevision_getNumber(NULL, 
&actualRevisionNr));
+
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleRevision_getLocation(NULL, 
&actualLocation));
 
-       status = bundleRevision_getNumber(NULL, &actualRevisionNr);
-       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleRevision_getRoot(NULL, 
&actualRoot));
 
-       status = bundleRevision_getLocation(NULL, &actualLocation);
-       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleRevision_getManifest(NULL, 
&actualManifest));
 
-       status = bundleRevision_getRoot(NULL, &actualRoot);
-       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleRevision_getHandles(NULL, 
&actualHandles));
 
-       status = bundleRevision_getManifest(NULL, &actualManifest);
-       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       arrayList_destroy(handles);
+       free(revision);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/bundle_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/bundle_test.cpp 
b/framework/private/test/bundle_test.cpp
index 58608ec..29fe5e8 100644
--- a/framework/private/test/bundle_test.cpp
+++ b/framework/private/test/bundle_test.cpp
@@ -30,12 +30,15 @@
 #include "CppUTest/TestHarness_c.h"
 #include "CppUTest/CommandLineTestRunner.h"
 #include "CppUTestExt/MockSupport.h"
+#include "string.h"
 
 extern "C" {
+#include "bundle_revision_private.h"
 #include "bundle_private.h"
+#include "utils.h"
 #include "celix_log.h"
 
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x42;
 }
 
 int main(int argc, char** argv) {
@@ -44,35 +47,48 @@ int main(int argc, char** argv) {
 
 TEST_GROUP(bundle) {
        void setup(void) {
-               logger = (framework_logger_pt) malloc(sizeof(*logger));
-        logger->logFunction = frameworkLogger_log;
        }
 
-       void teardown() {
+       void teardown(void) {
                mock().checkExpectations();
                mock().clear();
        }
 };
 
+static char* my_strdup(const char* s) {
+       if (s == NULL) {
+               return NULL;
+       }
+
+       size_t len = strlen(s);
+
+       char *d = (char*) calloc(len + 1, sizeof(char));
+
+       if (d == NULL) {
+               return NULL;
+       }
+
+       strncpy(d, s, len);
+       return d;
+}
+
+
 TEST(bundle, create) {
        bundle_archive_pt archive = (bundle_archive_pt) 0x10;
        mock().expectOneCall("bundleArchive_createSystemBundleArchive")
-                       .withParameter("logger", logger)
-                       .withOutputParameterReturning("bundle_archive", 
&archive, sizeof(archive))
-                       .andReturnValue(CELIX_SUCCESS);
+                                                       
.withOutputParameterReturning("bundle_archive", &archive, sizeof(archive))
+                                                       
.andReturnValue(CELIX_SUCCESS);
 
        module_pt module = (module_pt) 0x20;
        mock().expectOneCall("module_createFrameworkModule")
-                       .ignoreOtherParameters()
-                       .andReturnValue(module);
+                                                       .ignoreOtherParameters()
+                                                       .andReturnValue(module);
 
        mock().expectOneCall("resolver_addModule")
-                       .withParameter("module", module);
-       mock().expectOneCall("resolver_addModule")
-                       .withParameter("module", module);
+                                                       
.withParameter("module", module);
 
        bundle_pt actual = NULL;
-       celix_status_t status = bundle_create(&actual, logger);
+       celix_status_t status = bundle_create(&actual);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(NULL, actual->context);
        POINTERS_EQUAL(NULL, actual->activator);
@@ -81,10 +97,13 @@ TEST(bundle, create) {
        POINTERS_EQUAL(archive, actual->archive);
        CHECK(actual->modules);
        POINTERS_EQUAL(NULL, actual->manifest);
-//     CHECK(actual->lock)
+       //      CHECK(actual->lock)
        LONGS_EQUAL(0, actual->lockCount);
        POINTERS_EQUAL(NULL, actual->lockThread.thread);
        POINTERS_EQUAL(NULL, actual->framework);
+
+       mock().expectOneCall("module_destroy");
+       bundle_destroy(actual);
 }
 
 TEST(bundle, createFromArchive) {
@@ -94,52 +113,48 @@ TEST(bundle, createFromArchive) {
        manifest_pt manifest = (manifest_pt) 0x30;
 
        mock().expectOneCall("bundleArchive_getCurrentRevision")
-        .withParameter("archive", archive)
-        .withOutputParameterReturning("revision", &revision, sizeof(revision))
-        .andReturnValue(CELIX_SUCCESS);
+                                       .withParameter("archive", archive)
+                                       
.withOutputParameterReturning("revision", &revision, sizeof(revision))
+                                       .andReturnValue(CELIX_SUCCESS);
 
        mock().expectOneCall("bundleRevision_getManifest")
-               .withParameter("revision", revision)
-               .withOutputParameterReturning("manifest", &manifest, 
sizeof(manifest))
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("revision", 
revision)
+                                               
.withOutputParameterReturning("manifest", &manifest, sizeof(manifest))
+                                               .andReturnValue(CELIX_SUCCESS);
 
-       // CPPUTest has no build in support for longs, which breaks this test.
        long id = 1;
        mock().expectOneCall("bundleArchive_getId")
-               .withParameter("archive", archive)
-               .withOutputParameterReturning("id", &id, sizeof(id))
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("archive", 
archive)
+                                               
.withOutputParameterReturning("id", &id, sizeof(id))
+                                               .andReturnValue(CELIX_SUCCESS);
 
        module_pt module = (module_pt) 0x40;
        mock().expectOneCall("module_create")
-               .withParameter("headerMap", manifest)
-//             .withParameter("moduleId", "1.0")
-//             .withParameter("bundle", (void *) 0x40)
-               .ignoreOtherParameters()
-               .andReturnValue(module);
+                                               .withParameter("headerMap", 
manifest)
+                                               //              
.withParameter("moduleId", "1.0")
+                                               //              
.withParameter("bundle", (void *) 0x40)
+                                               .ignoreOtherParameters()
+                                               .andReturnValue(module);
 
        version_pt version = (version_pt) 0x50;
        mock().expectOneCall("module_getVersion")
-               .withParameter("module", module)
-               .andReturnValue(version);
+                                               .withParameter("module", module)
+                                               .andReturnValue(version);
 
        char symbolicName[] = "name";
        mock().expectOneCall("module_getSymbolicName")
-               .withParameter("module", module)
-               .withOutputParameterReturning("symbolicName", &symbolicName, 
sizeof(symbolicName))
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("module", module)
+                                               
.withOutputParameterReturning("symbolicName", &symbolicName, 
sizeof(symbolicName))
+                                               .andReturnValue(CELIX_SUCCESS);
 
        array_list_pt bundles = NULL;
        arrayList_create(&bundles);
        mock().expectOneCall("framework_getBundles")
-               .withParameter("framework", framework)
-               .andReturnValue(bundles);
-
-       mock().expectOneCall("resolver_addModule")
-               .withParameter("module", module);
+                                               .withParameter("framework", 
framework)
+                                               .andReturnValue(bundles);
 
        mock().expectOneCall("resolver_addModule")
-               .withParameter("module", module);
+                                               .withParameter("module", 
module);
 
        bundle_pt actual = NULL;
        celix_status_t status = bundle_createFromArchive(&actual, framework, 
archive);
@@ -151,10 +166,16 @@ TEST(bundle, createFromArchive) {
        POINTERS_EQUAL(archive, actual->archive);
        CHECK(actual->modules);
        POINTERS_EQUAL(NULL, actual->manifest);
-//     CHECK(actual->lock)
+       //      CHECK(actual->lock)
        LONGS_EQUAL(0, actual->lockCount);
        POINTERS_EQUAL(NULL, actual->lockThread.thread);
        POINTERS_EQUAL(framework, actual->framework);
+
+       arrayList_destroy(actual->modules);
+       free(actual);
+
+
+       mock().clear();
 }
 
 TEST(bundle, getArchive) {
@@ -163,13 +184,19 @@ TEST(bundle, getArchive) {
        bundle->archive = archive;
 
        bundle_archive_pt actual = NULL;
-       celix_status_t status = bundle_getArchive(bundle, &actual);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getArchive(bundle, &actual));
        POINTERS_EQUAL(archive, actual);
 
+       mock().expectOneCall("framework_logCode")
+                                                       .withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
        actual = NULL;
-       status = bundle_getArchive(NULL, &actual);
-       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundle_getArchive(NULL, &actual));
+
+       free(bundle);
+
+
+       mock().clear();
 }
 
 TEST(bundle, getCurrentModule) {
@@ -192,6 +219,9 @@ TEST(bundle, getCurrentModule) {
        actual = NULL;
        status = bundle_getCurrentModule(NULL, &actual);
        LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+       arrayList_destroy(bundle->modules);
+       free(bundle);
 }
 
 TEST(bundle, getModules) {
@@ -201,6 +231,8 @@ TEST(bundle, getModules) {
 
        array_list_pt actual = bundle_getModules(bundle);
        POINTERS_EQUAL(modules, actual);
+
+       free(bundle);
 }
 
 TEST(bundle, getHandle) {
@@ -210,6 +242,8 @@ TEST(bundle, getHandle) {
 
        void *actual = bundle_getHandle(bundle);
        POINTERS_EQUAL(expected, actual);
+
+       free(bundle);
 }
 
 TEST(bundle, setHandle) {
@@ -218,6 +252,8 @@ TEST(bundle, setHandle) {
 
        bundle_setHandle(bundle, expected);
        POINTERS_EQUAL(expected, bundle->handle);
+
+       free(bundle);
 }
 
 TEST(bundle, getActivator) {
@@ -227,6 +263,8 @@ TEST(bundle, getActivator) {
 
        activator_pt actual = bundle_getActivator(bundle);
        POINTERS_EQUAL(expected, actual);
+
+       free(bundle);
 }
 
 TEST(bundle, setActivator) {
@@ -236,6 +274,8 @@ TEST(bundle, setActivator) {
        celix_status_t status = bundle_setActivator(bundle, expected);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(expected, bundle->activator);
+
+       free(bundle);
 }
 
 TEST(bundle, getContext) {
@@ -247,6 +287,8 @@ TEST(bundle, getContext) {
        celix_status_t status = bundle_getContext(bundle, &actual);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(expected, actual);
+
+       free(bundle);
 }
 
 TEST(bundle, setContext) {
@@ -256,6 +298,8 @@ TEST(bundle, setContext) {
        celix_status_t status = bundle_setContext(bundle, expected);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(expected, bundle->context);
+
+       free(bundle);
 }
 
 TEST(bundle, getEntry) {
@@ -266,16 +310,18 @@ TEST(bundle, getEntry) {
        char name[] = "name";
        char *expected = (char *) 0x20;
        mock().expectOneCall("framework_getBundleEntry")
-               .withParameter("framework", framework)
-               .withParameter("bundle", bundle)
-               .withParameter("name", name)
-               .withOutputParameterReturning("entry", &expected, 
sizeof(expected))
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("framework", 
framework)
+                                               .withParameter("bundle", bundle)
+                                               .withParameter("name", name)
+                                               
.withOutputParameterReturning("entry", &expected, sizeof(expected))
+                                               .andReturnValue(CELIX_SUCCESS);
 
        char *actual = NULL;
        celix_status_t status = bundle_getEntry(bundle, name, &actual);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(expected, actual);
+
+       free(bundle);
 }
 
 TEST(bundle, getState) {
@@ -283,9 +329,14 @@ TEST(bundle, getState) {
        bundle->state = OSGI_FRAMEWORK_BUNDLE_ACTIVE;
 
        bundle_state_e actual = OSGI_FRAMEWORK_BUNDLE_UNKNOWN;
-       celix_status_t status = bundle_getState(bundle, &actual);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getState(bundle, &actual));
        POINTERS_EQUAL(OSGI_FRAMEWORK_BUNDLE_ACTIVE, actual);
+
+       //get unknown bundle's state
+       LONGS_EQUAL(CELIX_BUNDLE_EXCEPTION, bundle_getState((bundle_pt)NULL, 
&actual));
+       POINTERS_EQUAL(OSGI_FRAMEWORK_BUNDLE_UNKNOWN, actual);
+
+       free(bundle);
 }
 
 TEST(bundle, setState) {
@@ -295,8 +346,115 @@ TEST(bundle, setState) {
        celix_status_t status = bundle_setState(bundle, 
OSGI_FRAMEWORK_BUNDLE_INSTALLED);
        LONGS_EQUAL(CELIX_SUCCESS, status);
        POINTERS_EQUAL(OSGI_FRAMEWORK_BUNDLE_INSTALLED, bundle->state);
+
+       free(bundle);
 }
 
+/*//declared here, since its non-static, but not actually exported by bundle.h 
or bundle_private.h
+extern celix_status_t bundle_createModule(bundle_pt bundle, module_pt *module);
+
+TEST(bundle, createModule){
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+
+       module_pt module = (module_pt) 0x01;
+       module_pt module2 = (module_pt) 0x02;
+       module_pt module3 = (module_pt) 0x03;
+       arrayList_create(&bundle->modules);
+       arrayList_add(bundle->modules, module);
+       arrayList_add(bundle->modules, module2);
+       arrayList_add(bundle->modules, module3);
+
+       framework_pt framework = (framework_pt) 0x04;
+       bundle->framework = framework;
+
+       bundle_archive_pt archive = (bundle_archive_pt) 0x05;
+       bundle->archive = archive;
+
+       module_pt module_new = (module_pt) 0x06;
+       bundle_revision_pt revision = (bundle_revision_pt) 0x07;
+       version_pt version = (version_pt) 0x08;
+       manifest_pt manifest = (manifest_pt) 0x09;
+
+       long id = 666;
+       char * symbolicName = my_strdup("name");
+
+       bundle_pt bundle2 = (bundle_pt) malloc(sizeof(*bundle));
+       module_pt module4 = (module_pt) 0x0A;
+       arrayList_create(&bundle2->modules);
+       arrayList_add(bundle2->modules, module4);
+       bundle2->framework = framework;
+
+       bundle_archive_pt archive2 = (bundle_archive_pt) 0x0B;
+       bundle2->archive = archive2;
+
+       version_pt version2 = (version_pt) 0x0C;
+       long id2 = 667;
+
+       array_list_pt bundles;
+       arrayList_create(&bundles);
+       arrayList_add(bundles, bundle2);
+
+       //expected calls from bundle_createModule
+       mock().expectOneCall("bundleArchive_getCurrentRevision")
+                       .withParameter("archive", archive)
+               .withOutputParameterReturning("revision", &revision, 
sizeof(revision));
+
+       mock().expectOneCall("bundleRevision_getManifest")
+                       .withParameter("revision", revision)
+                       .withOutputParameterReturning("manifest", &manifest, 
sizeof(manifest));
+
+       mock().expectOneCall("bundleArchive_getId")
+                       .withParameter("archive", archive)
+                       .withOutputParameterReturning("id", &id, sizeof(id));
+
+       mock().expectOneCall("module_create")
+                       .withParameter("headerMap", manifest)
+                       .withParameter("moduleId", "666.0")
+                       .withParameter("bundle", bundle)
+                       .andReturnValue(module_new);
+
+       mock().expectOneCall("module_getVersion")
+                       .withParameter("module", module_new)
+                       .andReturnValue(version);
+
+       mock().expectOneCall("module_getSymbolicName")
+                       .withParameter("module", module_new)
+                       .withOutputParameterReturning("symbolicName", 
&symbolicName, sizeof(char*));
+
+       mock().expectOneCall("framework_getBundles")
+                       .withParameter("framework", framework)
+                       .andReturnValue(bundles);
+
+       mock().expectOneCall("bundleArchive_getId")
+                       .withParameter("archive", archive2)
+                       .withOutputParameterReturning("id", &id2, sizeof(id2));
+
+       //returning same symbolic name for module_new as for module4
+       mock().expectOneCall("module_getSymbolicName")
+                       .withParameter("module", module4)
+                       .withOutputParameterReturning("symbolicName", 
&symbolicName, sizeof(char*));
+
+       //returning different version for module_new as for module4
+       mock().expectOneCall("module_getVersion")
+                       .withParameter("module", module4)
+                       .andReturnValue(version2);
+
+       int result = 1; //1 means not equal
+       mock().expectOneCall("version_compareTo")
+                       .withParameter("version", version)
+                       .withParameter("compare", version2)
+                       .withOutputParameterReturning("result", 
&result,sizeof(result));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_createModule(bundle, &module_new));
+
+       arrayList_destroy(bundle->modules);
+       arrayList_destroy(bundle2->modules);
+
+       free(bundle);
+       free(bundle2);
+       free(symbolicName);
+}*/
+
 TEST(bundle, start) {
        bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
        framework_pt framework = (framework_pt) 0x10;
@@ -307,19 +465,30 @@ TEST(bundle, start) {
        int options = 42;
 
        long id = 1;
-       mock().expectOneCall("bundleArchive_getId")
-        .withParameter("archive", archive)
-        .withOutputParameterReturning("id", &id, sizeof(id))
-        .andReturnValue(CELIX_SUCCESS);
+       mock().expectNCalls(2, "bundleArchive_getId")
+                                       .withParameter("archive", archive)
+                                       .withOutputParameterReturning("id", 
&id, sizeof(id))
+                                       .andReturnValue(CELIX_SUCCESS);
 
        mock().expectOneCall("fw_startBundle")
-               .withParameter("framework", framework)
-               .withParameter("bundle", bundle)
-               .withParameter("options", options)
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("framework", 
framework)
+                                               .withParameter("bundle", bundle)
+                                               .withParameter("options", 
options)
+                                               .andReturnValue(CELIX_SUCCESS);
 
        celix_status_t status = bundle_startWithOptions(bundle, options);
        LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       mock().expectOneCall("fw_startBundle")
+                                               .withParameter("framework", 
framework)
+                                               .withParameter("bundle", bundle)
+                                               .withParameter("options", 0)
+                                               .andReturnValue(CELIX_SUCCESS);
+
+       status = bundle_start(bundle);
+       LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       free(bundle);
 }
 
 TEST(bundle, update) {
@@ -331,19 +500,21 @@ TEST(bundle, update) {
 
        long id = 1;
        mock().expectOneCall("bundleArchive_getId")
-        .withParameter("archive", archive)
-        .withOutputParameterReturning("id", &id, sizeof(id))
-        .andReturnValue(CELIX_SUCCESS);
+                                       .withParameter("archive", archive)
+                                       .withOutputParameterReturning("id", 
&id, sizeof(id))
+                                       .andReturnValue(CELIX_SUCCESS);
 
        char input[] = "input";
        mock().expectOneCall("framework_updateBundle")
-               .withParameter("framework", framework)
-               .withParameter("bundle", bundle)
-               .withParameter("inputFile", input)
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("framework", 
framework)
+                                               .withParameter("bundle", bundle)
+                                               .withParameter("inputFile", 
input)
+                                               .andReturnValue(CELIX_SUCCESS);
 
        celix_status_t status = bundle_update(bundle, input);
        LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       free(bundle);
 }
 
 TEST(bundle, stop) {
@@ -354,43 +525,67 @@ TEST(bundle, stop) {
        bundle->archive = archive;
 
        long id = 1;
-       mock().expectOneCall("bundleArchive_getId")
-               .withParameter("archive", archive)
-               .withOutputParameterReturning("id", &id, sizeof(id))
-               .andReturnValue(CELIX_SUCCESS);
+       mock().expectNCalls(2, "bundleArchive_getId")
+                                               .withParameter("archive", 
archive)
+                                               
.withOutputParameterReturning("id", &id, sizeof(id))
+                                               .andReturnValue(CELIX_SUCCESS);
 
        int options = 1;
        mock().expectOneCall("fw_stopBundle")
-               .withParameter("framework", framework)
-               .withParameter("bundle", bundle)
-               .withParameter("record", 1)
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("framework", 
framework)
+                                               .withParameter("bundle", bundle)
+                                               .withParameter("record", 1)
+                                               .andReturnValue(CELIX_SUCCESS);
 
        celix_status_t status = bundle_stopWithOptions(bundle, options);
        LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       mock().expectOneCall("fw_stopBundle")
+                                               .withParameter("framework", 
framework)
+                                               .withParameter("bundle", bundle)
+                                               .withParameter("record", 0)
+                                               .andReturnValue(CELIX_SUCCESS);
+
+       status = bundle_stop(bundle);
+       LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       free(bundle);
 }
 
-//TEST(bundle, uninstall) {
-//     bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
-//     framework_pt framework = (framework_pt) 0x10;
-//     bundle_archive_pt archive = (bundle_archive_pt) 0x20;
-//     bundle->framework = framework;
-//     bundle->archive = archive;
-//
-//     long id = 0;
-//     mock().expectOneCall("bundleArchive_getId")
-//        .withParameter("archive", archive)
-//        .withOutputParameterReturning("id", &id, sizeof(id))
-//        .andReturnValue(CELIX_SUCCESS);
-//
-//     mock().expectOneCall("fw_uninstallBundle")
-//             .withParameter("framework", framework)
-//             .withParameter("bundle", bundle)
-//             .andReturnValue(CELIX_SUCCESS);
-//
-//     celix_status_t status = bundle_uninstall(bundle);
-//     LONGS_EQUAL(CELIX_SUCCESS, status);
-//}
+TEST(bundle, uninstall) {
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+       framework_pt framework = (framework_pt) 0x10;
+       bundle_archive_pt archive = (bundle_archive_pt) 0x20;
+       bundle->framework = framework;
+       bundle->archive = archive;
+
+       long id = 666;
+       mock().expectOneCall("bundleArchive_getId")
+                                       .withParameter("archive", archive)
+                                       .withOutputParameterReturning("id", 
&id, sizeof(id))
+                                       .andReturnValue(CELIX_SUCCESS);
+
+       mock().expectOneCall("fw_uninstallBundle")
+               .withParameter("framework", framework)
+               .withParameter("bundle", bundle)
+               .andReturnValue(CELIX_SUCCESS);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_uninstall(bundle));
+
+       //attempt to uninstall framework bundle
+       id = 0;
+       mock().expectOneCall("bundleArchive_getId")
+                                       .withParameter("archive", archive)
+                                       .withOutputParameterReturning("id", 
&id, sizeof(id))
+                                       .andReturnValue(CELIX_SUCCESS);
+
+       mock().expectOneCall("framework_logCode")
+                                                       .withParameter("code", 
CELIX_BUNDLE_EXCEPTION);
+
+       LONGS_EQUAL(CELIX_BUNDLE_EXCEPTION, bundle_uninstall(bundle));
+
+       free(bundle);
+}
 
 TEST(bundle, setPersistentStateInactive) {
        bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
@@ -399,17 +594,18 @@ TEST(bundle, setPersistentStateInactive) {
 
        long id = 1;
        mock().expectOneCall("bundleArchive_getId")
-               .withParameter("archive", archive)
-               .withOutputParameterReturning("id", &id, sizeof(id))
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("archive", 
archive)
+                                               
.withOutputParameterReturning("id", &id, sizeof(id))
+                                               .andReturnValue(CELIX_SUCCESS);
 
        mock().expectOneCall("bundleArchive_setPersistentState")
-               .withParameter("archive", archive)
-               .withParameter("state", OSGI_FRAMEWORK_BUNDLE_INSTALLED)
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("archive", 
archive)
+                                               .withParameter("state", 
OSGI_FRAMEWORK_BUNDLE_INSTALLED)
+                                               .andReturnValue(CELIX_SUCCESS);
 
-       celix_status_t status = bundle_setPersistentStateInactive(bundle);
-       LONGS_EQUAL(CELIX_SUCCESS, status);
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_setPersistentStateInactive(bundle));
+
+       free(bundle);
 }
 
 TEST(bundle, setPersistentStateUninstalled) {
@@ -419,84 +615,430 @@ TEST(bundle, setPersistentStateUninstalled) {
 
        long id = 1;
        mock().expectOneCall("bundleArchive_getId")
-               .withParameter("archive", archive)
-               .withOutputParameterReturning("id", &id, sizeof(id))
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("archive", 
archive)
+                                               
.withOutputParameterReturning("id", &id, sizeof(id))
+                                               .andReturnValue(CELIX_SUCCESS);
 
        mock().expectOneCall("bundleArchive_setPersistentState")
-               .withParameter("archive", archive)
-               .withParameter("state", OSGI_FRAMEWORK_BUNDLE_UNINSTALLED)
-               .andReturnValue(CELIX_SUCCESS);
+                                               .withParameter("archive", 
archive)
+                                               .withParameter("state", 
OSGI_FRAMEWORK_BUNDLE_UNINSTALLED)
+                                               .andReturnValue(CELIX_SUCCESS);
 
        celix_status_t status = bundle_setPersistentStateUninstalled(bundle);
        LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       free(bundle);
 }
 
 TEST(bundle, revise) {
        bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
-
+       arrayList_create(&bundle->modules);
+       bundle_archive_pt actual_archive = (bundle_archive_pt) 0x02;
+       bundle_revision_pt actual_revision = (bundle_revision_pt) 
malloc(sizeof(actual_revision));
+       manifest_pt actual_manifest = (manifest_pt) 
malloc(sizeof(*actual_manifest));
+       int actual_id = 666;
+       const char * actual_module_id = "666.0";
+       bundle->archive = actual_archive;
+       char * symbolic_name = NULL;
        char location[] = "location";
        char inputFile[] = "inputFile";
-//     celix_status_t status = bundle_revise(bundle, location, inputFile);
+
+       mock().expectNCalls(2, "bundleArchive_revise");
+
+       mock().expectNCalls(2, "bundleArchive_getCurrentRevision")
+                       .withParameter("archive", bundle->archive)
+                       .withOutputParameterReturning("revision", 
&actual_revision, sizeof(actual_revision));
+
+       mock().expectNCalls(2, "bundleRevision_getManifest")
+                       .withParameter("revision", actual_revision)
+                       .withOutputParameterReturning("manifest", 
&actual_manifest, sizeof(actual_manifest));
+
+       mock().expectNCalls(2, "bundleArchive_getId")
+                       .withParameter("archive", actual_archive)
+                       .withOutputParameterReturning("id", &actual_id, 
sizeof(actual_id));
+
+       mock().expectOneCall("module_create")
+                       .withParameter("headerMap", actual_manifest)
+                       .withParameter("moduleId", actual_module_id)
+                       .withParameter("bundle", bundle);
+
+       //module create returns NULL during test
+       mock().expectOneCall("resolver_addModule")
+                       .withParameter("module", (void*)NULL);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_revise(bundle, location, inputFile));
+
+       mock().expectOneCall("module_create")
+                       .withParameter("headerMap", actual_manifest)
+                       .withParameter("moduleId", actual_module_id)
+                       .withParameter("bundle", bundle)
+                       .andReturnValue((void*)0x01);
+
+       mock().expectOneCall("module_getVersion")
+                       .withParameter("module", (void*)0x01);
+
+       mock().expectOneCall("module_getSymbolicName")
+                       .withParameter("module", (void*)0x01)
+                       .withOutputParameterReturning("symbolicName", 
&symbolic_name,sizeof(symbolic_name))
+                       .andReturnValue(CELIX_ILLEGAL_ARGUMENT);
+
+       mock().expectOneCall("bundleArchive_rollbackRevise");
+
+       mock().expectOneCall("framework_logCode")
+                       .withParameter("code", CELIX_ILLEGAL_ARGUMENT);
+
+       mock().expectOneCall("framework_logCode")
+                       .withParameter("code", CELIX_BUNDLE_EXCEPTION);
+
+       LONGS_EQUAL(CELIX_BUNDLE_EXCEPTION, bundle_revise(bundle, location, 
inputFile));
+
+       arrayList_destroy(bundle->modules);
+       free(bundle);
+       free(actual_revision);
+       free(actual_manifest);
 }
 
 TEST(bundle, isLockable) {
        bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
        celixThreadMutex_create(&bundle->lock, NULL);
+       bundle->lockCount = 0;
 
        bool lockable = false;
        celix_status_t status = bundle_isLockable(bundle, &lockable);
-//     FAIL("Test not fully implemented");
-}
+       //      FAIL("Test not fully implemented");
 
-TEST(bundle, getLockingThread) {
-//     FAIL("Test not fully implemented");
+       free(bundle);
 }
 
-TEST(bundle, lock) {
-//     FAIL("Test not fully implemented");
-}
 
-TEST(bundle, unlock) {
-//     FAIL("Test not fully implemented");
+TEST(bundle, lockingThread) {
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+       celixThreadMutex_create(&bundle->lock, NULL);
+       celix_thread_t thread;
+
+       bundle->lockCount = 0;
+
+       bool locked = false;
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_lock(bundle, &locked));
+       CHECK(locked);
+       LONGS_EQUAL(1, bundle->lockCount);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getLockingThread(bundle, &thread));
+       bool equals;
+       thread_equalsSelf(thread, &equals);
+       CHECK(equals);
+
+       bool unlocked;
+       bundle->lockCount = 1;
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_unlock(bundle, &unlocked));
+       CHECK(unlocked);
+       LONGS_EQUAL(0, bundle->lockCount);
+
+       //try to unlock unlocked lock
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_unlock(bundle, &unlocked));
+       CHECK_FALSE(unlocked);
+       LONGS_EQUAL(0, bundle->lockCount);
+
+       celixThreadMutex_destroy(&bundle->lock);
+       free(bundle);
 }
 
 TEST(bundle, close) {
-//     FAIL("Test not fully implemented");
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+
+       module_pt module = (module_pt) 0x01;
+       module_pt module2 = (module_pt) 0x02;
+       module_pt module3 = (module_pt) 0x03;
+       arrayList_create(&bundle->modules);
+       arrayList_add(bundle->modules, module);
+       arrayList_add(bundle->modules, module2);
+       arrayList_add(bundle->modules, module3);
+
+       bundle_archive_pt archive = (bundle_archive_pt) 0x05;
+       bundle->archive = archive;
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module2);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module3);
+
+       mock().expectNCalls(3, "module_setWires");
+
+       mock().expectOneCall("bundleArchive_close")
+                       .withParameter("archive", archive);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_close(bundle));
+
+       arrayList_destroy(bundle->modules);
+       free(bundle);
 }
 
 TEST(bundle, closeAndDelete) {
-//     FAIL("Test not fully implemented");
+       bundle_archive_pt archive = (bundle_archive_pt) 0x10;
+       mock().expectOneCall("bundleArchive_createSystemBundleArchive")
+                                                               
.withOutputParameterReturning("bundle_archive", &archive, sizeof(archive))
+                                                               
.andReturnValue(CELIX_SUCCESS);
+
+       module_pt module = (module_pt) 0x20;
+       mock().expectOneCall("module_createFrameworkModule")
+                                                               
.ignoreOtherParameters()
+                                                               
.andReturnValue(module);
+
+       mock().expectOneCall("resolver_addModule")
+                                                               
.withParameter("module", module);
+
+       bundle_pt actual = NULL;
+       celix_status_t status = bundle_create(&actual);
+       LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module);
+
+       mock().expectOneCall("module_setWires");
+
+       mock().expectOneCall("bundleArchive_closeAndDelete");
+
+       status = bundle_closeAndDelete(actual);
+       LONGS_EQUAL(CELIX_SUCCESS, status);
+
+       arrayList_destroy(actual->modules);
+       free(actual);
 }
 
 TEST(bundle, closeModules) {
-//     FAIL("Test not fully implemented");
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+       module_pt module = (module_pt) 0x01;
+       module_pt module2 = (module_pt) 0x02;
+       module_pt module3 = (module_pt) 0x03;
+
+       arrayList_create(&bundle->modules);
+       arrayList_add(bundle->modules, module);
+       arrayList_add(bundle->modules, module2);
+       arrayList_add(bundle->modules, module3);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module2);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module3);
+
+       mock().expectNCalls(3, "module_setWires");
+
+       bundle_closeModules(bundle);
+
+       arrayList_destroy(bundle->modules);
+       free(bundle);
 }
 
 TEST(bundle, refresh) {
-//     FAIL("Test not fully implemented");
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+
+       module_pt module = (module_pt) 0x01;
+       module_pt module2 = (module_pt) 0x02;
+       module_pt module3 = (module_pt) 0x03;
+       arrayList_create(&bundle->modules);
+       arrayList_add(bundle->modules, module);
+       arrayList_add(bundle->modules, module2);
+       arrayList_add(bundle->modules, module3);
+
+       framework_pt framework = (framework_pt) 0x04;
+       bundle->framework = framework;
+
+       bundle_archive_pt archive = (bundle_archive_pt) 0x05;
+       bundle->archive = archive;
+
+       module_pt module_new = (module_pt) 0x06;
+       bundle_revision_pt revision = (bundle_revision_pt) 0x07;
+       version_pt version = (version_pt) 0x08;
+       manifest_pt manifest = (manifest_pt) 0x09;
+
+       long id = 666;
+       char * symbolicName = my_strdup("name");
+
+       bundle_pt bundle2 = (bundle_pt) malloc(sizeof(*bundle));
+       module_pt module4 = (module_pt) 0x0A;
+       arrayList_create(&bundle2->modules);
+       arrayList_add(bundle2->modules, module4);
+       bundle2->framework = framework;
+
+       bundle_archive_pt archive2 = (bundle_archive_pt) 0x0B;
+       bundle2->archive = archive2;
+
+       version_pt version2 = (version_pt) 0x0C;
+       long id2 = 667;
+
+       array_list_pt bundles;
+       arrayList_create(&bundles);
+       arrayList_add(bundles, bundle2);
+
+       //expected calls from bundle_refresh
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module2);
+
+       mock().expectOneCall("resolver_removeModule")
+                       .withParameter("module", module3);
+
+       mock().expectNCalls(3, "module_setWires");
+
+       //expected calls from bundle_createModule
+       mock().expectOneCall("bundleArchive_getCurrentRevision")
+                       .withParameter("archive", archive)
+               .withOutputParameterReturning("revision", &revision, 
sizeof(revision));
+
+       mock().expectOneCall("bundleRevision_getManifest")
+                       .withParameter("revision", revision)
+                       .withOutputParameterReturning("manifest", &manifest, 
sizeof(manifest));
+
+       mock().expectOneCall("bundleArchive_getId")
+                       .withParameter("archive", archive)
+                       .withOutputParameterReturning("id", &id, sizeof(id));
+
+       mock().expectOneCall("module_create")
+                       .withParameter("headerMap", manifest)
+                       .withParameter("moduleId", "666.0")
+                       .withParameter("bundle", bundle)
+                       .andReturnValue(module_new);
+
+       mock().expectOneCall("module_getVersion")
+                       .withParameter("module", module_new)
+                       .andReturnValue(version);
+
+       mock().expectOneCall("module_getSymbolicName")
+                       .withParameter("module", module_new)
+                       .withOutputParameterReturning("symbolicName", 
&symbolicName, sizeof(char*));
+
+       mock().expectOneCall("framework_getBundles")
+                       .withParameter("framework", framework)
+                       .andReturnValue(bundles);
+
+       mock().expectOneCall("bundleArchive_getId")
+                       .withParameter("archive", archive2)
+                       .withOutputParameterReturning("id", &id2, sizeof(id2));
+
+       //returning same symbolic name for module_new as for module4
+       mock().expectOneCall("module_getSymbolicName")
+                       .withParameter("module", module4)
+                       .withOutputParameterReturning("symbolicName", 
&symbolicName, sizeof(char*));
+
+       //returning different version for module_new as for module4
+       mock().expectOneCall("module_getVersion")
+                       .withParameter("module", module4)
+                       .andReturnValue(version2);
+
+       int result = 1; //1 means not equal
+       mock().expectOneCall("version_compareTo")
+                       .withParameter("version", version)
+                       .withParameter("compare", version2)
+                       .withOutputParameterReturning("result", 
&result,sizeof(result));
+
+       //expected calls from bundle_addModule
+       mock().expectOneCall("resolver_addModule")
+                       .withParameter("module", module_new);
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_refresh(bundle));
+
+       arrayList_destroy(bundle->modules);
+       arrayList_destroy(bundle2->modules);
+
+       free(bundle);
+       free(bundle2);
+       free(symbolicName);
 }
 
 TEST(bundle, getBundleId) {
-//     FAIL("Test not fully implemented");
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+       bundle_archive_pt actual_archive = (bundle_archive_pt) 0x42;
+       bundle->archive = actual_archive;
+       long actual_id = 666;
+       long get_id = 0;
+
+       mock().expectOneCall("bundleArchive_getId")
+                       .withParameter("archive", actual_archive)
+                       .withOutputParameterReturning("id", &actual_id, 
sizeof(actual_id));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getBundleId(bundle, &get_id));
+       LONGS_EQUAL(actual_id, get_id);
+
+       free(bundle);
 }
 
 TEST(bundle, getRegisteredServices) {
-//     FAIL("Test not fully implemented");
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+       framework_pt framework = (framework_pt) 0x10;
+       bundle->framework = framework;
+       array_list_pt list = (array_list_pt) 0x20;
+       array_list_pt get = NULL;
+
+       mock().expectOneCall("fw_getBundleRegisteredServices")
+                       .withParameter("framework", framework)
+                       .withParameter("bundle", bundle)
+                       .withOutputParameterReturning("services", &list, 
sizeof(list));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getRegisteredServices(bundle, &get));
+       POINTERS_EQUAL(list, get);
+
+       free(bundle);
 }
 
 TEST(bundle, getServicesInUse) {
-//     FAIL("Test not fully implemented");
-}
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+       framework_pt framework = (framework_pt) 0x10;
+       bundle->framework = framework;
+       array_list_pt list = (array_list_pt) 0x20;
+       array_list_pt get = NULL;
+
+       mock().expectOneCall("fw_getBundleServicesInUse")
+                       .withParameter("framework", framework)
+                       .withParameter("bundle", bundle)
+                       .withOutputParameterReturning("services", &list, 
sizeof(list));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getServicesInUse(bundle, &get));
+       POINTERS_EQUAL(list, get);
 
-TEST(bundle, getMemoryPool) {
-//     FAIL("Test not fully implemented");
+       free(bundle);
 }
 
 TEST(bundle, setFramework) {
-//     FAIL("Test not fully implemented");
+       framework_pt framework = (framework_pt) 0x666;
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_setFramework(bundle, framework));
+       POINTERS_EQUAL(framework, bundle->framework);
+
+       mock().expectOneCall("framework_logCode")
+                                                       .withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundle_setFramework(bundle, NULL));
+
+       free(bundle);
 }
 
 TEST(bundle, getFramework) {
-//     FAIL("Test not fully implemented");
+       framework_pt get = NULL;
+       framework_pt actual = (framework_pt) 0x666;
+       bundle_pt bundle = (bundle_pt) malloc(sizeof(*bundle));
+
+       bundle->framework = actual;
+
+       LONGS_EQUAL(CELIX_SUCCESS, bundle_getFramework(bundle, &get));
+
+       free(bundle);
+       bundle = NULL;
+
+       mock().expectOneCall("framework_logCode")
+                                                       .withParameter("code", 
CELIX_ILLEGAL_ARGUMENT);
+
+       LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundle_getFramework(bundle, &get));
+
+       free(bundle);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/capability_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/capability_test.cpp 
b/framework/private/test/capability_test.cpp
index 1874dd9..4d9f2eb 100644
--- a/framework/private/test/capability_test.cpp
+++ b/framework/private/test/capability_test.cpp
@@ -33,10 +33,11 @@
 
 extern "C" {
 #include "capability_private.h"
+#include "utils.h"
 #include "attribute.h"
 #include "celix_log.h"
 
-framework_logger_pt logger;
+framework_logger_pt logger = (framework_logger_pt) 0x42;
 }
 
 int main(int argc, char** argv) {
@@ -45,8 +46,6 @@ int main(int argc, char** argv) {
 
 TEST_GROUP(capability) {
        void setup(void) {
-               logger = (framework_logger_pt) malloc(sizeof(*logger));
-        logger->logFunction = frameworkLogger_log;
        }
 
        void teardown() {
@@ -57,8 +56,8 @@ TEST_GROUP(capability) {
 
 TEST(capability, create) {
        module_pt module = (module_pt) 0x10;
-       hash_map_pt directives = hashMap_create(NULL, NULL, NULL, NULL);
-       hash_map_pt attributes = hashMap_create(NULL, NULL, NULL, NULL);
+       hash_map_pt directives =  hashMap_create(utils_stringHash, NULL, 
utils_stringEquals, NULL);
+       hash_map_pt attributes = hashMap_create(utils_stringHash, NULL, 
utils_stringEquals, NULL);
 
        attribute_pt serviceAttribute = (attribute_pt) 0x01;
     hashMap_put(attributes, (void*) "service", serviceAttribute);
@@ -90,6 +89,10 @@ TEST(capability, create) {
 
        capability_pt capability = NULL;
        celix_status_t status = capability_create(module, directives, 
attributes, &capability);
+
+       mock().expectNCalls(2, "attribute_destroy");
+       mock().expectOneCall("version_destroy");
+       capability_destroy(capability);
 }
 
 TEST(capability, getServiceName) {
@@ -100,6 +103,8 @@ TEST(capability, getServiceName) {
        char *actual = NULL;
        capability_getServiceName(capability, &actual);
        STRCMP_EQUAL(serviceName, actual);
+
+       free(capability);
 }
 
 TEST(capability, getVersion) {
@@ -110,6 +115,8 @@ TEST(capability, getVersion) {
        version_pt actual = NULL;
        capability_getVersion(capability, &actual);
        POINTERS_EQUAL(version, actual);
+
+       free(capability);
 }
 
 TEST(capability, getModule) {
@@ -120,4 +127,6 @@ TEST(capability, getModule) {
        module_pt actual = NULL;
        capability_getModule(capability, &actual);
        POINTERS_EQUAL(module, actual);
+
+       free(capability);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/celix_errorcodes_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/celix_errorcodes_test.cpp 
b/framework/private/test/celix_errorcodes_test.cpp
new file mode 100644
index 0000000..99ed360
--- /dev/null
+++ b/framework/private/test/celix_errorcodes_test.cpp
@@ -0,0 +1,87 @@
+/**
+ *Licensed to the Apache Software Foundation (ASF) under one
+ *or more contributor license agreements.  See the NOTICE file
+ *distributed with this work for additional information
+ *regarding copyright ownership.  The ASF licenses this file
+ *to you under the Apache License, Version 2.0 (the
+ *"License"); you may not use this file except in compliance
+ *with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *Unless required by applicable law or agreed to in writing,
+ *software distributed under the License is distributed on an
+ *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ *specific language governing permissions and limitations
+ *under the License.
+ */
+/*
+ * celix_errorcodes_test.cpp
+ *
+ *  \date       Oct 16, 2015
+ *  \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
+ *  \copyright  Apache License, Version 2.0
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "CppUTest/TestHarness.h"
+#include "CppUTest/TestHarness_c.h"
+#include "CppUTest/CommandLineTestRunner.h"
+#include "CppUTestExt/MockSupport.h"
+
+extern "C" {
+#include "celix_errno.h"
+}
+
+int main(int argc, char** argv) {
+       return CommandLineTestRunner::RunAllTests(argc, argv);
+}
+
+TEST_GROUP(celix_errorcodes) {
+       void setup(void){
+       }
+
+       void teardown(void){
+       }
+};
+
+TEST(celix_errorcodes, test_entire_file){
+       char ret_str[100];
+
+       celix_strerror(CELIX_BUNDLE_EXCEPTION, ret_str, 100);
+       STRCMP_EQUAL("Bundle exception", ret_str);
+
+       celix_strerror(CELIX_INVALID_BUNDLE_CONTEXT, ret_str, 100);
+       STRCMP_EQUAL("Invalid bundle context", ret_str);
+
+       celix_strerror(CELIX_ILLEGAL_ARGUMENT, ret_str, 100);
+       STRCMP_EQUAL("Illegal argument", ret_str);
+
+       celix_strerror(CELIX_INVALID_SYNTAX, ret_str, 100);
+       STRCMP_EQUAL("Invalid syntax", ret_str);
+
+       celix_strerror(CELIX_FRAMEWORK_SHUTDOWN, ret_str, 100);
+       STRCMP_EQUAL("Framework shutdown", ret_str);
+
+       celix_strerror(CELIX_ILLEGAL_STATE, ret_str, 100);
+       STRCMP_EQUAL("Illegal state", ret_str);
+
+       celix_strerror(CELIX_FRAMEWORK_EXCEPTION, ret_str, 100);
+       STRCMP_EQUAL("Framework exception", ret_str);
+
+       celix_strerror(CELIX_FILE_IO_EXCEPTION, ret_str, 100);
+       STRCMP_EQUAL("File I/O exception", ret_str);
+
+       celix_strerror(CELIX_SERVICE_EXCEPTION, ret_str, 100);
+       STRCMP_EQUAL("Service exception", ret_str);
+
+       celix_strerror(CELIX_START_ERROR, ret_str, 100);
+       STRCMP_EQUAL("Unknown code", ret_str);
+
+       //test non celix error code
+       STRCMP_EQUAL("Cannot allocate memory",
+                               celix_strerror(ENOMEM, ret_str, 100));
+}

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/framework_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/framework_test.cpp 
b/framework/private/test/framework_test.cpp
index e1085f7..81dabf5 100644
--- a/framework/private/test/framework_test.cpp
+++ b/framework/private/test/framework_test.cpp
@@ -19,7 +19,7 @@
 /*
  * framework_test.cpp
  *
- *  \date       Feb 11, 2013
+ *  \date       Sep 28, 2015
  *  \author     <a href="mailto:[email protected]";>Apache Celix Project 
Team</a>
  *  \copyright  Apache License, Version 2.0
  */
@@ -33,22 +33,79 @@
 
 extern "C" {
 #include "framework.h"
+#include "framework_private.h"
 }
 
 int main(int argc, char** argv) {
-       return RUN_ALL_TESTS(argc, argv);
+       return CommandLineTestRunner::RUN_ALL_TESTS(argc, argv);
 }
 
 TEST_GROUP(framework) {
+       properties_pt properties;
+
        void setup(void) {
+               properties = properties_create();
        }
 
        void teardown() {
-               mock().checkExpectations();
-               mock().clear();
+               properties_destroy(properties);
        }
 };
 
+TEST(framework, create){
+       framework_pt framework = NULL;
+
+       mock().expectOneCall("bundle_create");
+
+       framework_create(&framework, properties);
+
+
+       CHECK(framework != NULL);
+       POINTERS_EQUAL(&properties, framework->configurationMap);
+
+       mock().checkExpectations();
+       mock().clear();
+}
+
+/*TEST(framework, startFw){
+       framework_pt framework = NULL;
+
+       mock().expectOneCall("bundle_create");
+       mock().expectOneCall("framework_logCode")
+                       .withParameter("code", CELIX_ILLEGAL_ARGUMENT);
+
+       LONGS_EQUAL(CELIX_SUCCESS,framework_create(&framework, properties));
+
+       LONGS_EQUAL(CELIX_SUCCESS,fw_init(framework));
+
+       LONGS_EQUAL(CELIX_SUCCESS,framework_start(framework));
+
+       framework_stop(framework);
+       framework_destroy(framework);
+
+}
+
+TEST(framework, installBundle){
+       framework_pt framework = NULL;
+
+       mock().expectOneCall("bundle_create");
+       mock().expectOneCall("framework_logCode")
+                       .withParameter("code", CELIX_ILLEGAL_ARGUMENT);
+
+       LONGS_EQUAL(CELIX_SUCCESS, framework_create(&framework, properties));
+
+       LONGS_EQUAL(CELIX_SUCCESS,fw_init(framework));
+
+       LONGS_EQUAL(CELIX_SUCCESS,framework_start(framework));
+
+       // fw_installBundle(); // Needs a fake bundle..
+
+       framework_stop(framework);
+       framework_destroy(framework);
+
+}*/
+
+
 
 
 

http://git-wip-us.apache.org/repos/asf/celix/blob/aec12cd9/framework/private/test/manifest_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/manifest_test.cpp 
b/framework/private/test/manifest_test.cpp
index c90cc90..02422aa 100644
--- a/framework/private/test/manifest_test.cpp
+++ b/framework/private/test/manifest_test.cpp
@@ -56,7 +56,7 @@ TEST_GROUP(manifest) {
 };
 
 TEST(manifest, createFromFile) {
-    char manifestFile[] = 
"../../celix/framework/private/resources-test/manifest.txt";
+    char manifestFile[] = "resources-test/manifest.txt";
     manifest_pt manifest = NULL;
 //    properties_pt properties = properties_create();
     properties_pt properties = (properties_pt) 0x40;
@@ -98,7 +98,7 @@ TEST(manifest, createFromFile) {
 }
 
 TEST(manifest, createFromFileWithSections) {
-    char manifestFile[] = 
"../../celix/framework/private/resources-test/manifest_sections.txt";
+    char manifestFile[] = "resources-test/manifest_sections.txt";
     manifest_pt manifest = NULL;
 //    properties_pt properties = properties_create();
     properties_pt properties = (properties_pt) 0x40;

Reply via email to