You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by bp...@apache.org on 2015/12/10 15:56:05 UTC

celix git commit: CELIX-322: Memory leaks in resolver and framework tests

Repository: celix
Updated Branches:
  refs/heads/develop a79524b3d -> b56c47d14


CELIX-322: Memory leaks in resolver and framework tests


Project: http://git-wip-us.apache.org/repos/asf/celix/repo
Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/b56c47d1
Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/b56c47d1
Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/b56c47d1

Branch: refs/heads/develop
Commit: b56c47d14a66c0bba3937973898fb86c27687877
Parents: a79524b
Author: Bjoern Petri <bp...@apache.org>
Authored: Thu Dec 10 15:55:28 2015 +0100
Committer: Bjoern Petri <bp...@apache.org>
Committed: Thu Dec 10 15:55:28 2015 +0100

----------------------------------------------------------------------
 framework/private/src/resolver.c               | 610 ++++++++++----------
 framework/private/test/bundle_cache_test.cpp   |   8 +
 framework/private/test/bundle_context_test.cpp |  40 ++
 framework/private/test/resolver_test.cpp       | 116 ++--
 4 files changed, 388 insertions(+), 386 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/celix/blob/b56c47d1/framework/private/src/resolver.c
----------------------------------------------------------------------
diff --git a/framework/private/src/resolver.c b/framework/private/src/resolver.c
index 4d242da..aaded68 100644
--- a/framework/private/src/resolver.c
+++ b/framework/private/src/resolver.c
@@ -33,16 +33,16 @@
 #include "celix_log.h"
 
 struct capabilityList {
-	char * serviceName;
-	linked_list_pt capabilities;
+    char * serviceName;
+    linked_list_pt capabilities;
 };
 
 typedef struct capabilityList * capability_list_pt;
 
 struct candidateSet {
-	module_pt module;
-	requirement_pt requirement;
-	linked_list_pt candidates;
+    module_pt module;
+    requirement_pt requirement;
+    linked_list_pt candidates;
 };
 
 typedef struct candidateSet * candidate_set_pt;
