summaryrefslogtreecommitdiff
path: root/services/robotests
AgeCommit message (Collapse)Author
2025-03-04Pass in cancellation reason to B&R tasks Sarp Misoglu
This is to give more granular information to tasks about why they got cancelled. This will help them report why they failed. The cancelAll parameter was only set to false for cancellations due to timeouts, so I've removed it. This is a no-op refactor. Flag: EXEMPT refactor Bug: 399645990 Test: atest CtsBackupTestCases Change-Id: I1bd6d9eff42c5edeb0f4df453bae792cf994bb6a
2025-01-09Move BackupWakeLock to its own file Sarp Misoglu
There's no reason for it to be under UserBackupManagerService and bloat it up. Test: n/a Flag: EXEMPT no-op refactor Change-Id: I595fe26e97e804e59033a5dc95e8fa8e16de895f
2025-01-09Fix debug logging in the backup service Sarp Misoglu
The existing DEBUG and DEBUG_SCHEDULING had been set to true (maybe accidentally?) for 8+ years. Whereas MORE_DEBUG is false as expected. In this CL we: 1) Remove existing DEBUG and DEBUG_SCHEDULING checks. This is a no-op. 2) Rename MORE_DEBUG to DEBUG. Also no-op. 3) Make any Log.v log that isn't guarded by if(DEBUG) a Log.d instead. Log.v logs should always be guarded by a default false constant so the compiler strips out the Strings from the binary. Test: n/a Flag: EXEMPT no-op refactor Change-Id: I117f7fe04da1a62c3ad42d71b080fed6454f73af
2025-01-09Use internal interface for AMS -> BMS calls Sarp Misoglu
Currently these go through the IBackupManager.aidl interface, which is unnecessary since they are local calls within the system server. Test: atest CtsBackupTestCases Flag: EXEMPT no-op refactor Change-Id: I260197d30184d10a92f356f729d28fd0ab22aec1
2025-01-06Merge "Stop using _upstream suffix." into main am: e0fa880b62 am: 08b5eb0388 Treehugger Robot
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3434333 Change-Id: Ibdc234b159386fbe4a2a08913a2f6b3a6e66f8ae Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2024-12-30Stop using _upstream suffix. Rex Hoffman
Bug: 386691288 Test: CI Change-Id: I83bed144fbc6320504c988d6dc8f9a3f7e60f1b5
2024-12-23Acquire the backup wakelock with a timeout Sarp Misoglu
There have been a few reports of the backup service failing to call release() on the wakelock and draining battery for hours. These are rare failures and hard to debug individually but with the timeout we will limit the worst case significantly. I am setting the default timeout to 30 minutes. This should be more than enough time for a backup or restore operation. If in the future these operation get longer, the timeout is configurable by a setting. Test: atest CtsBackupTestCases Fixes: 364931501 Fixes: 357769443 Fixes: 289789401 Flag: EXEMPT bugfix Change-Id: Iaac0218d5258031b6f67c3c56c776ce098e8a8c4
2024-12-02Delete Filipendo workaround code for R Sarp Misoglu
It seems this was intended to be removed for S. I've also double checked this setting isn't used anywhere that I can find. Fixes: 154822946 Test: presubmit Change-Id: I974b30a54883280d16dacf9a2de876d87f1e2c13
2024-11-27Don't kill apps if they are not in restricted mode Sarp Misoglu
Also respect the killAfterRestore flag for them. Before this change, the android:killAfterRestore attribute was only respected for apps that do Key/Value backups. This was because Full backup apps used to always be started in restricted mode for B&R operations and the framework needed to kill the app to reset the restricted mode state. Now, full backup apps may not be started in restricted mode (after ag/30155472) so there's no need to kill them unless if they set killAfterRestore. For this to work, we need to keep track of whether an app is in restricted mode. I've moved all connection/disconnection logic to the new connection manager class so this is now fairly easy. Note that apps will only not be in restricted mode if they are K/V or if enable_restricted_mode_changes is enabled and they opted out. So I think all the new behavior is guarded by the same flag. Flag: com.android.server.backup.enable_restricted_mode_changes Bug: 376661510 Test: atest BackupAgentConnectionManagerTest & atest CtsBackupHostTestCases Change-Id: I1e94fb3b794961904a6c603ac34b00f3878f4e3e
2024-11-18Move BackupAgent connection to a helper class Sarp Misoglu
This is to isolate some scope of UserBackupManagerService. It's too big and unreadable. I've also added some tests. But since these are blocking and async operations, I couldn't see any way other than adding some thread sleeps to avoid flakiness. These tests could still end up being too flaky. If that's the case we might have to leave this code untested :( This is a no-op refactor. Bug: 376661510 Flag: EXEMPT refactor Test: atest BackupAgentConnectionManagerTest & atest CtsBackupHostTestCases Change-Id: I9893336fb224148ce5b2f3c6fa2fc26828d2a1e9
2024-05-27Add strict_mode: false Kevin Liu
As strict mode is in place, the default strict_mode is now set to true. We are encourage teams to write tests in strict_mode to make tests Bivalent (able to run on device and devicelessly) For more info on strict mode: go/roboStrictMode Flag: NONE Test: atest SystemUiRoboTests, SpaRoboRNGTests, SettingsLibRoboTests, FrameworksServicesRoboTests, BackupFrameworksServicesRoboTests, InputRoboRNGTests Bug: 334089788 Change-Id: I9827910496af67eab33efddb7c32d8e40b497c13
2024-05-14Catch and ignore `IllegalArgumentException` thrown by `unbindService` Joël Stemmer
When `TransportConnection` handles `onServiceConnected` or `onBindingDied` it calls `Context.unbindService`. In a very small number of cases this fails because the connection is not (or no longer?) registered. When this happens, the system server crashes causing the device to reboot. We don't really care if the service is not registered when we try to unbind it, so we just catch and ignore the exception to avoid crashing the system server. Bug: 335547110 Test: atest TransportConnectionTest.java Change-Id: Ic7f34eacd1f621c42a68128ef992043dba6808f1
2024-04-10Improve `dumpsys backup` Piyush Mehrotra
This is a re-submit of the previously reverted ag/22327091 by piee@google.com. Original description: This change refactors `dumpsys backup` code and adds some improvements - - Removes `isUserReadyForBackup()` check on calling user. This check is not needed, as it prevents a User with INTERACT_ACROSS_USERS_FULL permission, but not Backup activated, to get info about Backup service on other users. This is particularly relevant in case of headless mode, as Backup service isn't running for SYSTEM_USER. - Adds `--user <userId>` optional parameter for `dumpsys backup`, which will return info about Backup service for the user passed in argument. This is also helpul in case of multiple users on the device. Changes by sarpm@google.com over the original: - Some test improvements: remove @VisibleForTesting, increase coverage slightly. - Remove redundant robo tests that are now covered by the unit tests. Bug: 267755698 Test: atest BackupManagerServiceTest Manual test by running dumpsys backup with optional arguments. Change-Id: Id7790a501a8befb12a212f66adfc0cd8cc9f9e8b
2024-01-05Merge "Uptesting is moving folks to /external/robolectric from ↵ Rex Hoffman
/external/robolectric-shadows" into main am: 3a1ad8c70d am: fe73e96198 am: 6d8b448d3d Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2889455 Change-Id: Ie81e770aac077cdf4844c6321f1209c3b2d21187 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2024-01-05Uptesting is moving folks to /external/robolectric from ↵ Rex Hoffman
/external/robolectric-shadows We maintain /external/robolectric (keep it in sync with github/google3) and are getting ready to delete /external/robolectric-shadows Bug: 314757990 Test: atest same failing tests before and after in services/robotests. Flag: NA Change-Id: Ie3d2e902ffcba6b9d159b78592f7d6ce31288a2f
2023-12-13Move package parsing implementations to internal TYM Tsai
1. Move implementations and related utils to internal 2. Make calling SystemConfig methods from ParsingPackageUtils.Callback to avoid calling from the client side. 3. Move isMatch and isEnabled from ComponentParseUtils to PackageInfoUtils 4. Move string from SELinuxUtil to SeinfoUtil 5. Move some methods from AndroidPackageUtils to AndroidPackageLegacyUtils 6. Copy some methods from PackageInfoUtils to AppInfoUtils 7. Use PackageParserException instead of PackageManagerException for validatePackageDexMetadata method Bug: 309596860 Test: build pass and boot to home Test: atest PackageManagerServiceServerTests Test: atest PackageManagerComponentOverrideTests Test: atest PermissionServiceMockingTests Test: atest PackageManagerServiceUnitTests Test: atest PackageManagerPerfTests Change-Id: I3de48d0d8adf714447823408673e07ed379f27ab
2023-12-05Add support for wired routing Santiago Seifert
This is the third attempt to merge ag/25043811. Wired routing means choosing where media plays among the non-bluetooth routes. You can find details of the design in go/wired-device-routing. You can find a summary of the change here: - Changes are guarded by the enable_audio_policies_device_and_bluetooth_controller flag in the media_solutions namespace. - All wired and active bluetooth devices routes are obtained from AudioManager. - Bluetooth route ids are obtained from BluetoothAdapter, regardless of whether the route corresponds to an active or inactive bluetooth route. - When necessary, audio routing strategies are used to route the audio away from the default audio output. Existing tests became invalid due to changes in the dependencies of AudioPoliciesDeviceRouteController. New tests are being added in the following commit where we need to need to make changes in our dependencies so as to enable testing. Bug: 305199571 Test: atest MediaRouter2HostSideTest CtsMediaBetterTogetherTestCases Change-Id: I060d0e67191750fb1b92c5fc7a102871840a776e
2023-11-30Merge "Revert "Add support for wired routing"" into main Liana Kazanova
2023-11-30Revert "Add support for wired routing" Liana Kazanova
This reverts commit dc78995b35b549a37ca50ce6abf565effe5e0fce. Reason for revert: Reason for revert: Potential culprit for b/314133482 - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted. Change-Id: I718f00008043add508563a4e3e496deefc0fd310
2023-11-30Merge "Add support for wired routing" into main Treehugger Robot
2023-11-29Add support for wired routing Santiago Seifert
This is a revert^2 of ag/25043811. Wired routing means choosing where media plays among the non-bluetooth routes. You can find details of the design in go/wired-device-routing. You can find a summary of the change here: - Changes are guarded by the enable_audio_policies_device_and_bluetooth_controller flag in the media_solutions namespace. - All wired and active bluetooth devices routes are obtained from AudioManager. - Bluetooth route ids are obtained from BluetoothAdapter, regardless of whether the route corresponds to an active or inactive bluetooth route. - When necessary, audio routing strategies are used to route the audio away from the default audio output. Existing tests became invalid due to changes in the dependencies of AudioPoliciesDeviceRouteController. New tests are being added in the following commit where we need to need to make changes in our dependencies so as to enable testing. Bug: 305199571 Test: atest MediaRouter2HostSideTest CtsMediaBetterTogetherTestCases Change-Id: Ia051829189f14ab2eb8310bee74bd17203c0b294
2023-11-29Merge "Revert "Add support for wired routing"" into main Greg Kaiser
2023-11-29Revert "Add support for wired routing" Santiago Seifert
This reverts commit da1e5bb6acdf498d61499e1ab11306c24302b4f5. Reason for revert: b/313914778 Change-Id: I6f97f2e056202035cb31e0a50d8b783c3805725b
2023-11-29Merge "Add support for wired routing" into main Santiago Seifert
2023-11-28Add support for wired routing Santiago Seifert
Wired routing means choosing where media plays among the non-bluetooth routes. You can find details of the design in go/wired-device-routing. You can find a summary of the change here: - Changes are guarded by the enable_audio_policies_device_and_bluetooth_controller flag in the media_solutions namespace. - All wired and active bluetooth devices routes are obtained from AudioManager. - Bluetooth route ids are obtained from BluetoothAdapter, regardless of whether the route corresponds to an active or inactive bluetooth route. - When necessary, audio routing strategies are used to route the audio away from the default audio output. Existing tests became invalid due to changes in the dependencies of AudioPoliciesDeviceRouteController. New tests are being added in the following commit where we need to need to make changes in our dependencies so as to enable testing. Bug: 305199571 Test: atest MediaRouter2HostSideTest CtsMediaBetterTogetherTestCases Change-Id: Ib6f2f2cfd3f65cde4be6a425158487b58c561d7c
2023-11-22Move interfaces to framework internal TYM Tsai
Move interfaces under pasring/pkg/ and pkg/parsing/ to the framework internal path. Bug: 309596860 Test: build pass and boot to home Test: atest PackageManagerServiceServerTests Test: atest PackageManagerComponentOverrideTests Test: atest PermissionServiceMockingTests Test: atest PackageManagerServiceUnitTests Change-Id: I7bc4eae1c9feaca725f9b8bc4e11764d978ef6c6
2023-10-06Clean up obsolete aliases for Truth. Krzysztof Kosiński
Bug: 255714762 Test: presubmit Change-Id: I7e29732e1e77e37cfb491521d14d2f3eb07deb36 Merged-In: I7e29732e1e77e37cfb491521d14d2f3eb07deb36
2023-10-06Clean up obsolete aliases for Truth. Krzysztof Kosiński
Bug: 255714762 Test: presubmit Change-Id: I7e29732e1e77e37cfb491521d14d2f3eb07deb36
2023-08-22Rename BackupManagerMonitorUtil to BackupManagerMonitorEventSender and ↵ beatricemarch
convert it into an instance class in preparation of adding more complex behaviour for recording BMM events to dumpsys. Bug: 290746120 Test: atest BackupManagerMonitorEventSenderTest, BackupManagerServiceTest, TarBackupReaderTest, KeyValuBackupTaskTest, KeyValueBackupReporterTest (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:073d1f1e6abb73ea47a24e670f79e7a488e823ed) Merged-In: Idba7eb5342038a86b34e73f63892a7a7d93bf894 Change-Id: Idba7eb5342038a86b34e73f63892a7a7d93bf894
2023-08-17Rename BackupManagerMonitorUtil to BackupManagerMonitorEventSender and ↵ beatricemarch
convert it into an instance class in preparation of adding more complex behaviour for recording BMM events to dumpsys. Bug: 290746120 Test: atest BackupManagerMonitorEventSenderTest, BackupManagerServiceTest, TarBackupReaderTest, KeyValuBackupTaskTest, KeyValueBackupReporterTest Change-Id: Idba7eb5342038a86b34e73f63892a7a7d93bf894
2023-05-13Merge "Fix connected apps for headless (was previously always checking ↵ Jonathan Scott
allowed apps on user 0)." into udc-dev am: b5c0e6e753 am: 88a1fd87a3 Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23154111 Change-Id: I157de2875d076ab0f7a3223dcd1e87fba9fc8207 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-05-12Fix connected apps for headless (was previously always checking allowed Jonathan Scott
apps on user 0). Also correctly makes DISALLOW_DEBUGGING_FEATURES global to block adb on HSUM Test: Manual use of connected apps settings on HSUM Fixes: 264853055 Fixes: 266542871 Change-Id: I5caecdeeefa42671f1410a07ce06646610256905
2023-05-10Revert "Modifying Backup code to support HSUM mode." am: 91e98fcb5a am: ↵ Wonyoung Kwak
c687b625f8 am: bbf39c4339 am: 882463a13f Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23126758 Change-Id: I0841a53d32fbdb23e60f9564d9e6d328900b427a Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-05-10Merge changes from topic "br-cts-hsum" into udc-dev am: 82a2b5e93c am: ↵ Piyush Mehrotra
60c20b6b0f am: 66ce0276ea am: 0e44e10865 Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22327092 Change-Id: I3e61ae7067b64b75d7ef671b7a40c13419f9006c Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-05-10Revert "Modifying Backup code to support HSUM mode." Wonyoung Kwak
Revert submission 22327091-br-cts-hsum Reason for revert: DroidMonitor-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?branch=git_udc-dev&target=aosp_bramble-userdebug&lkgb=10098913&lkbb=10101009&fkbb=10098962, bug 281753581. Bug: 281753581 Reverted changes: /q/submissionid:22327091-br-cts-hsum Change-Id: I4de169440f587d5a458300a5f360ba974239e530
2023-04-25Modifying Backup code to support HSUM mode. Piyush Mehrotra
Bug: 266703231 Test: Run CTS/GTS tests for backup Change-Id: I7a8d09f9f1be83ff4d9f545439f93b2c5319f007
2023-03-31Add unit tests for feature to enable/disable backup scheduling. Andrea Zilio
Test: atest services/tests/mockingservicestests/src/com/android/server/backup/UserBackupManagerServiceTest.java Fix: 266679434 Change-Id: Iad17bd856fb16c7362c120fa72a560b8885f2f60
2023-03-20Merge "Remove idle requirement for full backup on Wear" Bagus Maulana
2023-03-16allow unit tests to use permissions stub lib Manjeet Rulhania
Bug: 266163862 Bug: 272633154 Change-Id: I9f7b0063025a8adae4af1bcaf76185cc54da766a Test: manual
2023-03-10Remove idle requirement for full backup on Wear Bagus Maulana
Bug: 269323514 Test: atest BackupFrameworksServicesRoboTests Change-Id: I2793f9afaa17f5fe62af5831d522328d23e4d62a (cherry picked from commit ef459c38bbacbbee80bd4df6bf737558593598c9)
2023-03-08Add permissions service dependency Manjeet Rulhania
PMS added a new method which expose a class from permissions service lib, adding the lib to fix class not found error. Bug: 271350595 Bug: 266163862 Test: manual Change-Id: Ieaba49c444b62ce25a16cf4f6499e2efda03f278
2023-03-01Implement BluetoothRouteController that supports Audio Policies Alex Dadukin
Bug: b/255495104 Test: atest AudioPoliciesBluetoothRouteControllerTest Change-Id: I814a776dd80ff1f02b09db91a4174244bcd8ded0
2023-02-20Merge "Add Owners file to media robolectric service tests." am: e2f4f71ca2 ↵ Alex Dadukin
am: f626b58472 am: 39d74defdc Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2446527 Change-Id: I6d6c7adc94f4f6b92ef00a4994c0211331561d7f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
2023-02-20Add Owners file to media robolectric service tests. Alex Dadukin
Bug: b/255495104 Test: N/A Change-Id: I11b0cb8fa3a143b4d9af74f0464ff3737393c9fd
2023-02-15Update the default backup user after onUserUnlocking if necessary Sarp Misoglu
On the first ever boot of a HSUM device, UserManager will create the main user after BackupManagerService is created. If that happens the default user will stay as 0 until the device is rebooted. To prevent this we need to update the default user as soon as it's guaranteed that the main user is created (if one is to be created), which is when the first user unlocks. Bug: 266098768 Test: atest BackupManagerServiceTest atest BackupFrameworksServicesRoboTests manually by doing a factory reset and then checking backup is active for the main user via `adb shell bmgr --user 10 activate` Change-Id: Ic14e7357b468c27d206a57f9e7148d918f747c1d
2023-02-14Merge "Add a new NetworkTimeHelper impl" Neil Fuller
2023-02-08Add a new NetworkTimeHelper impl Neil Fuller
Add a new NetworkTimeHelper impl and changes to support it in the time detector service code. Background: When the location code that became NtpNetworkTimeHelper was first written, Android devices were not guaranteed to be requesting the time regularly from network time sources: it was only done if the user had enabled automatic time detection. That changed a few releases ago, and so the location code should always be able to ask the time detector for the latest network time signal. This is part of a wider goal to remove several dependencies in the Android platform on low-level NTP client code (NtpTrustedTime class). The NTP protocol usage should be an implementation detail, not something that is widely known to unrelated classes that want an accurate time. With the new impl, the SDK SystemClock.currentNetworkTimeClock() call will ask the time detector service for the latest network time too, and not interact with the NTP client singleton directly as it does today. It currently needs to use the NTP client because both the location code and time detector use the NtpTrustedTime singleton independently and it is therefore the closest thing on Android today to an authority of "what is the latest network time the device has obtained?". Once the time detector is the authority on "latest network time", it will allow the platform to apply stringent checks to things like time sync accuracy, which is currently not well checked and heavily dependent on network round-trip time and network delay symmmetry. This refactoring is also potentially important for form factors like Wear, which disable NetworkTimeUpdateService and therefore won't trigger NtpTrustedTime while attempting to sync. There's a good chance the location time sync is also broken on Wear (if present) because of the unusual networking constraints. The API SystemClock.currentNetworkTimeClock(), which was added to the public SDK in Android T, may be unreliable or broken on Wear. In future, Wear could call suggestNetworkTime() on the time detector service from its own equivalent of NetworkTimeUpdateService and restore SystemClock.currentNetworkTimeClock() behavior, while also supporting the location stack's needs (if that is also used on Wear). Centralizing network sync under NetworkTimeUpdateService will mean that fewer components on devices will be syncing time for their own ends, potentially reducing load on time servers too. This centralization also supports options for changing how "network time" is obtained in future, e.g. allowing easier integration of newer protocols like NTS or Roughtime, or partner plug-ins to support proprietary protocols. New implementation details: The TimeZoneDetectorNetworkTimeHelper implementation retrieves the latest network time suggestion from the TimeDetectorInternal API. It attempts to pass time to the GNSS code as often as the original implementation, even when a new time signal isn't available and its potentially repeating itself, in case GNSS code has become reliant on that. Generally, it's hard to tell what the contract should be, particularly with the unusual behavior around "on demand" Vs "periodic" and the historic bug there. The new implementation should become the default when it is considered safe to do so, i.e. after testing when we are confident that NetworkTimeUpdateService is behaving as well as the old NtpNetworkTimeHelper impl when detecting connectivity, etc. This can be done with a single boolean compile-time flag. Other changes: The time detector is now a dependency of the location stack, so the SystemServer service bootstrap ordering has been adjusted. Bug: 222295093 Test: atest services/robotests/src/com/android/server/location/gnss/TimeDetectorNetworkTimeHelperTest.java Test: atest services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java Test: atest services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java Change-Id: I2f9a14776e9fafe426213df7cb0307a3fe541fad
2023-02-02Separate allow lists for profile and full non-system users. [CSarp Misoglu
This change does 2 things - > Separate Backup helper allow lists for profile and full non-system users Due to the work supporting the new headless config (aka 'main' user) we are adding new helpers to the multi-user allowlist in SystemBackupAgent. This allowlist was effectively for work profile so these helpers will start running for profile users as well. Since it might not make sense for all helpers to run for profile user, this CL separates the allowlists. > Separate Backup Eligibility allow lists for profile and full non-system users. Due to the work supporting the new headless config (aka 'main' user) we are adding new packages to the multi-user allowlist in BackupEligibilityRules. This allowlist was effectively for work profile so these packages will start getting backed up for profile users as well. Since it does not make sense for all those packages to be backed up for profile user, this CL separates the allowlists. Bug: 265142782 Test: atest SystemBackupAgentTest Manual by running `adb shell bmgr backupnow android` for a system, profile, and full non-system user and verifying only the correct helpers are added via IntelliJ debugger. atest BackupEligibilityRulesTest Change-Id: I6115d8ef56629293eac0885d9db98da2a5f916bb
2023-01-25Fix Connected Apps on headless Jonathan Scott
Test: btest android.devicepolicy.cts.ProvisioningTest#createAndProvisionManagedProfile_setsCrossProfilePackages -si Bug: 261834806 Change-Id: I1e611a16dc10704a386cce4fd3a1d596e1c65f36
2023-01-25Merge "Refactoring: Support alt. network time source" Neil Fuller