Skip to content

fix: fix operator precedence bug in startup callback state check#1752

Merged
aws-kevinrickard merged 1 commit intomainfrom
temp-fix-lifecycle-result-callback
Dec 17, 2025
Merged

fix: fix operator precedence bug in startup callback state check#1752
aws-kevinrickard merged 1 commit intomainfrom
temp-fix-lifecycle-result-callback

Conversation

@aws-kevinrickard
Copy link
Member

@aws-kevinrickard aws-kevinrickard commented Nov 21, 2025

Issue #, if available:
V1980934725

Fix operator precedence bug in startup callback state check

Description

Fixes a bug in GenericExternalService.startup() where the startup callback could incorrectly report errors for stale callbacks when the service state is RUNNING.

Problem

The original condition:

if (startingStateGeneration == getStateGeneration()
        && State.STARTING.equals(state) || State.RUNNING.equals(state))

Due to operator precedence, this evaluates as:

(startingStateGeneration == getStateGeneration() && State.STARTING.equals(state)) 
    || State.RUNNING.equals(state)

This means whenever the state is RUNNING, the block executes regardless of whether the generation has changed. A stale callback from a previous startup attempt could then incorrectly call serviceErrored for a non-zero exit code, even though the service has already moved on to a new lifecycle.

Fix

Added parentheses to ensure correct evaluation:

if (startingStateGeneration == getStateGeneration()
        && (State.STARTING.equals(state) || State.RUNNING.equals(state)))

Now both conditions must be true: the generation must match AND the state must be STARTING or RUNNING.

Testing

Added a unit test that:

  1. Simulates a generation change and state transition to RUNNING before the callback executes
  2. Invokes the callback with a non-zero exit code
  3. Verifies serviceErrored is NOT called since the generation changed

Documentation Checklist:

  • [n/a] Updated the README if applicable.

Compatibility Checklist:

  • I confirm that the change is backwards compatible.
  • [n/a] Any modification or deletion of public interfaces does not impact other plugin components.
  • [n/a] For external library version updates, I have reviewed its change logs and Nucleus does not consume
    any deprecated method or type.

Refer to Compatibility Guidelines for more information.

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aws-kevinrickard aws-kevinrickard force-pushed the temp-fix-lifecycle-result-callback branch from cd67359 to a564a48 Compare November 21, 2025 23:35
@github-actions
Copy link

github-actions bot commented Nov 21, 2025

Binary incompatibility detected for commit 05e9938.
See the uploaded artifacts from the action for details. You must bump the version number.

com.aws.greengrass.tes.CredentialRequestHandler is binary incompatible and is source incompatible because of FIELD_REMOVED
com.aws.greengrass.util.platforms.unix.linux.Cgroup is binary incompatible and is source incompatible because of FIELD_REMOVED, CLASS_REMOVED, INTERFACE_REMOVED, SUPERCLASS_REMOVED, METHOD_REMOVED
com.aws.greengrass.util.platforms.unix.linux.LinuxSystemResourceController$CgroupFreezerState is binary incompatible and is source incompatible because of FIELD_REMOVED, CLASS_REMOVED, INTERFACE_REMOVED, SUPERCLASS_REMOVED, METHOD_REMOVED

Produced by binaryCompatability.py

@github-actions
Copy link

github-actions bot commented Nov 21, 2025

Unit Tests Coverage Report

