维护服务测试

Mozilla 维护服务的自动化测试有点棘手。它们位于 toolkit/mozapps/update/tests/unit_service_updater/ 中,并且允许使用该服务对应用程序更新进行自动化测试。

在自动化过程中,所有内容都会被签名,并且测试会正确地检查证书验证等功能是否正常工作。但是,如果您想在本地运行测试,则 MAR 和更新程序二进制文件将不会被签名。因此,这些证书的验证将失败,并且测试将无法正常运行。

我们不希望这些测试在有人在本地运行大量测试时总是失败。为了避免这种情况,如果在本地运行测试并且没有花时间正确设置它们,则测试基本上会无条件地通过。

如果您希望它们在本地实际运行,则需要正确设置您的环境。

设置本地运行测试

为了在本地运行服务测试,我们必须绕过大部分证书验证。因此,如果您需要特别测试此功能,则此方法可能没有帮助。

向注册表添加回退密钥

首先,您需要将回退密钥添加到注册表中。通常,Firefox 安装程序会将一些证书信息写入安装特定位置的注册表项中。但是,在测试中,我们无法获得写入此密钥的权限,也不能让测试环境预测我们可能测试的每个可能的安装目录。为了解决这个问题,如果服务找不到安装特定的密钥,它将检查静态回退位置。

正确设置回退密钥的最简单方法是将下面的文本复制到一个 .reg 文件中,然后双击该文件以将其合并到注册表中。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\MaintenanceService\3932ecacee736d366d6436db0f55bce4]

[HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\MaintenanceService\3932ecacee736d366d6436db0f55bce4\0]
"issuer"="DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1"
"name"="Mozilla Corporation"

[HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\MaintenanceService\3932ecacee736d366d6436db0f55bce4\1]
"issuer"="DigiCert SHA2 Assured ID Code Signing CA"
"name"="Mozilla Corporation"

[HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\MaintenanceService\3932ecacee736d366d6436db0f55bce4\2]
"issuer"="Mozilla Fake CA"
"name"="Mozilla Fake SPC"

在没有证书验证的情况下构建

要禁用证书验证,请将此构建标志添加到您的 mozconfig 文件中

ac_add_options --enable-unverified-updates

您需要重新构建才能使此更改生效。

复制维护服务二进制文件

此步骤将假设您已经安装了维护服务。

首先,将现有的维护服务二进制文件移出原处。它最初位于 C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe。一个简单的方法是将 .bak 附加到其名称。您可能应该在测试完成后恢复原始的维护服务二进制文件。

现在,将您构建的维护服务二进制文件复制到该目录。它位于 <obj directory>\dist\bin\maintenanceservice.exe

如果您对维护服务进行更改并重新构建,则需要重复此步骤。

运行测试

您现在应该可以运行服务测试了

./mach test toolkit/mozapps/update/tests/unit_service_updater/<test>

或运行所有测试

./mach test toolkit/mozapps/update/tests/unit_service_updater