X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Fvpp_object.py;h=2c07d472a657070a7c7cf0be616b37d9b4693871;hb=b4e5e50fe;hp=a1cf42fce35385e74cb8a028ad9a1cd39af2d148;hpb=1b686409307d4c7b29ee3b065c4d010a275a0fd1;p=vpp.git diff --git a/test/vpp_object.py b/test/vpp_object.py index a1cf42fce35..2c07d472a65 100644 --- a/test/vpp_object.py +++ b/test/vpp_object.py @@ -1,33 +1,55 @@ """ abstract vpp object and object registry """ -from abc import ABCMeta, abstractmethod +import abc +import six +from six import moves + +@six.add_metaclass(abc.ABCMeta) class VppObject(object): """ Abstract vpp object """ - __metaclass__ = ABCMeta - @abstractmethod + @abc.abstractmethod def add_vpp_config(self): """ Add the configuration for this object to vpp. """ pass - @abstractmethod + @abc.abstractmethod def query_vpp_config(self): """Query the vpp configuration. :return: True if the object is configured""" pass - @abstractmethod + @abc.abstractmethod def remove_vpp_config(self): """ Remove the configuration for this object from vpp. """ pass - @abstractmethod def object_id(self): """ Return a unique string representing this object. """ - pass + return "Undefined. for <%s %s>" % (self.__class__.__name__, id(self)) + + def __str__(self): + return self.object_id() + + def __repr__(self): + return '<%s>' % self.object_id() + + def __hash__(self): + return hash(self.object_id()) + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return NotImplemented + if other.object_id() == self.object_id(): + return True + return False + + # This can be removed when python2 support is dropped. + def __ne__(self, other): + return not self.__eq__(other) class VppObjectRegistry(object): @@ -66,18 +88,17 @@ class VppObjectRegistry(object): return logger.info("REG: Removing VPP configuration for registered objects") # remove the config in reverse order as there might be dependencies + failed = [] for obj in reversed(self._object_registry): if obj.query_vpp_config(): logger.info("REG: Removing configuration for %s" % obj) obj.remove_vpp_config() + if obj.query_vpp_config(): + failed.append(obj) else: logger.info( "REG: Skipping removal for %s, configuration not present" % obj) - failed = [] - for obj in self._object_registry: - if obj.query_vpp_config(): - failed.append(obj) self.unregister_all(logger) if failed: logger.error("REG: Couldn't remove configuration for object(s):")