@@ -60,204 +60,208 @@ void resolver_removeInvalidCandidate(module_pt module, hash_map_pt candidates, l
 linked_list_pt resolver_populateWireMap(hash_map_pt candidates, module_pt importer, linked_list_pt wireMap);
 
 linked_list_pt resolver_resolve(module_pt root) {
-	hash_map_pt candidatesMap = NULL;
-	linked_list_pt wireMap = NULL;
-	linked_list_pt resolved = NULL;
-	hash_map_iterator_pt iter = NULL;
-
-	if (module_isResolved(root)) {
-		return NULL;
-	}
-
-	candidatesMap = hashMap_create(NULL, NULL, NULL, NULL);
-
-	if (resolver_populateCandidatesMap(candidatesMap, root) != 0) {
-		hash_map_iterator_pt iter = hashMapIterator_create(candidatesMap);
-		while (hashMapIterator_hasNext(iter)) {
-			hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
-			linked_list_pt value = hashMapEntry_getValue(entry);
-			hashMapIterator_remove(iter);
-			if (value != NULL) {
-				linked_list_iterator_pt candSetIter = linkedListIterator_create(value, 0);
-				while (linkedListIterator_hasNext(candSetIter)) {
-					candidate_set_pt set = linkedListIterator_next(candSetIter);
-					linkedList_destroy(set->candidates);
-					free(set);
-					linkedListIterator_remove(candSetIter);
-				}
-				linkedListIterator_destroy(candSetIter);
-				linkedList_destroy(value);
-			}
-		}
-		hashMapIterator_destroy(iter);
-		hashMap_destroy(candidatesMap, false, false);
-		return NULL;
-	}
-
-	linkedList_create(&wireMap);
-	resolved = resolver_populateWireMap(candidatesMap, root, wireMap);
-	iter = hashMapIterator_create(candidatesMap);
-	while (hashMapIterator_hasNext(iter)) {
-		hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
-		linked_list_pt value = hashMapEntry_getValue(entry);
-		hashMapIterator_remove(iter);
-		if (value != NULL) {
-			linked_list_iterator_pt candSetIter = linkedListIterator_create(value, 0);
-			while (linkedListIterator_hasNext(candSetIter)) {
-				candidate_set_pt set = linkedListIterator_next(candSetIter);
-				linkedList_destroy(set->candidates);
-				free(set);
-				linkedListIterator_remove(candSetIter);
-			}
-			linkedListIterator_destroy(candSetIter);
-			linkedList_destroy(value);
-		}
-	}
-	hashMapIterator_destroy(iter);
-	hashMap_destroy(candidatesMap, false, false);
-	return resolved;
+    hash_map_pt candidatesMap = NULL;
+    linked_list_pt wireMap = NULL;
+    linked_list_pt resolved = NULL;
+    hash_map_iterator_pt iter = NULL;
+
+    if (module_isResolved(root)) {
+        return NULL;
+    }
+
+    candidatesMap = hashMap_create(NULL, NULL, NULL, NULL);
+
+    if (resolver_populateCandidatesMap(candidatesMap, root) != 0) {
+        hash_map_iterator_pt iter = hashMapIterator_create(candidatesMap);
+        while (hashMapIterator_hasNext(iter)) {
+            hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
+            linked_list_pt value = hashMapEntry_getValue(entry);
+            hashMapIterator_remove(iter);
+            if (value != NULL) {
+                linked_list_iterator_pt candSetIter = linkedListIterator_create(value, 0);
+                while (linkedListIterator_hasNext(candSetIter)) {
+                    candidate_set_pt set = linkedListIterator_next(candSetIter);
+                    linkedList_destroy(set->candidates);
+                    free(set);
+                    linkedListIterator_remove(candSetIter);
+                }
+                linkedListIterator_destroy(candSetIter);
+                linkedList_destroy(value);
+            }
+        }
+        hashMapIterator_destroy(iter);
+        hashMap_destroy(candidatesMap, false, false);
+        return NULL;
+    }
+
+    linkedList_create(&wireMap);
+    resolved = resolver_populateWireMap(candidatesMap, root, wireMap);
+    iter = hashMapIterator_create(candidatesMap);
+    while (hashMapIterator_hasNext(iter)) {
+        hash_map_entry_pt entry = hashMapIterator_nextEntry(iter);
+        linked_list_pt value = hashMapEntry_getValue(entry);
+        hashMapIterator_remove(iter);
+        if (value != NULL) {
+            linked_list_iterator_pt candSetIter = linkedListIterator_create(value, 0);
+            while (linkedListIterator_hasNext(candSetIter)) {
+                candidate_set_pt set = linkedListIterator_next(candSetIter);
+                linkedList_destroy(set->candidates);
+                free(set);
+                linkedListIterator_remove(candSetIter);
+            }
+            linkedListIterator_destroy(candSetIter);
+            linkedList_destroy(value);
+        }
+    }
+    hashMapIterator_destroy(iter);
+    hashMap_destroy(candidatesMap, false, false);
+    return resolved;
 }
 
 int resolver_populateCandidatesMap(hash_map_pt candidatesMap, module_pt targetModule) {
     linked_list_pt candSetList;
     linked_list_pt candidates;
     linked_list_pt invalid;
-    int i;
-    int c;
-    requirement_pt req;
-    capability_list_pt capList;
-
-	if (hashMap_containsKey(candidatesMap, targetModule)) {
-		return 0;
-	}
-
-	hashMap_put(candidatesMap, targetModule, NULL);
-
-	    if (linkedList_create(&candSetList) == CELIX_SUCCESS) {
-            for (i = 0; i < linkedList_size(module_getRequirements(targetModule)); i++) {
-            	char *targetName = NULL;
-                req = (requirement_pt) linkedList_get(module_getRequirements(targetModule), i);
-                requirement_getTargetName(req, &targetName);
-                capList = resolver_getCapabilityList(m_resolvedServices, targetName);
-
-                    if (linkedList_create(&candidates) == CELIX_SUCCESS) {
-                        for (c = 0; (capList != NULL) && (c < linkedList_size(capList->capabilities)); c++) {
-                            capability_pt cap = (capability_pt) linkedList_get(capList->capabilities, c);
-                            bool satisfied = false;
-                            requirement_isSatisfied(req, cap, &satisfied);
-                            if (satisfied) {
-                                linkedList_addElement(candidates, cap);
-                            }
-                        }
-                        capList = resolver_getCapabilityList(m_unresolvedServices, targetName);
-                        for (c = 0; (capList != NULL) && (c < linkedList_size(capList->capabilities)); c++) {
-                            capability_pt cap = (capability_pt) linkedList_get(capList->capabilities, c);
-                            bool satisfied = false;
-                            requirement_isSatisfied(req, cap, &satisfied);
-                            if (satisfied) {
-                                linkedList_addElement(candidates, cap);
-                            }
-                        }
 
-                        if (linkedList_size(candidates) > 0) {
-                            linked_list_iterator_pt iterator = NULL;
-                            for (iterator = linkedListIterator_create(candidates, 0); linkedListIterator_hasNext(iterator); ) {
-                                capability_pt candidate = (capability_pt) linkedListIterator_next(iterator);
-                            	module_pt module = NULL;
-                            	capability_getModule(candidate, &module);
-                                if (!module_isResolved(module)) {
-                                    if (resolver_populateCandidatesMap(candidatesMap, module) != 0) {
-                                        linkedListIterator_remove(iterator);
-                                    }
-                                }
-                            }
-                            linkedListIterator_destroy(iterator);
-                        }
-
-                        if (linkedList_size(candidates) == 0) {
-                            if (linkedList_create(&invalid) == CELIX_SUCCESS) {
-                                char *name = NULL;
-                                resolver_removeInvalidCandidate(targetModule, candidatesMap, invalid);
+    if (hashMap_containsKey(candidatesMap, targetModule)) {
+        return 0;
+    }
 
-                                module_getSymbolicName(targetModule, &name);
+    hashMap_put(candidatesMap, targetModule, NULL);
+
+    if (linkedList_create(&candSetList) == CELIX_SUCCESS) {
+        int i;
+        for (i = 0; i < linkedList_size(module_getRequirements(targetModule)); i++) {
+            capability_list_pt capList;
+            requirement_pt req;
+            char *targetName = NULL;
+            req = (requirement_pt) linkedList_get(module_getRequirements(targetModule), i);
+            requirement_getTargetName(req, &targetName);
+            capList = resolver_getCapabilityList(m_resolvedServices, targetName);
+
+            if (linkedList_create(&candidates) == CELIX_SUCCESS) {
+                int c;
+                for (c = 0; (capList != NULL) && (c < linkedList_size(capList->capabilities)); c++) {
+                    capability_pt cap = (capability_pt) linkedList_get(capList->capabilities, c);
+                    bool satisfied = false;
+                    requirement_isSatisfied(req, cap, &satisfied);
+                    if (satisfied) {
+                        linkedList_addElement(candidates, cap);
+                    }
+                }
+                capList = resolver_getCapabilityList(m_unresolvedServices, targetName);
+                for (c = 0; (capList != NULL) && (c < linkedList_size(capList->capabilities)); c++) {
+                    capability_pt cap = (capability_pt) linkedList_get(capList->capabilities, c);
+                    bool satisfied = false;
+                    requirement_isSatisfied(req, cap, &satisfied);
+                    if (satisfied) {
+                        linkedList_addElement(candidates, cap);
+                    }
+                }
 
-                                fw_log(logger, OSGI_FRAMEWORK_LOG_INFO, "Unable to resolve: %s, %s\n", name, targetName);
+                if (linkedList_size(candidates) > 0) {
+                    linked_list_iterator_pt iterator = NULL;
+                    for (iterator = linkedListIterator_create(candidates, 0); linkedListIterator_hasNext(iterator);) {
+                        capability_pt candidate = (capability_pt) linkedListIterator_next(iterator);
+                        module_pt module = NULL;
+                        capability_getModule(candidate, &module);
+                        if (!module_isResolved(module)) {
+                            if (resolver_populateCandidatesMap(candidatesMap, module) != 0) {
+                                linkedListIterator_remove(iterator);
                             }
-                            linkedList_destroy(candidates);
-                            return -1;
-                        } else if (linkedList_size(candidates) > 0) {
-                            candidate_set_pt cs = (candidate_set_pt) malloc(sizeof(*cs));
-                            cs->candidates = candidates;
-                            cs->module = targetModule;
-                            cs->requirement = req;
-                            linkedList_addElement(candSetList, cs);
                         }
+                    }
+                    linkedListIterator_destroy(iterator);
+                }
+
+                if (linkedList_size(candidates) == 0) {
+                    if (linkedList_create(&invalid) == CELIX_SUCCESS) {
+                        char *name = NULL;
+                        resolver_removeInvalidCandidate(targetModule, candidatesMap, invalid);
+
+                        module_getSymbolicName(targetModule, &name);
 
+                        linkedList_destroy(invalid);
+                        fw_log(logger, OSGI_FRAMEWORK_LOG_INFO, "Unable to resolve: %s, %s\n", name, targetName);
+                    }
+                    linkedList_destroy(candidates);
+                    linkedList_destroy(candSetList);
+                    return -1;
+                } else if (linkedList_size(candidates) > 0) {
+                    candidate_set_pt cs = (candidate_set_pt) malloc(sizeof(*cs));
+                    cs->candidates = candidates;
+                    cs->module = targetModule;
+                    cs->requirement = req;
+                    linkedList_addElement(candSetList, cs);
                 }
+
             }
-            hashMap_put(candidatesMap, targetModule, candSetList);
-	    }
-	return 0;
+        }
+        hashMap_put(candidatesMap, targetModule, candSetList);
+    }
+    return 0;
 }
 
 void resolver_removeInvalidCandidate(module_pt invalidModule, hash_map_pt candidates, linked_list_pt invalid) {
-	hash_map_iterator_pt iterator;
-	hashMap_remove(candidates, invalidModule);
-	
-	for (iterator = hashMapIterator_create(candidates); hashMapIterator_hasNext(iterator); ) {
-		hash_map_entry_pt entry = hashMapIterator_nextEntry(iterator);
-		linked_list_pt candSetList = (linked_list_pt) hashMapEntry_getValue(entry);
-		if (candSetList != NULL) {
-			linked_list_iterator_pt itCandSetList;
-			for (itCandSetList = linkedListIterator_create(candSetList, 0); linkedListIterator_hasNext(itCandSetList); ) {
-				candidate_set_pt set = (candidate_set_pt) linkedListIterator_next(itCandSetList);
-				linked_list_iterator_pt candIter;
-				for (candIter = linkedListIterator_create(set->candidates, 0); linkedListIterator_hasNext(candIter); ) {
-					capability_pt candCap = (capability_pt) linkedListIterator_next(candIter);
-					module_pt module = NULL;
-					capability_getModule(candCap, &module);
-					if (module == invalidModule) {
-						linkedListIterator_remove(candIter);
-						if (linkedList_size(set->candidates) == 0) {
-							linkedListIterator_remove(itCandSetList);
-							if (module != invalidModule && linkedList_contains(invalid, module)) {
-								linkedList_addElement(invalid, module);
-							}
-						}
-						break;
-					}
-				}
-				linkedListIterator_destroy(candIter);
-			}
-			linkedListIterator_destroy(itCandSetList);
-		}
-	}
-	hashMapIterator_destroy(iterator);
-
-	if (linkedList_size(invalid) > 0) {
-		while (!linkedList_isEmpty(invalid)) {
-			module_pt m = (module_pt) linkedList_removeIndex(invalid, 0);
-			resolver_removeInvalidCandidate(m, candidates, invalid);
-		}
-	}
+    hash_map_iterator_pt iterator;
+    hashMap_remove(candidates, invalidModule);
+
+    for (iterator = hashMapIterator_create(candidates); hashMapIterator_hasNext(iterator);) {
+        hash_map_entry_pt entry = hashMapIterator_nextEntry(iterator);
+        linked_list_pt candSetList = (linked_list_pt) hashMapEntry_getValue(entry);
+        if (candSetList != NULL) {
+            linked_list_iterator_pt itCandSetList;
+            for (itCandSetList = linkedListIterator_create(candSetList, 0); linkedListIterator_hasNext(itCandSetList);) {
+                candidate_set_pt set = (candidate_set_pt) linkedListIterator_next(itCandSetList);
+                linked_list_iterator_pt candIter;
+                for (candIter = linkedListIterator_create(set->candidates, 0); linkedListIterator_hasNext(candIter);) {
+                    capability_pt candCap = (capability_pt) linkedListIterator_next(candIter);
+                    module_pt module = NULL;
+                    capability_getModule(candCap, &module);
+                    if (module == invalidModule) {
+                        linkedListIterator_remove(candIter);
+                        if (linkedList_size(set->candidates) == 0) {
+                            linkedListIterator_remove(itCandSetList);
+                            if (module != invalidModule && linkedList_contains(invalid, module)) {
+                                linkedList_addElement(invalid, module);
+                            }
+                        }
+                        break;
+                    }
+                }
+                linkedListIterator_destroy(candIter);
+            }
+            linkedListIterator_destroy(itCandSetList);
+        }
+    }
+    hashMapIterator_destroy(iterator);
+
+    if (linkedList_size(invalid) > 0) {
+        while (!linkedList_isEmpty(invalid)) {
+            module_pt m = (module_pt) linkedList_removeIndex(invalid, 0);
+            resolver_removeInvalidCandidate(m, candidates, invalid);
+        }
+    }
 }
 
 void resolver_addModule(module_pt module) {
-    int i;
-    capability_pt cap;
-    capability_list_pt list;
 
-	if (m_modules == NULL) {
-	                linkedList_create(&m_modules);
-	                linkedList_create(&m_unresolvedServices);
-	                linkedList_create(&m_resolvedServices);
-	}
+    if (m_modules == NULL) {
+        linkedList_create(&m_modules);
+        linkedList_create(&m_unresolvedServices);
+        linkedList_create(&m_resolvedServices);
+    }
+
+    if (m_modules != NULL && m_unresolvedServices != NULL) {
+        int i;
 
-	if (m_modules != NULL && m_unresolvedServices != NULL) {
         linkedList_addElement(m_modules, module);
 
         for (i = 0; i < linkedList_size(module_getCapabilities(module)); i++) {
-			char *serviceName = NULL;
+            char *serviceName = NULL;
+            capability_list_pt list;
+            capability_pt cap;
+
             cap = (capability_pt) linkedList_get(module_getCapabilities(module), i);
             capability_getServiceName(cap, &serviceName);
             list = resolver_getCapabilityList(m_unresolvedServices, serviceName);
@@ -272,154 +276,155 @@ void resolver_addModule(module_pt module) {
             }
             linkedList_addElement(list->capabilities, cap);
         }
-	}
+    }
 }
 
 void resolver_removeModule(module_pt module) {
     linked_list_pt caps = NULL;
-	linkedList_removeElement(m_modules, module);
+    linkedList_removeElement(m_modules, module);
     caps = module_getCapabilities(module);
-    if (caps != NULL)
-    {
+    if (caps != NULL) {
         int i = 0;
         for (i = 0; i < linkedList_size(caps); i++) {
             capability_pt cap = (capability_pt) linkedList_get(caps, i);
             char *serviceName = NULL;
-			capability_list_pt list;
-			capability_getServiceName(cap, &serviceName);
+            capability_list_pt list;
+            capability_getServiceName(cap, &serviceName);
             list = resolver_getCapabilityList(m_unresolvedServices, serviceName);
             if (list != NULL) {
                 linkedList_removeElement(list->capabilities, cap);
 
                 if (linkedList_isEmpty(list->capabilities)) {
-					linkedList_removeElement(m_unresolvedServices, list);
-					linkedList_destroy(list->capabilities);
-					free(list->serviceName);
-					free(list);
-				}
+                    linkedList_removeElement(m_unresolvedServices, list);
+                    linkedList_destroy(list->capabilities);
+                    free(list->serviceName);
+                    free(list);
+                }
             }
             list = resolver_getCapabilityList(m_resolvedServices, serviceName);
             if (list != NULL) {
                 linkedList_removeElement(list->capabilities, cap);
 
                 if (linkedList_isEmpty(list->capabilities)) {
-					linkedList_removeElement(m_resolvedServices, list);
-					linkedList_destroy(list->capabilities);
-					free(list->serviceName);
-					free(list);
-				}
+                    linkedList_removeElement(m_resolvedServices, list);
+                    linkedList_destroy(list->capabilities);
+                    free(list->serviceName);
+                    free(list);
+                }
             }
         }
     }
     if (linkedList_isEmpty(m_modules)) {
-    	linkedList_destroy(m_modules);
-    	m_modules = NULL;
-
-    	if (!linkedList_isEmpty(m_unresolvedServices)) {
-    		// #TODO: Something is wrong, not all modules have been removed from the resolver
-    		fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Unexpected entries in unresolved module list");
-    	}
-    	linkedList_destroy(m_unresolvedServices);
-    	m_unresolvedServices = NULL;
-    	if (!linkedList_isEmpty(m_resolvedServices)) {
-			// #TODO: Something is wrong, not all modules have been removed from the resolver
-    		fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Unexpected entries in resolved module list");
-		}
-    	linkedList_destroy(m_resolvedServices);
-    	m_resolvedServices = NULL;
+        linkedList_destroy(m_modules);
+        m_modules = NULL;
+
+        if (!linkedList_isEmpty(m_unresolvedServices)) {
+            // #TODO: Something is wrong, not all modules have been removed from the resolver
+            fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Unexpected entries in unresolved module list");
+        }
+        linkedList_destroy(m_unresolvedServices);
+        m_unresolvedServices = NULL;
+        if (!linkedList_isEmpty(m_resolvedServices)) {
+            // #TODO: Something is wrong, not all modules have been removed from the resolver
+            fw_log(logger, OSGI_FRAMEWORK_LOG_ERROR, "Unexpected entries in resolved module list");
+        }
+        linkedList_destroy(m_resolvedServices);
+        m_resolvedServices = NULL;
     }
 }
 
 void resolver_moduleResolved(module_pt module) {
-    int capIdx;
-    linked_list_pt capsCopy;
 
-	if (module_isResolved(module)) {
-	        if (linkedList_create(&capsCopy) == CELIX_SUCCESS) {
-                linked_list_pt wires = NULL;
+    if (module_isResolved(module)) {
+        linked_list_pt capsCopy = NULL;
 
-				for (capIdx = 0; (module_getCapabilities(module) != NULL) && (capIdx < linkedList_size(module_getCapabilities(module))); capIdx++) {
-                    capability_pt cap = (capability_pt) linkedList_get(module_getCapabilities(module), capIdx);
-                    char *serviceName = NULL;
-					capability_list_pt list;
-					capability_getServiceName(cap, &serviceName);
-                    list = resolver_getCapabilityList(m_unresolvedServices, serviceName);
-                    linkedList_removeElement(list->capabilities, cap);
+        if (linkedList_create(&capsCopy) == CELIX_SUCCESS) {
+            linked_list_pt wires = NULL;
+            int capIdx;
 
-                    linkedList_addElement(capsCopy, cap);
-                }
+            for (capIdx = 0; (module_getCapabilities(module) != NULL) && (capIdx < linkedList_size(module_getCapabilities(module))); capIdx++) {
+                capability_pt cap = (capability_pt) linkedList_get(module_getCapabilities(module), capIdx);
+                char *serviceName = NULL;
+                capability_list_pt list;
+                capability_getServiceName(cap, &serviceName);
+                list = resolver_getCapabilityList(m_unresolvedServices, serviceName);
+                linkedList_removeElement(list->capabilities, cap);
 
-                wires = module_getWires(module);
-                for (capIdx = 0; (capsCopy != NULL) && (capIdx < linkedList_size(capsCopy)); capIdx++) {
-                    capability_pt cap = linkedList_get(capsCopy, capIdx);
-
-                    int wireIdx = 0;
-                    for (wireIdx = 0; (wires != NULL) && (wireIdx < linkedList_size(wires)); wireIdx++) {
-                        wire_pt wire = (wire_pt) linkedList_get(wires, wireIdx);
-                        requirement_pt req = NULL;
-                        bool satisfied = false;
-                        wire_getRequirement(wire, &req);
-						requirement_isSatisfied(req, cap, &satisfied);
-                        if (satisfied) {
-                            linkedList_set(capsCopy, capIdx, NULL);
-                            break;
-                        }
+                linkedList_addElement(capsCopy, cap);
+            }
+
+            wires = module_getWires(module);
+            for (capIdx = 0; (capsCopy != NULL) && (capIdx < linkedList_size(capsCopy)); capIdx++) {
+                capability_pt cap = linkedList_get(capsCopy, capIdx);
+
+                int wireIdx = 0;
+                for (wireIdx = 0; (wires != NULL) && (wireIdx < linkedList_size(wires)); wireIdx++) {
+                    wire_pt wire = (wire_pt) linkedList_get(wires, wireIdx);
+                    requirement_pt req = NULL;
+                    bool satisfied = false;
+                    wire_getRequirement(wire, &req);
+                    requirement_isSatisfied(req, cap, &satisfied);
+                    if (satisfied) {
+                        linkedList_set(capsCopy, capIdx, NULL);
+                        break;
                     }
                 }
+            }
+
+            for (capIdx = 0; (capsCopy != NULL) && (capIdx < linkedList_size(capsCopy)); capIdx++) {
+                capability_pt cap = linkedList_get(capsCopy, capIdx);
 
-                for (capIdx = 0; (capsCopy != NULL) && (capIdx < linkedList_size(capsCopy)); capIdx++) {
-                    capability_pt cap = linkedList_get(capsCopy, capIdx);
-
-                    if (cap != NULL) {
-                    	char *serviceName = NULL;
-						capability_list_pt list;
-						capability_getServiceName(cap, &serviceName);
-
-                        list = resolver_getCapabilityList(m_resolvedServices, serviceName);
-                        if (list == NULL) {
-                                list = (capability_list_pt) malloc(sizeof(*list));
-                                if (list != NULL) {
-                                    list->serviceName = strdup(serviceName);
-                                    if (linkedList_create(&list->capabilities) == CELIX_SUCCESS) {
-                                        linkedList_addElement(m_resolvedServices, list);
-                                    }
-                                }
+                if (cap != NULL) {
+                    char *serviceName = NULL;
+                    capability_list_pt list;
+                    capability_getServiceName(cap, &serviceName);
+
+                    list = resolver_getCapabilityList(m_resolvedServices, serviceName);
+                    if (list == NULL) {
+                        list = (capability_list_pt) malloc(sizeof(*list));
+                        if (list != NULL) {
+                            list->serviceName = strdup(serviceName);
+                            if (linkedList_create(&list->capabilities) == CELIX_SUCCESS) {
+                                linkedList_addElement(m_resolvedServices, list);
+                            }
                         }
-                        linkedList_addElement(list->capabilities, cap);
                     }
+                    linkedList_addElement(list->capabilities, cap);
                 }
+            }
 
-                linkedList_destroy(capsCopy);
-	    }
-	}
+            linkedList_destroy(capsCopy);
+        }
+    }
 }
 
 capability_list_pt resolver_getCapabilityList(linked_list_pt list, char * name) {
-	capability_list_pt capabilityList = NULL;
-	linked_list_iterator_pt iterator = linkedListIterator_create(list, 0);
-	while (linkedListIterator_hasNext(iterator)) {
-		capability_list_pt services = (capability_list_pt) linkedListIterator_next(iterator);
-		if (strcmp(services->serviceName, name) == 0) {
-			capabilityList = services;
-			break;
-		}
-	}
-	linkedListIterator_destroy(iterator);
-	return capabilityList;
+    capability_list_pt capabilityList = NULL;
+    linked_list_iterator_pt iterator = linkedListIterator_create(list, 0);
+    while (linkedListIterator_hasNext(iterator)) {
+        capability_list_pt services = (capability_list_pt) linkedListIterator_next(iterator);
+        if (strcmp(services->serviceName, name) == 0) {
+            capabilityList = services;
+            break;
+        }
+    }
+    linkedListIterator_destroy(iterator);
+    return capabilityList;
 }
 
 linked_list_pt resolver_populateWireMap(hash_map_pt candidates, module_pt importer, linked_list_pt wireMap) {
     linked_list_pt serviceWires;
-	bool resolved = false;
 
     if (candidates && importer && wireMap) {
         linked_list_pt candSetList = NULL;
-		if (module_isResolved(importer)) {
-		    // already resolved
-		    resolved = true;
+        bool resolved = false;
+
+        if (module_isResolved(importer)) {
+            // already resolved
+            resolved = true;
         }
-		if (!resolved) {
-		    bool self = false;
+        if (!resolved) {
+            bool self = false;
             linked_list_iterator_pt wit = linkedListIterator_create(wireMap, 0);
             while (linkedListIterator_hasNext(wit)) {
                 importer_wires_pt iw = linkedListIterator_next(wit);
@@ -436,39 +441,38 @@ linked_list_pt resolver_populateWireMap(hash_map_pt candidates, module_pt import
 
                 if (linkedList_create(&serviceWires) == CELIX_SUCCESS) {
 //                    if (linkedList_create(&emptyWires) == CELIX_SUCCESS) {
-                        int candSetIdx = 0;
-
-                        // hashMap_put(wireMap, importer, emptyWires);
-
-                        char *mname = NULL;
-                        module_getSymbolicName(importer, &mname);
-
-                        importer_wires_pt importerWires = malloc(sizeof(*importerWires));
-                        importerWires->importer = importer;
-                        importerWires->wires = NULL;
-                        linkedList_addElement(wireMap, importerWires);
-                        
-                        for (candSetIdx = 0; candSetIdx < linkedList_size(candSetList); candSetIdx++) {
-                            candidate_set_pt cs = (candidate_set_pt) linkedList_get(candSetList, candSetIdx);
-
-                            module_pt module = NULL;
-                            capability_getModule(((capability_pt) linkedList_get(cs->candidates, 0)), &module);
-                            if (importer != module) {
-                                wire_pt wire = NULL;
-                                wire_create(importer, cs->requirement, module,
-                                        ((capability_pt) linkedList_get(cs->candidates, 0)), &wire);
-                                linkedList_addElement(serviceWires, wire);
-                            }
+                    int candSetIdx = 0;
+
+                    // hashMap_put(wireMap, importer, emptyWires);
+
+                    char *mname = NULL;
+                    module_getSymbolicName(importer, &mname);
+
+                    importer_wires_pt importerWires = malloc(sizeof(*importerWires));
+                    importerWires->importer = importer;
+                    importerWires->wires = NULL;
+                    linkedList_addElement(wireMap, importerWires);
 
-                            wireMap = resolver_populateWireMap(candidates,module,wireMap);
+                    for (candSetIdx = 0; candSetIdx < linkedList_size(candSetList); candSetIdx++) {
+                        candidate_set_pt cs = (candidate_set_pt) linkedList_get(candSetList, candSetIdx);
+
+                        module_pt module = NULL;
+                        capability_getModule(((capability_pt) linkedList_get(cs->candidates, 0)), &module);
+                        if (importer != module) {
+                            wire_pt wire = NULL;
+                            wire_create(importer, cs->requirement, module, ((capability_pt) linkedList_get(cs->candidates, 0)), &wire);
+                            linkedList_addElement(serviceWires, wire);
                         }
 
-                        importerWires->wires = serviceWires;
-                        // hashMap_put(wireMap, importer, serviceWires);
+                        wireMap = resolver_populateWireMap(candidates, module, wireMap);
+                    }
+
+                    importerWires->wires = serviceWires;
+                    // hashMap_put(wireMap, importer, serviceWires);
 //                    }
                 }
             }
-		}
+        }
     }
 
     return wireMap;

http://git-wip-us.apache.org/repos/asf/celix/blob/b56c47d1/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 5c63c5b..1d543d0 100644
--- a/framework/private/test/bundle_cache_test.cpp
+++ b/framework/private/test/bundle_cache_test.cpp
@@ -83,6 +83,8 @@ TEST(bundle_cache, deleteTree) {
 
 
 	LONGS_EQUAL(CELIX_SUCCESS, bundleCache_delete(cache));
+
+	free(cache);
 }
 
 TEST(bundle_cache, getArchive) {
@@ -112,9 +114,13 @@ TEST(bundle_cache, getArchive) {
 	rmdir(bundle0);
 	rmdir(bundle1);
 	rmdir(cacheDir);
+	arrayList_destroy(archives);
 
 	LONGS_EQUAL(CELIX_SUCCESS, bundleCache_getArchives(cache, &archives));
+
+	arrayList_destroy(archives);
 	rmdir(cacheDir);
+	free(cache);
 }
 
 TEST(bundle_cache, createArchive) {
@@ -137,4 +143,6 @@ TEST(bundle_cache, createArchive) {
 	bundle_archive_pt actual;
 	bundleCache_createArchive(cache, 1l, location, NULL, &actual);
 	POINTERS_EQUAL(archive, actual);
+
+	free(cache);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/b56c47d1/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 fc011df..a83bdfb 100644
--- a/framework/private/test/bundle_context_test.cpp
+++ b/framework/private/test/bundle_context_test.cpp
@@ -64,6 +64,8 @@ TEST(bundle_context, create) {
 	POINTERS_EQUAL(bundle, context->bundle)
 
 	bundleContext_create(NULL, logger, NULL, &context);
+
+	free(context);
 }
 
 TEST(bundle_context, destroy) {
@@ -108,6 +110,8 @@ TEST(bundle_context, getBundle) {
 	actualFramework = NULL;
 	status = bundleContext_getFramework(NULL, &actualFramework);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, installBundle) {
@@ -130,6 +134,8 @@ TEST(bundle_context, installBundle) {
 	celix_status_t status = bundleContext_installBundle(context, location, &actualInstalledBundle);
 	LONGS_EQUAL(CELIX_SUCCESS, status);
 	POINTERS_EQUAL(installedBundle, actualInstalledBundle);
+
+	free(context);
 }
 
 TEST(bundle_context, installBundle2) {
@@ -159,6 +165,8 @@ TEST(bundle_context, installBundle2) {
 	actualInstalledBundle = NULL;
 	status = bundleContext_installBundle2(NULL, location, inputFile, &actualInstalledBundle);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, registerService) {
@@ -192,6 +200,8 @@ TEST(bundle_context, registerService) {
 	actualRegistration = NULL;
 	status = bundleContext_registerService(NULL, serviceName, service, properties, &actualRegistration);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, registerServiceFactory) {
@@ -225,6 +235,8 @@ TEST(bundle_context, registerServiceFactory) {
 	actualRegistration = NULL;
 	status = bundleContext_registerServiceFactory(NULL, serviceName, serviceFactory, properties, &actualRegistration);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, getServiceReferences) {
@@ -256,6 +268,8 @@ TEST(bundle_context, getServiceReferences) {
 	actualReferences = NULL;
 	status = bundleContext_getServiceReferences(NULL, serviceName, filter, &actualReferences);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, getServiceReference) {
@@ -288,6 +302,8 @@ TEST(bundle_context, getServiceReference) {
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleContext_getServiceReference(NULL, serviceName, &actualReference));
 	actualReference = NULL;
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleContext_getServiceReference(context, NULL, &actualReference));
+
+	free(context);
 }
 
 TEST(bundle_context, ungetServiceReference) {
@@ -308,6 +324,8 @@ TEST(bundle_context, ungetServiceReference) {
 	LONGS_EQUAL(CELIX_SUCCESS, bundleContext_ungetServiceReference(context, reference));
 
     LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleContext_ungetServiceReference(context, NULL));
+
+    free(context);
 }
 
 TEST(bundle_context, getService) {
@@ -337,6 +355,8 @@ TEST(bundle_context, getService) {
 	actualService = NULL;
 	status = bundleContext_getService(context, NULL, &actualService);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, ungetService) {
@@ -366,6 +386,8 @@ TEST(bundle_context, ungetService) {
 	actualResult = false;
 	status = bundleContext_ungetService(context, NULL, &actualResult);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, getBundles) {
@@ -391,6 +413,8 @@ TEST(bundle_context, getBundles) {
 	actualBundles = NULL;
 	status = bundleContext_getBundles(NULL, &actualBundles);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, getBundleById) {
@@ -418,6 +442,8 @@ TEST(bundle_context, getBundleById) {
 	actualBundle = NULL;
 	status = bundleContext_getBundleById(NULL, id, &actualBundle);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, addServiceListener) {
@@ -443,6 +469,8 @@ TEST(bundle_context, addServiceListener) {
 
 	status = bundleContext_addServiceListener(context, NULL, filter);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, removeServiceListener) {
@@ -466,6 +494,8 @@ TEST(bundle_context, removeServiceListener) {
 
 	status = bundleContext_removeServiceListener(context, NULL);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, addBundleListener) {
@@ -489,6 +519,8 @@ TEST(bundle_context, addBundleListener) {
 
 	status = bundleContext_addBundleListener(context, NULL);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, removeBundleListener) {
@@ -512,6 +544,8 @@ TEST(bundle_context, removeBundleListener) {
 
 	status = bundleContext_removeBundleListener(context, NULL);
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+
+	free(context);
 }
 
 TEST(bundle_context, addFrameworkListener){
@@ -532,6 +566,8 @@ TEST(bundle_context, addFrameworkListener){
 		LONGS_EQUAL(CELIX_SUCCESS, bundleContext_addFrameworkListener(context, listener));
 
 		LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleContext_addFrameworkListener(context, NULL));
+
+		free(context);
 }
 
 TEST(bundle_context, removeFrameworkListener){
@@ -552,6 +588,8 @@ TEST(bundle_context, removeFrameworkListener){
 		LONGS_EQUAL(CELIX_SUCCESS, bundleContext_removeFrameworkListener(context, listener));
 
 		LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, bundleContext_removeFrameworkListener(context, NULL));
+
+		free(context);
 }
 
 TEST(bundle_context, getProperty) {
@@ -578,5 +616,7 @@ TEST(bundle_context, getProperty) {
 
 	actualValue = NULL;
 	status = bundleContext_getProperty(context, NULL, &actualValue);
+
 	LONGS_EQUAL(CELIX_ILLEGAL_ARGUMENT, status);
+	free(context);
 }

http://git-wip-us.apache.org/repos/asf/celix/blob/b56c47d1/framework/private/test/resolver_test.cpp
----------------------------------------------------------------------
diff --git a/framework/private/test/resolver_test.cpp b/framework/private/test/resolver_test.cpp
index 63301fb..f80c900 100644
--- a/framework/private/test/resolver_test.cpp
+++ b/framework/private/test/resolver_test.cpp
@@ -99,8 +99,8 @@ TEST(resolver, resolve){
 	capability_pt cap2= (capability_pt) 0x09;
 
 	importer_wires_pt get_importer_wires;
-	linked_list_pt get_wire_map;
-	linked_list_pt get_wire_map2;
+	linked_list_pt get_wire_list;
+	linked_list_pt get_wire_list2;
 
 	//creating modules
 	linkedList_create(&capabilities);
@@ -194,28 +194,35 @@ TEST(resolver, resolve){
 			.withOutputParameterReturning("module", &module2, sizeof(module2));
 
 
-	get_wire_map = resolver_resolve(module);
-//TODO Fix this test
-	//should not call any more functions
-	get_wire_map2 = resolver_resolve(module2);
-	LONGS_EQUAL(1/*0*/, linkedList_size(get_wire_map2));
-	//think should equal 0?
+	get_wire_list = resolver_resolve(module);
+	LONGS_EQUAL(2, linkedList_size(get_wire_list));
+	get_wire_list2 = resolver_resolve(module2);
+	LONGS_EQUAL(1, linkedList_size(get_wire_list2)); //creates one empty importer wires struct
+
+	get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_list2);
+	LONGS_EQUAL(0, linkedList_size(get_importer_wires->wires));
+	linkedList_destroy(get_importer_wires->wires);
+	free(get_importer_wires);
+	linkedList_destroy(get_wire_list2);
 
-	get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_map);
+	get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_list);
 	if ( get_importer_wires->importer == module ) {
 		module_setWires(module, get_importer_wires->wires);
-		get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_map);
+		free(get_importer_wires);
+		get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_list);
 		POINTERS_EQUAL(get_importer_wires->importer, module2);
 		module_setWires(module2, get_importer_wires->wires);
+		free(get_importer_wires);
 	} else {
 		POINTERS_EQUAL(get_importer_wires->importer, module2);
 		module_setWires(module2, get_importer_wires->wires);
-		get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_map);
+		free(get_importer_wires);
+		get_importer_wires = (importer_wires_pt) linkedList_removeLast(get_wire_list);
 		POINTERS_EQUAL(get_importer_wires->importer, module);
 		module_setWires(module, get_importer_wires->wires);
+		free(get_importer_wires);
 	}
 
-
 	//register as resolved
 	module_setResolved(module);
 	module_setResolved(module2);
@@ -262,8 +269,7 @@ TEST(resolver, resolve){
 	module_destroy(module);
 	module_destroy(module2);
 
-	linkedList_destroy(get_wire_map);
-
+	linkedList_destroy(get_wire_list);
 	free(id);
 	free(id2);
 	free(service_name);
@@ -273,38 +279,25 @@ TEST(resolver, resolve){
 
 TEST(resolver, resolve_fail){
 	module_pt module;
-	module_pt module2;
 	manifest_pt manifest = (manifest_pt) 0x01;
-	manifest_pt manifest2 = (manifest_pt) 0x02;
 	manifest_parser_pt parser = (manifest_parser_pt) 0x03;
-	manifest_parser_pt parser2 = (manifest_parser_pt) 0x04;
 	bundle_pt bundle = (bundle_pt) 0x05;
 	version_pt version = (version_pt) malloc(sizeof(*version));
-	linked_list_pt capabilities = NULL;
 	linked_list_pt requirements = NULL;
 	linked_list_pt empty_capabilities = NULL;
-	linked_list_pt empty_requirements = NULL;
 	char * name = my_strdup("module_one");
-	char * name2 = my_strdup("module_two");
 	char * id = my_strdup("42");
-	char * id2 = my_strdup("43");
 	char * service_name = my_strdup("test_service_foo");
 	requirement_pt req = (requirement_pt) 0x06;
 	requirement_pt req2= (requirement_pt) 0x07;
-	capability_pt cap = (capability_pt) 0x08;
-	capability_pt cap2= (capability_pt) 0x09;
 	linked_list_pt get_wire_map;
 
 	//creating modules
-	linkedList_create(&capabilities);
 	linkedList_create(&empty_capabilities);
 	linkedList_create(&requirements);
-	linkedList_create(&empty_requirements);
 
 	linkedList_addElement(requirements, req);
 	linkedList_addElement(requirements, req2);
-	linkedList_addElement(capabilities, cap);
-	linkedList_addElement(capabilities, cap2);
 
 
 	mock().expectOneCall("manifestParser_create")
@@ -326,27 +319,7 @@ TEST(resolver, resolve_fail){
 	mock().expectOneCall("manifestParser_destroy")
 			.withParameter("manifest_parser", parser);
 
-	mock().expectOneCall("manifestParser_create")
-			.withParameter("manifest", manifest2)
-			.withOutputParameterReturning("manifest_parser", &parser2, sizeof(parser2))
-			.ignoreOtherParameters();
-	mock().expectOneCall("manifestParser_getSymbolicName")
-			.withParameter("parser", parser2)
-			.withOutputParameterReturning("symbolicName", &name2, sizeof(name2));
-	mock().expectOneCall("manifestParser_getBundleVersion")
-			.withParameter("parser", parser2)
-			.withOutputParameterReturning("version", &version, sizeof(version_pt));
-	mock().expectOneCall("manifestParser_getCapabilities")
-			.withParameter("parser", parser2)
-			.withOutputParameterReturning("capabilities", &capabilities, sizeof(linked_list_pt));
-	mock().expectOneCall("manifestParser_getCurrentRequirements")
-			.withParameter("parser", parser2)
-			.withOutputParameterReturning("requirements", &empty_requirements, sizeof(linked_list_pt));
-	mock().expectOneCall("manifestParser_destroy")
-			.withParameter("manifest_parser", parser2);
-
 	module = module_create(manifest, id, bundle);
-	module2 = module_create(manifest2, id2, bundle);
 
 	resolver_addModule(module);
 
@@ -354,49 +327,26 @@ TEST(resolver, resolve_fail){
 			.withParameter("requirement", req)
 			.withOutputParameterReturning("targetName", &service_name, sizeof(service_name));
 
-	/*mock().expectOneCall("requirement_getTargetName")
-			.withParameter("requirement", req2)
-			.withOutputParameterReturning("targetName", &service_name2, sizeof(service_name2));
-
-	bool out = true;
-	mock().expectOneCall("requirement_isSatisfied")
-			.withParameter("requirement", req)
-			.withParameter("capability", cap)
-			.withOutputParameterReturning("inRange", &out, sizeof(out));
-
-	mock().expectOneCall("requirement_isSatisfied")
-			.withParameter("requirement", req2)
-			.withParameter("capability", cap2)
-			.withOutputParameterReturning("inRange", &out, sizeof(out));
-
-	mock().expectNCalls(2, "capability_getModule")
-			.withParameter("capability", cap)
-			.withOutputParameterReturning("module", &module2, sizeof(module2));
-
-	mock().expectNCalls(2, "capability_getModule")
-			.withParameter("capability", cap2)
-			.withOutputParameterReturning("module", &module2, sizeof(module2));*/
-
 	mock().expectOneCall("framework_log");
 
 	get_wire_map = resolver_resolve(module);
 	POINTERS_EQUAL(NULL, get_wire_map);
-}
-
-TEST(resolver, moduleResolved){
-	//resolver_moduleResolved(module);
-}
-
-/*
-TEST(resolver, removeModule){
-	module_pt module ;
-
-	module = module_create(actual_manifest, actual_id, actual_bundle);
 
+	//cleanup
 	resolver_removeModule(module);
-}
-*/
 
+	mock().expectOneCall("requirement_destroy")
+			.withParameter("requirement", req);
 
+	mock().expectOneCall("requirement_destroy")
+			.withParameter("requirement", req2);
 
+	mock().expectOneCall("version_destroy")
+			.withParameter("version", version);
+
+	module_destroy(module);
 
+	free(service_name);
+	free(version);
+	free(id);
+}