File Coverage Lines Branches
All files 66% 71% 62%
com.aws.greengrass.deployment.activator.DeploymentActivatorFactory 100% 100% 100%
com.aws.greengrass.deployment.activator.KernelUpdateActivator 60% 65% 55%
com.aws.greengrass.deployment.activator.DeploymentActivator 37% 25% 50%
com.aws.greengrass.deployment.activator.DefaultActivator 0% 0% 0%
com.aws.greengrass.authorization.AuthorizationIPCAgent$ValidateAuthorizationTokenOperationHandler 95% 90% 100%
com.aws.greengrass.authorization.AuthorizationPolicyParser$1 100% 100% 0%
com.aws.greengrass.authorization.AuthorizationPolicyParser$2 0% 0% 0%
com.aws.greengrass.authorization.WildcardTrie 97% 98% 95%
com.aws.greengrass.authorization.AuthorizationIPCAgent 100% 100% 0%
com.aws.greengrass.authorization.AuthorizationPolicyParser 84% 91% 77%
com.aws.greengrass.authorization.AuthorizationHandler$ResourceLookupPolicy 100% 100% 0%
com.aws.greengrass.authorization.AuthorizationHandler 86% 94% 78%
com.aws.greengrass.authorization.AuthorizationModule 96% 100% 93%
com.aws.greengrass.authorization.AuthorizationPolicy 100% 100% 0%
com.aws.greengrass.util.IotSdkClientFactory$EnvironmentStage 56% 63% 50%
com.aws.greengrass.util.IotSdkClientFactory 85% 88% 83%
com.aws.greengrass.util.RootCAUtils 63% 70% 56%
com.aws.greengrass.util.DependencyOrder 100% 100% 100%
com.aws.greengrass.util.SerializerFactory 100% 100% 0%
com.aws.greengrass.util.BaseRetryableAccessor 95% 90% 100%
com.aws.greengrass.util.CommitableWriter 47% 70% 25%
com.aws.greengrass.util.EncryptionUtils$PemWriter 100% 100% 100%
com.aws.greengrass.util.IamSdkClientFactory 100% 100% 0%
com.aws.greengrass.util.OrderedExecutorService$OrderedTask 81% 88% 75%
com.aws.greengrass.util.ProxyUtils 72% 73% 71%
com.aws.greengrass.util.FileSystemPermission$Option 100% 100% 0%
com.aws.greengrass.util.NucleusPaths 92% 92% 0%
com.aws.greengrass.util.Exec 62% 78% 46%
com.aws.greengrass.util.StsSdkClientFactory 100% 100% 0%
com.aws.greengrass.util.MqttChunkedPayloadPublisher 83% 72% 94%
com.aws.greengrass.util.LockFactory 77% 77% 0%
com.aws.greengrass.util.CommitableReader 66% 82% 50%
com.aws.greengrass.util.Utils$1 50% 50% 0%
com.aws.greengrass.util.Utils 80% 83% 76%
com.aws.greengrass.util.AppendableWriter 0% 0% 0%
com.aws.greengrass.util.Digest 83% 91% 75%
com.aws.greengrass.util.OrderedExecutorService 82% 81% 83%
com.aws.greengrass.util.CommitableFile 78% 85% 71%
com.aws.greengrass.util.RetryUtils$DifferentiatedRetryConfig 100% 100% 0%
com.aws.greengrass.util.Coerce 92% 93% 91%
com.aws.greengrass.util.BatchedSubscriber 87% 100% 75%
com.aws.greengrass.util.LockScope 100% 100% 0%
com.aws.greengrass.util.Exec$Copier 86% 91% 82%
com.aws.greengrass.util.S3SdkClientFactory 92% 100% 85%
com.aws.greengrass.util.LoaderLogsSummarizer 0% 0% 0%
com.aws.greengrass.util.DefaultConcurrentHashMap 100% 100% 100%
com.aws.greengrass.util.Coerce$1 100% 100% 0%
com.aws.greengrass.util.GreengrassServiceClientFactory$1 0% 0% 0%
com.aws.greengrass.util.RegionUtils 46% 46% 0%
com.aws.greengrass.util.RetryUtils 86% 92% 79%
com.aws.greengrass.util.Permissions 85% 98% 72%
com.aws.greengrass.util.EncryptionUtils 100% 100% 100%
com.aws.greengrass.util.GreengrassServiceClientFactory 23% 19% 26%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$CmdDecorator 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$WindowsFileSystemPermissionView 0% 0% 0%
com.aws.greengrass.util.platforms.windows.UserEnv 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$1 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$2 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsExec 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsUserAttributes 0% 0% 0%
com.aws.greengrass.util.platforms.windows.UserEnv$PROFILEINFO 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$RunasDecorator 0% 0% 0%
com.aws.greengrass.componentmanager.plugins.docker.DefaultDockerClient 1% 1% 0%
com.aws.greengrass.componentmanager.plugins.docker.EcrAccessor 63% 63% 0%
com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader 79% 77% 81%
com.aws.greengrass.componentmanager.plugins.docker.Image 66% 66% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry$RegistrySource 100% 100% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry$RegistryType 100% 100% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry$Credentials 75% 75% 0%
com.aws.greengrass.componentmanager.plugins.docker.DockerApplicationManagerService 0% 0% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry 75% 100% 50%
com.aws.greengrass.componentmanager.plugins.docker.DockerImageArtifactParser 97% 98% 96%
com.aws.greengrass.builtin.services.mqttproxy.MqttProxyIPCAgent 85% 88% 83%
com.aws.greengrass.builtin.services.mqttproxy.MqttProxyIPCAgent$PublishToIoTCoreOperationHandler 56% 76% 37%
com.aws.greengrass.builtin.services.mqttproxy.MqttProxyIPCAgent$SubscribeToIoTCoreOperationHandler 44% 53% 35%
com.aws.greengrass.mqttclient.v5.PubAck 81% 100% 62%
com.aws.greengrass.mqttclient.v5.Subscribe 75% 100% 50%
com.aws.greengrass.mqttclient.v5.SubscribeResponse 83% 100% 66%
com.aws.greengrass.mqttclient.v5.Subscribe$RetainHandlingType 100% 100% 0%
com.aws.greengrass.mqttclient.v5.UnsubscribeResponse 75% 100% 50%
com.aws.greengrass.mqttclient.v5.Publish$PayloadFormatIndicator 50% 50% 0%
com.aws.greengrass.mqttclient.v5.QOS 67% 84% 50%
com.aws.greengrass.mqttclient.v5.Publish 48% 59% 37%
com.aws.greengrass.builtin.services.telemetry.ComponentMetricIPCEventStreamAgent$PutComponentMetricOperationHandler 88% 88% 0%
com.aws.greengrass.builtin.services.telemetry.ComponentMetricIPCEventStreamAgent 87% 97% 76%
com.aws.greengrass.componentmanager.models.ComponentIdentifier 100% 100% 0%
com.aws.greengrass.componentmanager.models.ComponentMetadata 0% 0% 0%
com.aws.greengrass.componentmanager.models.PermissionType 58% 66% 50%
com.aws.greengrass.componentmanager.models.Permission 70% 100% 40%
com.aws.greengrass.componentmanager.models.ComponentRequirementIdentifier 0% 0% 0%
com.aws.greengrass.util.platforms.StubResourceController 20% 20% 0%
com.aws.greengrass.util.platforms.Platform$1 100% 100% 0%
com.aws.greengrass.util.platforms.UserDecorator 100% 100% 0%
com.aws.greengrass.util.platforms.Platform 66% 75% 58%
com.aws.greengrass.util.platforms.Platform$FileSystemPermissionView 100% 100% 0%
com.aws.greengrass.dependency.Context$Value 81% 87% 75%
com.aws.greengrass.dependency.EZPlugins 43% 51% 36%
com.aws.greengrass.dependency.Context 78% 83% 74%
com.aws.greengrass.dependency.InjectionActions 100% 100% 0%
com.aws.greengrass.dependency.State 51% 72% 30%
com.aws.greengrass.dependency.ComponentStatusCode 44% 64% 23%
com.aws.greengrass.dependency.Context$1 84% 69% 100%
com.aws.greengrass.mqttclient.spool.Spool 82% 89% 75%
com.aws.greengrass.mqttclient.spool.InMemorySpool 77% 77% 0%
com.aws.greengrass.mqttclient.spool.SpoolerStorageType 100% 100% 0%
com.aws.greengrass.componentmanager.KernelConfigResolver 83% 89% 77%
com.aws.greengrass.componentmanager.Unarchiver 3% 3% 0%
com.aws.greengrass.componentmanager.ClientConfigurationUtils 0% 0% 0%
com.aws.greengrass.componentmanager.ComponentStore 62% 65% 58%
com.aws.greengrass.componentmanager.ComponentServiceHelper 65% 80% 50%
com.aws.greengrass.componentmanager.DependencyResolver 96% 98% 94%
com.aws.greengrass.componentmanager.ComponentManager 72% 73% 70%
com.aws.greengrass.util.platforms.unix.UnixRunWithGenerator 79% 74% 84%
com.aws.greengrass.util.platforms.unix.UnixPlatform$ShDecorator 68% 87% 50%
com.aws.greengrass.util.platforms.unix.UnixUserAttributes 58% 66% 50%
com.aws.greengrass.util.platforms.unix.UnixPlatform$IdOption 100% 100% 0%
com.aws.greengrass.util.platforms.unix.UnixPlatform 36% 37% 35%
com.aws.greengrass.util.platforms.unix.UnixExec 42% 43% 40%
com.aws.greengrass.util.platforms.unix.UnixGroupAttributes 0% 0% 0%
com.aws.greengrass.util.platforms.unix.QNXPlatform 0% 0% 0%
com.aws.greengrass.util.platforms.unix.UnixPlatform$1 100% 100% 0%
com.aws.greengrass.util.platforms.unix.UnixPlatform$SudoDecorator 72% 86% 58%
com.aws.greengrass.util.platforms.unix.UnixPlatform$PosixFileSystemPermissionView 100% 100% 100%
com.aws.greengrass.util.platforms.unix.DarwinPlatform 0% 0% 0%
com.aws.greengrass.config.UpdateBehaviorTree$PrunedUpdateBehaviorTree 80% 80% 0%
com.aws.greengrass.config.Node 88% 89% 87%
com.aws.greengrass.config.PlatformResolver 69% 80% 58%
com.aws.greengrass.config.ConfigurationReader$1 100% 100% 0%
com.aws.greengrass.config.Configuration 80% 89% 72%
com.aws.greengrass.config.ConfigurationReader 90% 96% 84%
com.aws.greengrass.config.UpdateBehaviorTree 100% 100% 100%
com.aws.greengrass.config.Topic 76% 84% 68%
com.aws.greengrass.config.CaseInsensitiveString 65% 70% 60%
com.aws.greengrass.config.Topics 90% 92% 88%
com.aws.greengrass.config.ConfigurationReader$ConfigurationMode 100% 100% 0%
com.aws.greengrass.config.ConfigurationWriter 76% 77% 75%
com.aws.greengrass.config.WhatHappened 100% 100% 0%
com.aws.greengrass.config.UpdateBehaviorTree$UpdateBehavior 100% 100% 0%
com.aws.greengrass.iot.IotConnectionManager 20% 34% 5%
com.aws.greengrass.iot.IotCloudHelper 78% 89% 66%
com.aws.greengrass.iot.model.IotCloudResponse 100% 100% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapTaskStatus 100% 100% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapSuccessCode 83% 100% 66%
com.aws.greengrass.deployment.bootstrap.BootstrapManager 78% 82% 74%
com.aws.greengrass.deployment.bootstrap.BootstrapManager$1 100% 100% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapTaskStatus$ExecutionStatus 100% 100% 0%
com.aws.greengrass.deployment.model.S3EndpointType 100% 100% 0%
com.aws.greengrass.deployment.model.FailureHandlingPolicy 100% 100% 0%
com.aws.greengrass.deployment.model.DeploymentTask 100% 100% 0%
com.aws.greengrass.deployment.model.RunWith 85% 95% 75%
com.aws.greengrass.deployment.model.DeploymentPackageConfiguration 57% 57% 0%
com.aws.greengrass.deployment.model.DeploymentDocument$SDKSerializer 100% 100% 0%
com.aws.greengrass.deployment.model.Deployment$DeploymentType 100% 100% 0%
com.aws.greengrass.deployment.model.Deployment 87% 100% 75%
com.aws.greengrass.deployment.model.Deployment$DeploymentStage 100% 100% 0%
com.aws.greengrass.deployment.model.DeploymentDocument$SDKDeserializer 80% 80% 0%
com.aws.greengrass.deployment.model.DeploymentTaskMetadata 78% 78% 0%
com.aws.greengrass.deployment.model.DeploymentDocument 100% 100% 100%
com.aws.greengrass.deployment.model.DeploymentResult$DeploymentStatus 100% 100% 0%
com.aws.greengrass.status.FleetStatusService 76% 84% 69%
com.aws.greengrass.status.FleetStatusService$1 100% 100% 0%
com.aws.greengrass.mqttclient.MqttClient$1 75% 100% 50%
com.aws.greengrass.mqttclient.MqttClient$2 100% 100% 0%
com.aws.greengrass.mqttclient.AwsIotMqtt5Client 50% 69% 32%
com.aws.greengrass.mqttclient.PublishRequest 70% 90% 50%
com.aws.greengrass.mqttclient.MqttClient 76% 83% 69%
com.aws.greengrass.mqttclient.WrapperMqttClientConnection 91% 82% 100%
com.aws.greengrass.mqttclient.AwsIotMqttClient 82% 89% 75%
com.aws.greengrass.mqttclient.AwsIotMqttClient$1 71% 93% 50%
com.aws.greengrass.mqttclient.CallbackEventManager 91% 92% 91%
com.aws.greengrass.mqttclient.IotCoreTopicValidator 89% 93% 85%
com.aws.greengrass.mqttclient.MqttTopic 97% 94% 100%
com.aws.greengrass.mqttclient.AwsIotMqtt5Client$1 48% 68% 27%
com.aws.greengrass.mqttclient.IotCoreTopicValidator$Operation 100% 100% 0%
com.aws.greengrass.network.HttpClientProvider 50% 50% 0%
com.aws.greengrass.status.model.FleetStatusDetails 100% 100% 100%
com.aws.greengrass.status.model.OverallStatus 100% 100% 0%
com.aws.greengrass.status.model.Trigger 58% 80% 37%
com.aws.greengrass.status.model.MessageType 76% 85% 66%
com.aws.greengrass.deployment.errorcode.DeploymentErrorCode 100% 100% 0%
com.aws.greengrass.deployment.errorcode.DeploymentErrorCodeUtils 75% 79% 70%
com.aws.greengrass.deployment.errorcode.DeploymentErrorType 100% 100% 0%
com.aws.greengrass.tes.CredentialRequestHandler 83% 90% 77%
com.aws.greengrass.tes.CredentialRequestHandler$TESCache 100% 100% 0%
com.aws.greengrass.tes.HttpServerImpl 100% 100% 0%
com.aws.greengrass.tes.LazyCredentialProvider 12% 12% 0%
com.aws.greengrass.tes.TokenExchangeService 57% 72% 43%
com.aws.greengrass.componentmanager.converter.RecipeLoader 75% 88% 62%
com.aws.greengrass.componentmanager.converter.RecipeLoader$RecipeFormat 100% 100% 0%
com.aws.greengrass.lifecyclemanager.Periodicity 13% 16% 11%
com.aws.greengrass.lifecyclemanager.LogManagerHelper 100% 100% 0%
com.aws.greengrass.lifecyclemanager.UnloadableService 77% 71% 83%
com.aws.greengrass.lifecyclemanager.RunWithPathOwnershipHandler 100% 100% 100%
com.aws.greengrass.lifecyclemanager.KernelAlternatives 48% 50% 47%
com.aws.greengrass.lifecyclemanager.ShellRunner$Default 69% 74% 64%
com.aws.greengrass.lifecyclemanager.GreengrassService 76% 79% 73%
com.aws.greengrass.lifecyclemanager.Lifecycle$DesiredStateUpdatedEvent 100% 100% 0%
com.aws.greengrass.lifecyclemanager.GenericExternalService 44% 48% 40%
com.aws.greengrass.lifecyclemanager.GreengrassService$RunStatus 100% 100% 0%
com.aws.greengrass.lifecyclemanager.Lifecycle 79% 82% 75%
com.aws.greengrass.lifecyclemanager.Kernel 72% 75% 68%
com.aws.greengrass.lifecyclemanager.KernelMetricsEmitter 100% 100% 100%
com.aws.greengrass.lifecyclemanager.Lifecycle$StateEvent 100% 100% 0%
com.aws.greengrass.lifecyclemanager.KernelCommandLine 77% 78% 76%
com.aws.greengrass.lifecyclemanager.GenericExternalService$RunResult 100% 100% 0%
com.aws.greengrass.lifecyclemanager.Kernel$1 82% 100% 64%
com.aws.greengrass.lifecyclemanager.KernelLifecycle 81% 85% 77%
com.aws.greengrass.lifecyclemanager.PluginService 41% 50% 33%
com.aws.greengrass.lifecyclemanager.UpdateSystemPolicyService 7% 8% 6%
com.aws.greengrass.util.platforms.unix.linux.CgroupManager 70% 86% 55%
com.aws.greengrass.util.platforms.unix.linux.LinuxSystemResourceController 40% 44% 36%
com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform 100% 100% 0%
com.aws.greengrass.util.platforms.unix.linux.CgroupV1 94% 94% 0%
com.aws.greengrass.util.platforms.unix.linux.CgroupV2 76% 92% 60%
com.aws.greengrass.deployment.converter.DeploymentDocumentConverter 77% 84% 70%
com.aws.greengrass.ipc.AuthenticationHandler 16% 25% 8%
com.aws.greengrass.ipc.IPCEventStreamService 65% 80% 50%
com.aws.greengrass.jna.Kernel32Ex 0% 0% 0%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$UpdateConfigurationOperationHandler 76% 73% 80%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent 63% 77% 50%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$ConfigurationUpdateOperationHandler 69% 79% 59%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$GetConfigurationOperationHandler 76% 81% 71%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$SendConfigurationValidityReportOperationHandler 86% 90% 83%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$ValidateConfigurationUpdatesOperationHandler 85% 85% 0%
com.aws.greengrass.ipc.common.DefaultOperationHandler 0% 0% 0%
com.aws.greengrass.security.SecurityService$DefaultCryptoKeyProvider 96% 93% 100%
com.aws.greengrass.security.SecurityService 78% 76% 81%
com.aws.greengrass.provisioning.ProvisioningPluginFactory 0% 0% 0%
com.aws.greengrass.provisioning.ProvisioningConfigUpdateHelper 91% 100% 83%
com.aws.greengrass.componentmanager.builtins.GreengrassRepositoryDownloader 50% 61% 39%
com.aws.greengrass.componentmanager.builtins.S3Downloader 55% 60% 50%
com.aws.greengrass.componentmanager.builtins.ArtifactDownloaderFactory 79% 77% 80%
com.aws.greengrass.componentmanager.builtins.ArtifactDownloader 82% 83% 80%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$UpdateStateOperationHandler 90% 90% 0%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$DeferComponentUpdateHandler 77% 77% 0%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent 31% 24% 37%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$SubscribeToComponentUpdateOperationHandler 73% 96% 50%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$PauseComponentHandler 89% 90% 87%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$ResumeComponentHandler 89% 90% 87%
com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$PublishToTopicOperationHandler 90% 80% 100%
com.aws.greengrass.builtin.services.pubsub.SubscriptionTrie 97% 98% 95%
com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent 83% 92% 73%
com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$SubscribeToTopicOperationHandler 68% 68% 0%
com.aws.greengrass.telemetry.MetricsPayload 100% 100% 0%
com.aws.greengrass.telemetry.MetricsAggregator 87% 90% 83%
com.aws.greengrass.telemetry.MetricsAggregator$1 100% 100% 0%
com.aws.greengrass.telemetry.AggregatedMetric 100% 100% 0%
com.aws.greengrass.telemetry.TelemetryAgent 71% 77% 66%
com.aws.greengrass.telemetry.TelemetryConfiguration 52% 65% 40%
com.aws.greengrass.telemetry.PeriodicMetricsEmitter 100% 100% 0%
com.aws.greengrass.telemetry.TelemetryAgent$1 60% 60% 0%
com.aws.greengrass.telemetry.SystemMetricsEmitter 100% 100% 100%
com.aws.greengrass.deployment.DeploymentConfigMerger 82% 84% 80%
com.aws.greengrass.deployment.IotJobsHelper$IotJobsClientFactory 100% 100% 0%
com.aws.greengrass.deployment.DeploymentConfigMerger$AggregateServicesChangeManager 72% 70% 75%
com.aws.greengrass.deployment.DeviceConfiguration 75% 81% 69%
com.aws.greengrass.deployment.DeploymentDocumentDownloader 69% 80% 58%
com.aws.greengrass.deployment.DeploymentQueue 97% 100% 95%
com.aws.greengrass.deployment.DeploymentService 56% 65% 47%
com.aws.greengrass.deployment.IotJobsHelper$LatestQueuedJobs 69% 69% 70%
com.aws.greengrass.deployment.KernelUpdateDeploymentTask 70% 83% 57%
com.aws.greengrass.deployment.DynamicComponentConfigurationValidator 84% 94% 75%
com.aws.greengrass.deployment.DefaultDeploymentTask 66% 77% 56%
com.aws.greengrass.deployment.DeploymentDirectoryManager 71% 86% 56%
com.aws.greengrass.deployment.IotJobsHelper$WrapperMqttConnectionFactory 100% 100% 0%
com.aws.greengrass.deployment.IotJobsHelper 55% 61% 48%
com.aws.greengrass.deployment.IotJobsHelper$1 85% 85% 0%
com.aws.greengrass.deployment.ThingGroupHelper 47% 61% 33%
com.aws.greengrass.deployment.ShadowDeploymentListener 23% 32% 14%
com.aws.greengrass.deployment.ShadowDeploymentListener$1 14% 14% 0%
com.aws.greengrass.deployment.DeploymentStatusKeeper 82% 93% 71%
com.aws.greengrass.deployment.IotJobsClientWrapper 15% 15% 0%
com.aws.greengrass.util.orchestration.SystemServiceUtilsFactory 0% 0% 0%
com.aws.greengrass.util.orchestration.ProcdUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.SystemServiceUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.InitUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.SystemdUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.WinswUtils 0% 0% 0%
com.aws.greengrass.testing.TestFeatureParameters 83% 100% 66%
com.aws.greengrass.testing.TestFeatureParameters$1 100% 100% 0%
com.aws.greengrass.ipc.modules.PubSubIPCService 68% 68% 0%
com.aws.greengrass.ipc.modules.AuthorizationService 75% 75% 0%
com.aws.greengrass.ipc.modules.ComponentMetricIPCService 69% 69% 0%
com.aws.greengrass.ipc.modules.MqttProxyIPCService 64% 64% 0%
com.aws.greengrass.ipc.modules.LifecycleIPCService 86% 86% 0%
com.aws.greengrass.ipc.modules.ConfigStoreIPCService 66% 66% 0%
com.aws.greengrass.easysetup.GreengrassSetup 75% 74% 76%
com.aws.greengrass.easysetup.DeviceProvisioningHelper 69% 76% 62%

