Maintenance Service Tests
The automated tests for the Mozilla Maintenance Service are a bit tricky. They
are located in toolkit/mozapps/update/tests/unit_service_updater/
and they
allow for automated testing of application update using the Service.
In automation, everything gets signed and the tests properly check that things like certificate verification work. If, however, you want to run the tests locally, the MAR and the updater binary will not be signed. Thus, the verification of those certificates will fail and the tests will not run properly.
We don’t want these tests to just always fail if someone runs large amounts of tests locally. To avoid this, the tests basically just unconditionally pass if you run them locally and don’t take the time to set them up properly.
If you want them to actually run locally, you will need to set up your environment properly.
Setting Up to Run the Tests Locally
In order to run the service tests locally, we have to bypass much of the certificate verification. Thus, this method may not be helpful if you need to test that feature in particular.
Add Fallback Key to Registry
First, you will need to add the fallback key to the registry. Normally, the Firefox installer writes some certificate information to a registry key in an installation-specific place. In testing, however, we can’t get the permissions to write this key, nor can we have the test environment predict every possible installation directory that we might test with. To get around this problem, if the Service can’t find the installation-specific key, it will check a static fallback location.
The easiest way to correctly set up the fallback key is to copy the text below
into a .reg
file and then double click it in the file browser to merge it
into the registry.
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"
Build without Certificate Verification
To disable certificate verification, add this build flag to your mozconfig
file:
ac_add_options --enable-unverified-updates
You will need to rebuild for this to take effect.
Copy the Maintenance Service Binary
This step will assume that you already have the Maintenance Service installed.
First, move the existing Maintenance Service binary out of the way. It will
initially be located at
C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe
.
An easy way to do this is to append .bak
to its name. You should probably
restore your original Maintenance Service binary when you are done testing.
Now, copy the Maintenance Service binary that you built into that directory.
It will be located at <obj directory>\dist\bin\maintenanceservice.exe
.
If you make changes to the Maintenance Service and rebuild, you will have to repeat this step.
Running the Tests
You should now be ready run a service test:
./mach test toolkit/mozapps/update/tests/unit_service_updater/<test>
Or run all of them:
./mach test toolkit/mozapps/update/tests/unit_service_updater