Fixture¶
用于编写使用 oslo.versionedobjects 的代码的测试的 fixtures
注意
此模块具有生产代码运行时不需要的几个额外的依赖项,因此默认情况下未安装。为了确保您的测试中存在这些依赖项,请将 oslo.versionedobjects[fixtures] 添加到您的测试依赖项列表中。
- oslo_versionedobjects.fixture.CompatArgSpec¶
别名
ArgSpec
- class oslo_versionedobjects.fixture.FakeIndirectionAPI(serializer=None)¶
- object_action(context, objinst, objmethod, args, kwargs)¶
对 VersionedObject 实例执行操作。
当 indirection_api 设置在 VersionedObject 上(设置为实现此接口的类时),远程方法上的方法调用将执行此操作以实际执行所需的调用。这通常涉及执行 RPC。
- 参数:
context – 执行操作的上下文
objinst – 执行操作的对象实例
objmethod – 要调用的操作方法的名称
args – 操作方法的定位参数
kwargs – 操作方法的关键字参数
- 返回值:
操作方法的结果
- object_backport(context, objinst, target_version)¶
自版本 0.10.0 起已弃用。
请改用
object_backport_versions()。将对象实例回溯到指定的版本。
当 indirection_api 设置在 VersionedObject 上(设置为实现此接口的类时),基本 VersionedObjectSerializer 在接收版本比本地注册中更新的对象时,默认行为是调用此方法以请求对象的回溯。在具有 RPC 可访问服务的总线上,该服务可以优雅地将较新的对象降级为较旧的服务,此方法充当旧代码在接收来自较新代码的对象时的转换机制。
注意:此较旧/原始方法即将弃用。当需要回溯时,将首先尝试较新的 object_backport_versions(),如果引发 NotImplementedError,则将回退到此(不太理想)的方法。
- 参数:
context – 执行回溯的上下文
objinst – 要回溯的 VersionedObject 的实例
target_version – 请求主机理解的 objinst 类的最大版本。
- 返回值:
降级的 objinst 实例
- object_class_action(context, objname, objmethod, objver, args, kwargs)¶
自版本 0.10.0 起已弃用。
请改用
object_class_action_versions()。对 VersionedObject 类执行操作。
当 indirection_api 设置在 VersionedObject 上(设置为实现此接口的类时),远程类方法上的 classmethod 调用将执行此操作以实际执行所需的调用。这通常涉及执行 RPC。
- 参数:
context – 执行操作的上下文
objname – 对象的注册名称
objmethod – 要调用的操作方法的名称
objver – 要对其执行操作的对象的(远程)版本
args – 操作方法的定位参数
kwargs – 操作方法的关键字参数
- 返回值:
操作方法的结果,可能(也可能不)是实现 VersionedObject 类的实例。
- object_class_action_versions(context, objname, objmethod, object_versions, args, kwargs)¶
对 VersionedObject 类执行操作。
当 indirection_api 设置在 VersionedObject 上(设置为实现此接口的类时),远程类方法上的 classmethod 调用将执行此操作以实际执行所需的调用。这通常涉及执行 RPC。
与 object_class_action() 的不同之处在于,它提供了 object_versions,这是客户端对象版本的清单,以便于嵌套回溯。该清单是调用 obj_tree_get_versions() 的结果。
注意:此方法最初不在接口规范中,因此如果未实现,基本类将引发 NotImplementedError。对于回溯,将首先尝试此方法,如果未实现,将回退到 object_class_action()。新的实现应提供此方法而不是 object_class_action()
- 参数:
context – 执行操作的上下文
objname – 对象的注册名称
objmethod – 要调用的操作方法的名称
object_versions – 键值对为 {objname: version} 的字典
args – 操作方法的定位参数
kwargs – 操作方法的关键字参数
- 返回值:
操作方法的结果,可能(也可能不)是实现 VersionedObject 类的实例。
- class oslo_versionedobjects.fixture.IndirectionFixture(indirection_api=None)¶
- setUp()¶
准备 Fixture 以供使用。
不应覆盖此方法。具体的 fixture 应该实现 _setUp。仍然支持覆盖 setUp,但不推荐。
在 setUp 完成后,fixture 将具有一个或多个属性,这些属性可用于(具体取决于具体的子类)。
- 引发:
如果 _setUp 失败,则引发 MultipleExceptions。MultipleExceptions 中捕获的最后一个异常将是一个 SetupError 异常。
- 返回值:
None。
- 更改于 1.3:
覆盖 setUp 的建议已反转 - 在 1.3 之前,应该覆盖 setUp(),现在不应该覆盖。
- 更改于 1.3.1:
现在捕获 BaseException,并且只有 Exception 的子类才会被包装在 MultipleExceptions 中。
- exception oslo_versionedobjects.fixture.ObjectHashMismatch(expected, actual)¶
- class oslo_versionedobjects.fixture.ObjectVersionChecker(obj_classes={})¶
- get_dependency_tree()¶
- get_hashes(extra_data_func=None)¶
返回计算出的对象哈希的字典。
- 参数:
extra_data_func – 一个函数,它接收对象类,收集有关类更多相关的数据,这些数据在版本控制中是必需的。返回包含额外数据位的元组。
- test_compatibility_routines(use_manifest=False, init_args=None, init_kwargs=None)¶
测试所有对象类上的 obj_make_compatible()。
- 参数:
use_manifest – 一个布尔值,用于确定是否将版本清单传递给 obj_make_compatible
init_args – 格式为 {obj_class: [arg1, arg2]} 的字典,将用于将参数传递给给定 obj_class 上的 init。如果不需要参数,则不需要将 obj_class 添加到字典中
init_kwargs – 格式为 {obj_class: {'kwarg1': val1}} 的字典,将用于将 kwargs 传递给给定 obj_class 上的 init。如果不需要 kwargs,则不需要将 obj_class 添加到字典中
- test_hashes(expected_hashes, extra_data_func=None)¶
- test_relationships(expected_tree)¶
- test_relationships_in_order()¶
- class oslo_versionedobjects.fixture.OsloOrderedDict¶
用于 Python 一致性的 Oslo 版本的 OrderedDict。
- class oslo_versionedobjects.fixture.StableObjectJsonFixture¶
确保获得稳定的 JSON 对象表示形式的 fixture。
由于对象包含 set() 等内容,这些内容无法转换为 JSON,因此我们有一些情况,表示形式并非完全确定性的。这在运行时无关紧要,但对于尝试在低级别断言内容的单元测试而言却很重要。
此 fixture 模拟 obj_to_primitive() 调用,并确保在返回给调用者之前对更改字段的列表(来自集合)进行排序。
- setUp()¶
准备 Fixture 以供使用。
不应覆盖此方法。具体的 fixture 应该实现 _setUp。仍然支持覆盖 setUp,但不推荐。
在 setUp 完成后,fixture 将具有一个或多个属性,这些属性可用于(具体取决于具体的子类)。
- 引发:
如果 _setUp 失败,则引发 MultipleExceptions。MultipleExceptions 中捕获的最后一个异常将是一个 SetupError 异常。
- 返回值:
None。
- 更改于 1.3:
覆盖 setUp 的建议已反转 - 在 1.3 之前,应该覆盖 setUp(),现在不应该覆盖。
- 更改于 1.3.1:
现在捕获 BaseException,并且只有 Exception 的子类才会被包装在 MultipleExceptions 中。
- class oslo_versionedobjects.fixture.VersionedObjectRegistryFixture¶
使用 VersionedObjectRegistry 作为临时注册模式 fixture。
模式解决方案是备份对象注册表,在本地注册一个类,然后恢复原始注册表。这可用于不需要永久注册但将具有查找注册的调用的测试对象。
- static register(cls_name)¶
- setUp()¶
准备 Fixture 以供使用。
不应覆盖此方法。具体的 fixture 应该实现 _setUp。仍然支持覆盖 setUp,但不推荐。
在 setUp 完成后,fixture 将具有一个或多个属性,这些属性可用于(具体取决于具体的子类)。
- 引发:
如果 _setUp 失败,则引发 MultipleExceptions。MultipleExceptions 中捕获的最后一个异常将是一个 SetupError 异常。
- 返回值:
None。
- 更改于 1.3:
覆盖 setUp 的建议已反转 - 在 1.3 之前,应该覆盖 setUp(),现在不应该覆盖。
- 更改于 1.3.1:
现在捕获 BaseException,并且只有 Exception 的子类才会被包装在 MultipleExceptions 中。
- oslo_versionedobjects.fixture.compare_obj(test, obj, db_obj, subs=None, allow_missing=None, comparators=None)¶
比较 VersionedObject 和类似字典的数据库对象。
此函数自动转换 TZ-aware 的日期时间,并遍历对象的字段。
- 参数:
test – 进行比较的 TestCase
obj – 要检查的 VersionedObject
db_obj – 作为参考的类字典数据库对象
subs – objkey=dbkey 字段替换的字典
allow_missing – db_obj 中可能不存在的字段列表
comparators – 用于某些字段的比较器函数映射
- oslo_versionedobjects.fixture.get_method_spec(method)¶
获取稳定且兼容的方法规范。
Python3 中的新特性(仅限关键字的参数和注解)不被支持或无法用 inspect.getargspec() 表示,但许多对象哈希已经使用该方法记录。当这些特性未使用时,此函数尝试返回与 getargspec() 兼容的内容(即),否则仅返回较新的 getfullargspec() 表示形式。
ObjectVersionChecker¶
指纹¶
ObjectVersionChecker 的一个功能是生成版本化对象的指纹。这些指纹是对象版本和对象 RPC 关键属性(字段和可远程方法)的哈希的组合。
test_hashes() 方法用于检索对象的预期和实际指纹。在使用此方法断言本地项目中对象版本时,预期指纹是对象先前状态的指纹。这些指纹在项目本地定义,并传递给 test_hashes()。实际指纹是对象当前状态动态生成的指纹。如果对象上的预期和实际指纹不匹配,这意味着先前在对象中定义的 RPC 合同不再相同。因此,必须更新对象的版本。当更新版本并再次运行测试时,将生成对象的新的指纹。此指纹应覆盖指纹的先前版本。这表明新生成的指纹现在是对象的最新的状态。