Minimum allowed coverage is 65%

Generated by 🐒 cobertura-action against 05e9938

@github-actions
Copy link

github-actions bot commented Nov 21, 2025

Integration Tests Coverage Report

File Coverage Lines Branches
All files 53% 57% 49%
com.aws.greengrass.deployment.activator.DeploymentActivatorFactory 100% 100% 100%
com.aws.greengrass.deployment.activator.KernelUpdateActivator 25% 29% 22%
com.aws.greengrass.deployment.activator.DeploymentActivator 78% 82% 75%
com.aws.greengrass.deployment.activator.DefaultActivator 72% 81% 64%
com.aws.greengrass.authorization.AuthorizationIPCAgent$ValidateAuthorizationTokenOperationHandler 48% 47% 50%
com.aws.greengrass.authorization.AuthorizationPolicyParser$1 100% 100% 0%
com.aws.greengrass.authorization.AuthorizationPolicyParser$2 0% 0% 0%
com.aws.greengrass.authorization.WildcardTrie 74% 79% 70%
com.aws.greengrass.authorization.AuthorizationIPCAgent 100% 100% 0%
com.aws.greengrass.authorization.AuthorizationPolicyParser 76% 80% 72%
com.aws.greengrass.authorization.AuthorizationHandler$ResourceLookupPolicy 100% 100% 0%
com.aws.greengrass.authorization.AuthorizationHandler 74% 74% 74%
com.aws.greengrass.authorization.AuthorizationModule 46% 59% 33%
com.aws.greengrass.authorization.AuthorizationPolicy 0% 0% 0%
com.aws.greengrass.util.IotSdkClientFactory$EnvironmentStage 0% 0% 0%
com.aws.greengrass.util.IotSdkClientFactory 0% 0% 0%
com.aws.greengrass.util.RootCAUtils 0% 0% 0%
com.aws.greengrass.util.DependencyOrder 100% 100% 100%
com.aws.greengrass.util.SerializerFactory 100% 100% 0%
com.aws.greengrass.util.BaseRetryableAccessor 0% 0% 0%
com.aws.greengrass.util.CommitableWriter 47% 70% 25%
com.aws.greengrass.util.EncryptionUtils$PemWriter 0% 0% 0%
com.aws.greengrass.util.IamSdkClientFactory 0% 0% 0%
com.aws.greengrass.util.OrderedExecutorService$OrderedTask 45% 66% 25%
com.aws.greengrass.util.ProxyUtils 25% 29% 20%
com.aws.greengrass.util.FileSystemPermission$Option 100% 100% 0%
com.aws.greengrass.util.NucleusPaths 97% 97% 0%
com.aws.greengrass.util.Exec 70% 85% 56%
com.aws.greengrass.util.StsSdkClientFactory 0% 0% 0%
com.aws.greengrass.util.MqttChunkedPayloadPublisher 35% 42% 27%
com.aws.greengrass.util.LockFactory 77% 77% 0%
com.aws.greengrass.util.CommitableReader 0% 0% 0%
com.aws.greengrass.util.Utils$1 87% 100% 75%
com.aws.greengrass.util.Utils 55% 60% 51%
com.aws.greengrass.util.AppendableWriter 0% 0% 0%
com.aws.greengrass.util.Digest 66% 83% 50%
com.aws.greengrass.util.OrderedExecutorService 63% 77% 50%
com.aws.greengrass.util.CommitableFile 65% 73% 57%
com.aws.greengrass.util.RetryUtils$DifferentiatedRetryConfig 60% 60% 0%
com.aws.greengrass.util.Coerce 59% 64% 53%
com.aws.greengrass.util.BatchedSubscriber 59% 68% 50%
com.aws.greengrass.util.LockScope 100% 100% 0%
com.aws.greengrass.util.Exec$Copier 86% 91% 82%
com.aws.greengrass.util.S3SdkClientFactory 38% 38% 0%
com.aws.greengrass.util.LoaderLogsSummarizer 0% 0% 0%
com.aws.greengrass.util.DefaultConcurrentHashMap 100% 100% 100%
com.aws.greengrass.util.Coerce$1 0% 0% 0%
com.aws.greengrass.util.GreengrassServiceClientFactory$1 0% 0% 0%
com.aws.greengrass.util.RegionUtils 0% 0% 0%
com.aws.greengrass.util.RetryUtils 24% 35% 12%
com.aws.greengrass.util.Permissions 72% 89% 54%
com.aws.greengrass.util.EncryptionUtils 0% 0% 0%
com.aws.greengrass.util.GreengrassServiceClientFactory 46% 32% 61%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$CmdDecorator 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$WindowsFileSystemPermissionView 0% 0% 0%
com.aws.greengrass.util.platforms.windows.UserEnv 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$1 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$2 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsExec 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsUserAttributes 0% 0% 0%
com.aws.greengrass.util.platforms.windows.UserEnv$PROFILEINFO 0% 0% 0%
com.aws.greengrass.util.platforms.windows.WindowsPlatform$RunasDecorator 0% 0% 0%
com.aws.greengrass.componentmanager.plugins.docker.DefaultDockerClient 1% 1% 0%
com.aws.greengrass.componentmanager.plugins.docker.EcrAccessor 61% 72% 50%
com.aws.greengrass.componentmanager.plugins.docker.DockerImageDownloader 54% 61% 47%
com.aws.greengrass.componentmanager.plugins.docker.Image 66% 66% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry$RegistrySource 100% 100% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry$RegistryType 100% 100% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry$Credentials 75% 75% 0%
com.aws.greengrass.componentmanager.plugins.docker.DockerApplicationManagerService 0% 0% 0%
com.aws.greengrass.componentmanager.plugins.docker.Registry 75% 100% 50%
com.aws.greengrass.componentmanager.plugins.docker.DockerImageArtifactParser 83% 88% 78%
com.aws.greengrass.builtin.services.mqttproxy.MqttProxyIPCAgent 47% 53% 41%
com.aws.greengrass.builtin.services.mqttproxy.MqttProxyIPCAgent$PublishToIoTCoreOperationHandler 58% 78% 37%
com.aws.greengrass.builtin.services.mqttproxy.MqttProxyIPCAgent$SubscribeToIoTCoreOperationHandler 42% 49% 35%
com.aws.greengrass.mqttclient.v5.PubAck 0% 0% 0%
com.aws.greengrass.mqttclient.v5.Subscribe 0% 0% 0%
com.aws.greengrass.mqttclient.v5.SubscribeResponse 0% 0% 0%
com.aws.greengrass.mqttclient.v5.Subscribe$RetainHandlingType 87% 87% 0%
com.aws.greengrass.mqttclient.v5.UnsubscribeResponse 0% 0% 0%
com.aws.greengrass.mqttclient.v5.Publish$PayloadFormatIndicator 50% 50% 0%
com.aws.greengrass.mqttclient.v5.QOS 50% 76% 25%
com.aws.greengrass.mqttclient.v5.Publish 29% 34% 25%
com.aws.greengrass.builtin.services.telemetry.ComponentMetricIPCEventStreamAgent$PutComponentMetricOperationHandler 0% 0% 0%
com.aws.greengrass.builtin.services.telemetry.ComponentMetricIPCEventStreamAgent 16% 16% 0%
com.aws.greengrass.componentmanager.models.ComponentIdentifier 75% 75% 0%
com.aws.greengrass.componentmanager.models.ComponentMetadata 0% 0% 0%
com.aws.greengrass.componentmanager.models.PermissionType 58% 66% 50%
com.aws.greengrass.componentmanager.models.Permission 79% 100% 59%
com.aws.greengrass.componentmanager.models.ComponentRequirementIdentifier 0% 0% 0%
com.aws.greengrass.util.platforms.StubResourceController 20% 20% 0%
com.aws.greengrass.util.platforms.Platform$1 100% 100% 0%
com.aws.greengrass.util.platforms.UserDecorator 100% 100% 0%
com.aws.greengrass.util.platforms.Platform 80% 90% 70%
com.aws.greengrass.util.platforms.Platform$FileSystemPermissionView 100% 100% 0%
com.aws.greengrass.dependency.Context$Value 77% 84% 70%
com.aws.greengrass.dependency.EZPlugins 61% 68% 54%
com.aws.greengrass.dependency.Context 76% 83% 70%
com.aws.greengrass.dependency.InjectionActions 100% 100% 0%
com.aws.greengrass.dependency.State 53% 80% 26%
com.aws.greengrass.dependency.ComponentStatusCode 56% 74% 38%
com.aws.greengrass.dependency.Context$1 84% 69% 100%
com.aws.greengrass.mqttclient.spool.Spool 23% 36% 10%
com.aws.greengrass.mqttclient.spool.InMemorySpool 44% 44% 0%
com.aws.greengrass.mqttclient.spool.SpoolerStorageType 100% 100% 0%
com.aws.greengrass.componentmanager.KernelConfigResolver 76% 84% 69%
com.aws.greengrass.componentmanager.Unarchiver 72% 87% 58%
com.aws.greengrass.componentmanager.ClientConfigurationUtils 0% 0% 0%
com.aws.greengrass.componentmanager.ComponentStore 46% 48% 45%
com.aws.greengrass.componentmanager.ComponentServiceHelper 33% 52% 14%
com.aws.greengrass.componentmanager.DependencyResolver 60% 66% 53%
com.aws.greengrass.componentmanager.ComponentManager 65% 60% 69%
com.aws.greengrass.util.platforms.unix.UnixRunWithGenerator 63% 61% 65%
com.aws.greengrass.util.platforms.unix.UnixPlatform$ShDecorator 75% 100% 50%
com.aws.greengrass.util.platforms.unix.UnixUserAttributes 75% 100% 50%
com.aws.greengrass.util.platforms.unix.UnixPlatform$IdOption 100% 100% 0%
com.aws.greengrass.util.platforms.unix.UnixPlatform 64% 60% 67%
com.aws.greengrass.util.platforms.unix.UnixExec 75% 81% 68%
com.aws.greengrass.util.platforms.unix.UnixGroupAttributes 100% 100% 0%
com.aws.greengrass.util.platforms.unix.QNXPlatform 0% 0% 0%
com.aws.greengrass.util.platforms.unix.UnixPlatform$1 100% 100% 0%
com.aws.greengrass.util.platforms.unix.UnixPlatform$SudoDecorator 76% 89% 62%
com.aws.greengrass.util.platforms.unix.UnixPlatform$PosixFileSystemPermissionView 87% 91% 83%
com.aws.greengrass.util.platforms.unix.DarwinPlatform 0% 0% 0%
com.aws.greengrass.config.UpdateBehaviorTree$PrunedUpdateBehaviorTree 80% 80% 0%
com.aws.greengrass.config.Node 78% 80% 77%
com.aws.greengrass.config.PlatformResolver 36% 47% 25%
com.aws.greengrass.config.ConfigurationReader$1 100% 100% 0%
com.aws.greengrass.config.Configuration 65% 81% 50%
com.aws.greengrass.config.ConfigurationReader 66% 76% 57%
com.aws.greengrass.config.UpdateBehaviorTree 100% 100% 100%
com.aws.greengrass.config.Topic 67% 73% 62%
com.aws.greengrass.config.CaseInsensitiveString 65% 70% 60%
com.aws.greengrass.config.Topics 70% 75% 64%
com.aws.greengrass.config.ConfigurationReader$ConfigurationMode 100% 100% 0%
com.aws.greengrass.config.ConfigurationWriter 75% 73% 77%
com.aws.greengrass.config.WhatHappened 100% 100% 0%
com.aws.greengrass.config.UpdateBehaviorTree$UpdateBehavior 100% 100% 0%
com.aws.greengrass.iot.IotConnectionManager 0% 0% 0%
com.aws.greengrass.iot.IotCloudHelper 0% 0% 0%
com.aws.greengrass.iot.model.IotCloudResponse 0% 0% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapTaskStatus 100% 100% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapSuccessCode 0% 0% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapManager 59% 65% 54%
com.aws.greengrass.deployment.bootstrap.BootstrapManager$1 0% 0% 0%
com.aws.greengrass.deployment.bootstrap.BootstrapTaskStatus$ExecutionStatus 100% 100% 0%
com.aws.greengrass.deployment.model.S3EndpointType 0% 0% 0%
com.aws.greengrass.deployment.model.FailureHandlingPolicy 100% 100% 0%
com.aws.greengrass.deployment.model.DeploymentTask 100% 100% 0%
com.aws.greengrass.deployment.model.RunWith 70% 91% 50%
com.aws.greengrass.deployment.model.DeploymentPackageConfiguration 21% 21% 0%
com.aws.greengrass.deployment.model.DeploymentDocument$SDKSerializer 100% 100% 0%
com.aws.greengrass.deployment.model.Deployment$DeploymentType 100% 100% 0%
com.aws.greengrass.deployment.model.Deployment 72% 70% 75%
com.aws.greengrass.deployment.model.Deployment$DeploymentStage 100% 100% 0%
com.aws.greengrass.deployment.model.DeploymentDocument$SDKDeserializer 20% 20% 0%
com.aws.greengrass.deployment.model.DeploymentTaskMetadata 78% 78% 0%
com.aws.greengrass.deployment.model.DeploymentDocument 91% 100% 83%
com.aws.greengrass.deployment.model.DeploymentResult$DeploymentStatus 100% 100% 0%
com.aws.greengrass.status.FleetStatusService 83% 90% 75%
com.aws.greengrass.status.FleetStatusService$1 16% 16% 0%
com.aws.greengrass.mqttclient.MqttClient$1 12% 12% 0%
com.aws.greengrass.mqttclient.MqttClient$2 100% 100% 0%
com.aws.greengrass.mqttclient.AwsIotMqtt5Client 35% 45% 25%
com.aws.greengrass.mqttclient.PublishRequest 70% 90% 50%
com.aws.greengrass.mqttclient.MqttClient 40% 48% 33%
com.aws.greengrass.mqttclient.WrapperMqttClientConnection 90% 80% 100%
com.aws.greengrass.mqttclient.AwsIotMqttClient 0% 0% 0%
com.aws.greengrass.mqttclient.AwsIotMqttClient$1 0% 0% 0%
com.aws.greengrass.mqttclient.CallbackEventManager 32% 48% 16%
com.aws.greengrass.mqttclient.IotCoreTopicValidator 61% 60% 62%
com.aws.greengrass.mqttclient.MqttTopic 0% 0% 0%
com.aws.greengrass.mqttclient.AwsIotMqtt5Client$1 12% 19% 5%
com.aws.greengrass.mqttclient.IotCoreTopicValidator$Operation 100% 100% 0%
com.aws.greengrass.network.HttpClientProvider 50% 50% 0%
com.aws.greengrass.status.model.FleetStatusDetails 100% 100% 100%
com.aws.greengrass.status.model.OverallStatus 100% 100% 0%
com.aws.greengrass.status.model.Trigger 62% 86% 37%
com.aws.greengrass.status.model.MessageType 76% 85% 66%
com.aws.greengrass.deployment.errorcode.DeploymentErrorCode 100% 100% 0%
com.aws.greengrass.deployment.errorcode.DeploymentErrorCodeUtils 37% 44% 29%
com.aws.greengrass.deployment.errorcode.DeploymentErrorType 100% 100% 0%
com.aws.greengrass.tes.CredentialRequestHandler 0% 0% 0%
com.aws.greengrass.tes.CredentialRequestHandler$TESCache 0% 0% 0%
com.aws.greengrass.tes.HttpServerImpl 0% 0% 0%
com.aws.greengrass.tes.LazyCredentialProvider 12% 12% 0%
com.aws.greengrass.tes.TokenExchangeService 0% 0% 0%
com.aws.greengrass.componentmanager.converter.RecipeLoader 72% 86% 59%
com.aws.greengrass.componentmanager.converter.RecipeLoader$RecipeFormat 100% 100% 0%
com.aws.greengrass.lifecyclemanager.Periodicity 55% 64% 47%
com.aws.greengrass.lifecyclemanager.LogManagerHelper 100% 100% 0%
com.aws.greengrass.lifecyclemanager.UnloadableService 25% 25% 0%
com.aws.greengrass.lifecyclemanager.RunWithPathOwnershipHandler 89% 96% 83%
com.aws.greengrass.lifecyclemanager.KernelAlternatives 16% 19% 14%
com.aws.greengrass.lifecyclemanager.ShellRunner$Default 73% 76% 71%
com.aws.greengrass.lifecyclemanager.GreengrassService 88% 89% 87%
com.aws.greengrass.lifecyclemanager.Lifecycle$DesiredStateUpdatedEvent 100% 100% 0%
com.aws.greengrass.lifecyclemanager.GenericExternalService 71% 76% 65%
com.aws.greengrass.lifecyclemanager.GreengrassService$RunStatus 100% 100% 0%
com.aws.greengrass.lifecyclemanager.Lifecycle 84% 85% 84%
com.aws.greengrass.lifecyclemanager.Kernel 57% 57% 57%
com.aws.greengrass.lifecyclemanager.KernelMetricsEmitter 100% 100% 100%
com.aws.greengrass.lifecyclemanager.Lifecycle$StateEvent 100% 100% 0%
com.aws.greengrass.lifecyclemanager.KernelCommandLine 56% 61% 51%
com.aws.greengrass.lifecyclemanager.GenericExternalService$RunResult 100% 100% 0%
com.aws.greengrass.lifecyclemanager.Kernel$1 0% 0% 0%
com.aws.greengrass.lifecyclemanager.KernelLifecycle 78% 80% 77%
com.aws.greengrass.lifecyclemanager.PluginService 67% 68% 66%
com.aws.greengrass.lifecyclemanager.UpdateSystemPolicyService 84% 84% 83%
com.aws.greengrass.util.platforms.unix.linux.CgroupManager 73% 86% 60%
com.aws.greengrass.util.platforms.unix.linux.LinuxSystemResourceController 69% 73% 65%
com.aws.greengrass.util.platforms.unix.linux.LinuxPlatform 100% 100% 0%
com.aws.greengrass.util.platforms.unix.linux.CgroupV1 0% 0% 0%
com.aws.greengrass.util.platforms.unix.linux.CgroupV2 74% 89% 60%
com.aws.greengrass.deployment.converter.DeploymentDocumentConverter 71% 79% 63%
com.aws.greengrass.ipc.AuthenticationHandler 30% 35% 25%
com.aws.greengrass.ipc.IPCEventStreamService 73% 80% 66%
com.aws.greengrass.jna.Kernel32Ex 0% 0% 0%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$UpdateConfigurationOperationHandler 68% 73% 63%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent 78% 81% 75%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$ConfigurationUpdateOperationHandler 76% 90% 62%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$GetConfigurationOperationHandler 67% 78% 57%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$SendConfigurationValidityReportOperationHandler 78% 90% 66%
com.aws.greengrass.builtin.services.configstore.ConfigStoreIPCEventStreamAgent$ValidateConfigurationUpdatesOperationHandler 95% 95% 0%
com.aws.greengrass.ipc.common.DefaultOperationHandler 0% 0% 0%
com.aws.greengrass.security.SecurityService$DefaultCryptoKeyProvider 24% 23% 25%
com.aws.greengrass.security.SecurityService 38% 51% 25%
com.aws.greengrass.provisioning.ProvisioningPluginFactory 100% 100% 0%
com.aws.greengrass.provisioning.ProvisioningConfigUpdateHelper 75% 100% 50%
com.aws.greengrass.componentmanager.builtins.GreengrassRepositoryDownloader 0% 0% 0%
com.aws.greengrass.componentmanager.builtins.S3Downloader 10% 17% 3%
com.aws.greengrass.componentmanager.builtins.ArtifactDownloaderFactory 52% 63% 42%
com.aws.greengrass.componentmanager.builtins.ArtifactDownloader 16% 21% 11%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$UpdateStateOperationHandler 60% 60% 0%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$DeferComponentUpdateHandler 88% 88% 0%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent 59% 61% 56%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$SubscribeToComponentUpdateOperationHandler 57% 64% 50%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$PauseComponentHandler 56% 62% 50%
com.aws.greengrass.builtin.services.lifecycle.LifecycleIPCEventStreamAgent$ResumeComponentHandler 56% 62% 50%
com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$PublishToTopicOperationHandler 70% 90% 50%
com.aws.greengrass.builtin.services.pubsub.SubscriptionTrie 70% 76% 64%
com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent 66% 73% 58%
com.aws.greengrass.builtin.services.pubsub.PubSubIPCEventStreamAgent$SubscribeToTopicOperationHandler 97% 94% 100%
com.aws.greengrass.telemetry.MetricsPayload 100% 100% 0%
com.aws.greengrass.telemetry.MetricsAggregator 79% 86% 72%
com.aws.greengrass.telemetry.MetricsAggregator$1 100% 100% 0%
com.aws.greengrass.telemetry.AggregatedMetric 100% 100% 0%
com.aws.greengrass.telemetry.TelemetryAgent 59% 71% 48%
com.aws.greengrass.telemetry.TelemetryConfiguration 30% 51% 10%
com.aws.greengrass.telemetry.PeriodicMetricsEmitter 100% 100% 0%
com.aws.greengrass.telemetry.TelemetryAgent$1 20% 20% 0%
com.aws.greengrass.telemetry.SystemMetricsEmitter 100% 100% 100%
com.aws.greengrass.deployment.DeploymentConfigMerger 81% 81% 80%
com.aws.greengrass.deployment.IotJobsHelper$IotJobsClientFactory 100% 100% 0%
com.aws.greengrass.deployment.DeploymentConfigMerger$AggregateServicesChangeManager 76% 73% 78%
com.aws.greengrass.deployment.DeviceConfiguration 71% 76% 66%
com.aws.greengrass.deployment.DeploymentDocumentDownloader 14% 14% 0%
com.aws.greengrass.deployment.DeploymentQueue 61% 68% 55%
com.aws.greengrass.deployment.DeploymentService 67% 69% 65%
com.aws.greengrass.deployment.IotJobsHelper$LatestQueuedJobs 19% 19% 0%
com.aws.greengrass.deployment.KernelUpdateDeploymentTask 0% 0% 0%
com.aws.greengrass.deployment.DynamicComponentConfigurationValidator 85% 82% 87%
com.aws.greengrass.deployment.DefaultDeploymentTask 68% 76% 61%
com.aws.greengrass.deployment.DeploymentDirectoryManager 62% 75% 50%
com.aws.greengrass.deployment.IotJobsHelper$WrapperMqttConnectionFactory 100% 100% 0%
com.aws.greengrass.deployment.IotJobsHelper 37% 45% 29%
com.aws.greengrass.deployment.IotJobsHelper$1 14% 14% 0%
com.aws.greengrass.deployment.ThingGroupHelper 27% 38% 16%
com.aws.greengrass.deployment.ShadowDeploymentListener 33% 46% 21%
com.aws.greengrass.deployment.ShadowDeploymentListener$1 14% 14% 0%
com.aws.greengrass.deployment.DeploymentStatusKeeper 81% 91% 71%
com.aws.greengrass.deployment.IotJobsClientWrapper 35% 41% 30%
com.aws.greengrass.util.orchestration.SystemServiceUtilsFactory 0% 0% 0%
com.aws.greengrass.util.orchestration.ProcdUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.SystemServiceUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.InitUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.SystemdUtils 0% 0% 0%
com.aws.greengrass.util.orchestration.WinswUtils 0% 0% 0%
com.aws.greengrass.testing.TestFeatureParameters 83% 100% 66%
com.aws.greengrass.testing.TestFeatureParameters$1 100% 100% 0%
com.aws.greengrass.ipc.modules.PubSubIPCService 81% 81% 0%
com.aws.greengrass.ipc.modules.AuthorizationService 100% 100% 0%
com.aws.greengrass.ipc.modules.ComponentMetricIPCService 69% 69% 0%
com.aws.greengrass.ipc.modules.MqttProxyIPCService 78% 78% 0%
com.aws.greengrass.ipc.modules.LifecycleIPCService 86% 86% 0%
com.aws.greengrass.ipc.modules.ConfigStoreIPCService 100% 100% 0%
com.aws.greengrass.easysetup.GreengrassSetup 0% 0% 0%
com.aws.greengrass.easysetup.DeviceProvisioningHelper 0% 0% 0%

