diff --git a/tempest/common/fixed_network.py b/tempest/common/fixed_network.py
index 67fbab1..b2d7c0b 100644
--- a/tempest/common/fixed_network.py
+++ b/tempest/common/fixed_network.py
@@ -13,6 +13,7 @@
 import copy
 from oslo_log import log as logging
 
+from tempest_lib.common.utils import misc as misc_utils
 from tempest_lib import exceptions as lib_exc
 
 from tempest.common import isolated_creds
@@ -35,6 +36,7 @@
            is the network to be used, and it's not visible to the tenant
     :return a dict with 'id' and 'name' of the network
     """
+    caller = misc_utils.find_test_caller()
     fixed_network_name = CONF.compute.fixed_network_name
     network = None
     # NOTE(andreaf) get_primary_network will always be available once
@@ -46,6 +48,12 @@
         network = creds_provider.get_primary_creds().network
     else:
         if fixed_network_name:
+            msg = ('No valid network provided or created, defaulting to '
+                   'fixed_network_name')
+            if caller:
+                LOG.debug('(%s) %s' % (caller, msg))
+            else:
+                LOG.debug(msg)
             try:
                 resp = compute_networks_client.list_networks(
                     name=fixed_network_name)
@@ -59,19 +67,33 @@
                     network = networks[0]
                 else:
                     msg = "Configured fixed_network_name not found"
+                    if caller:
+                        msg = '(%s) %s' % (caller, msg)
                     raise exceptions.InvalidConfiguration(msg)
                 # To be consistent with network isolation, add name is only
                 # label is available
-                network['name'] = network.get('name', network.get('label'))
+                name = network.get('name', network.get('label'))
+                if name:
+                    network['name'] = name
+                else:
+                    raise lib_exc.NotFound()
             except lib_exc.NotFound:
                 # In case of nova network, if the fixed_network_name is not
                 # owned by the tenant, and the network client is not an admin
                 # one, list_networks will not find it
-                LOG.info('Unable to find network %s. '
-                         'Starting instance without specifying a network.' %
-                         fixed_network_name)
+                msg = ('Unable to find network %s. '
+                       'Starting instance without specifying a network.' %
+                       fixed_network_name)
+                if caller:
+                    LOG.info('(%s) %s' % (caller, msg))
+                else:
+                    LOG.info(msg)
                 network = {'name': fixed_network_name}
-    LOG.info('Found network %s available for tenant' % network)
+    msg = ('Found network %s available for tenant' % network)
+    if caller:
+        LOG.info('(%s) %s' % (caller, msg))
+    else:
+        LOG.info(msg)
     return network
 
 
@@ -87,5 +109,9 @@
         return params
 
     if network:
-        params.update({"networks": [{'uuid': network['id']}]})
+        if 'id' in network.keys():
+            params.update({"networks": [{'uuid': network['id']}]})
+        else:
+            LOG.warn('The provided network dict: %s was invalid and did not '
+                     ' contain an id' % network)
     return params
