Fog::Mock.reset is not resetting image (glance) mock data.
So, I'm not entirely sure if this a bug in fog-openstack - or an incorrect assumption made in fog-core (I'd say a bit of both).
The problem is that if I understand correctly, if one wishes to reset the mocks when testing, this can be achieved by calling
Fog::Mock.reset
The reset method is implemented in fog-core:
def self.reset
mocked_services = []
Fog.constants.map do |x|
next if Fog.autoload?(x)
x_const = Fog.const_get(x)
x_const.respond_to?(:constants) && x_const.constants.map do |y|
next if x_const.autoload?(y)
y_const = x_const.const_get(y)
y_const.respond_to?(:constants) && y_const.constants.map do |z|
next if y_const.autoload?(z)
mocked_services << y_const.const_get(z) if z.to_sym == :Mock
end
end
end
mocked_services.each do |mocked_service|
next unless mocked_service.respond_to?(:reset)
mocked_service.reset
end
end
So: get constants under Fog (i.e. :Image), get constants under Fog::Image (i.e. :OpenStack) and then get from Fog::Image::OpenStack - if one of them is called :Mock, make it a candidate for resetting.
The problem is that there are different classes for different versions of Glance API: i.e. Fog::Image::OpenStack::V1::Mock - so the Mock class in the hierarchy is under V1, not under OpenStack, where fog-core is searching for it.
Until this issue is fixed, a workaround is to i.e. call:
Fog::Mock.reset
Fog::Image::OpenStack::V1::Mock.reset
to manually reset those mocks - however, I think that a proper solution would need to be added. I think that the same issue will apply to other implementations of versioned APIs (i.e. Keystone), though I didn't check this.