Minimum allowed coverage is 58%

Generated by 🐒 cobertura-action against 05e9938

@aws-kevinrickard aws-kevinrickard force-pushed the temp-fix-lifecycle-result-callback branch from a564a48 to f9af3e0 Compare November 24, 2025 20:43
@aws-kevinrickard aws-kevinrickard force-pushed the temp-fix-lifecycle-result-callback branch from f9af3e0 to 8705979 Compare December 11, 2025 21:40
@aws-kevinrickard aws-kevinrickard changed the title fix: properly guard lifecycle result callbacks by generation fix: Fix operator precedence bug in startup callback state check Dec 11, 2025
@aws-kevinrickard aws-kevinrickard changed the title fix: Fix operator precedence bug in startup callback state check fix: fix operator precedence bug in startup callback state check Dec 11, 2025
@aws-kevinrickard aws-kevinrickard marked this pull request as ready for review December 11, 2025 21:46
@aws-kevinrickard aws-kevinrickard force-pushed the temp-fix-lifecycle-result-callback branch from d3b7c00 to 42a9090 Compare December 11, 2025 21:47
@aws-kevinrickard aws-kevinrickard force-pushed the temp-fix-lifecycle-result-callback branch 2 times, most recently from be3f098 to 71c5b0c Compare December 16, 2025 23:55
@aws-kevinrickard aws-kevinrickard force-pushed the temp-fix-lifecycle-result-callback branch from 71c5b0c to 05e9938 Compare December 17, 2025 00:51
@aws-kevinrickard aws-kevinrickard merged commit 2d7626b into main Dec 17, 2025
5 checks passed
@aws-kevinrickard aws-kevinrickard deleted the temp-fix-lifecycle-result-callback branch December 17, 2025 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants