aws-greengrass / aws-greengrass-client-device-auth

Apache License 2.0
2 stars 3 forks source link

fix(sdk-java-client): add passing event about disconnect #352

Closed bgklika closed 1 year ago

bgklika commented 1 year ago

Issue #, if available: SDK-based client does not call onMqttDisconnect when client disconnected

Description of changes:

Why is this change necessary: Bug so not allow to send disconnect event to control from sdk-java client

How was this change tested: Manually. Use client, control app and local mosquitto broker and terminate it in the middle between client's subscribe and publish. Check logs in client and control. Ensure control received and logged disconnect event.

Test results: Control:

$ ./run_for_mosquitto_311.sh
[INFO ] 2023-06-30 19:15:41.889 [main] ExampleControl - Control: port 47619, with TLS, MQTT v3
[INFO ] 2023-06-30 19:15:42.142 [main] EngineControlImpl - MQTT client control gRPC server started, listening on 47619
[INFO ] 2023-06-30 19:15:57.990 [grpc-default-executor-0] GRPCDiscoveryServer - RegisterAgent: agentId sdk-java-agent
[INFO ] 2023-06-30 19:15:58.051 [grpc-default-executor-0] GRPCDiscoveryServer - DiscoveryClient: agentId sdk-java-agent address 127.0.0.1 port 33007
[INFO ] 2023-06-30 19:15:58.054 [grpc-default-executor-0] EngineControlImpl - Created new agent control for sdk-java-agent on 127.0.0.1:33007
[INFO ] 2023-06-30 19:15:58.097 [grpc-default-executor-0] ExampleControl - Agent sdk-java-agent is connected
[INFO ] 2023-06-30 19:15:58.101 [pool-2-thread-1] AgentTestScenario - Playing test scenario for agent id sdk-java-agent
[INFO ] 2023-06-30 19:16:01.671 [pool-2-thread-1] AgentControlImpl - Created connection with id 1 CONNACK 'sessionPresent: false
'
[INFO ] 2023-06-30 19:16:01.671 [pool-2-thread-1] AgentControlImpl - createMqttConnection: MQTT connectionId 1 created
[INFO ] 2023-06-30 19:16:01.671 [pool-2-thread-1] AgentTestScenario - MQTT connection with id 1 is established
[INFO ] 2023-06-30 19:16:06.681 [pool-2-thread-1] AgentControlImpl - SubscribeMqtt: subscribe on connection 1
[INFO ] 2023-06-30 19:16:06.697 [pool-2-thread-1] AgentTestScenario - Subscribe response: connectionId 1 reason codes [0] reason string ''
[INFO ] 2023-06-30 19:16:08.119 [grpc-default-executor-0] GRPCDiscoveryServer - OnMqttDisconnect: agentId sdk-java-agent connectionId 1 disconnect '' error 'The connection was closed unexpectedly.'
[INFO ] 2023-06-30 19:16:08.120 [grpc-default-executor-0] AgentTestScenario - MQTT disconnected on agentId sdk-java-agent connectionId 1 disconnect '' error 'The connection was closed unexpectedly.'
[INFO ] 2023-06-30 19:16:11.702 [pool-2-thread-1] AgentControlImpl - PublishMqtt: publishing on connectionId 1 topic test/topic
[ERROR] 2023-06-30 19:16:11.722 [pool-2-thread-1] AgentTestScenario - gRPC error code UNKNOWN: description: null
io.grpc.StatusRuntimeException: UNKNOWN
    at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:271) ~[grpc-stub-1.53.0.jar:1.53.0]
    at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:252) ~[grpc-stub-1.53.0.jar:1.53.0]
    at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:165) ~[grpc-stub-1.53.0.jar:1.53.0]
    at com.aws.greengrass.testing.mqtt.client.MqttClientControlGrpc$MqttClientControlBlockingStub.publishMqtt(MqttClientControlGrpc.java:531) ~[aws-greengrass-testing-mqtt-client-control-1.0-SNAPSHOT.jar:?]
    at com.aws.greengrass.testing.mqtt.client.control.implementation.AgentControlImpl.publishMqtt(AgentControlImpl.java:249) ~[aws-greengrass-testing-mqtt-client-control-1.0-SNAPSHOT.jar:?]
    at com.aws.greengrass.testing.mqtt.client.control.implementation.ConnectionControlImpl.publishMqtt(ConnectionControlImpl.java:147) ~[aws-greengrass-testing-mqtt-client-control-1.0-SNAPSHOT.jar:?]
    at com.aws.greengrass.testing.mqtt.client.control.AgentTestScenario.testPublish(AgentTestScenario.java:257) ~[aws-greengrass-testing-mqtt-client-control-1.0-SNAPSHOT.jar:?]
    at com.aws.greengrass.testing.mqtt.client.control.AgentTestScenario.run(AgentTestScenario.java:174) [aws-greengrass-testing-mqtt-client-control-1.0-SNAPSHOT.jar:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
    at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]
[INFO ] 2023-06-30 19:16:15.119 [grpc-default-executor-0] GRPCDiscoveryServer - OnMqttDisconnect: agentId sdk-java-agent connectionId 1 disconnect '' error 'Success.'
[INFO ] 2023-06-30 19:16:15.120 [grpc-default-executor-0] AgentTestScenario - MQTT disconnected on agentId sdk-java-agent connectionId 1 disconnect '' error 'Success.'
[INFO ] 2023-06-30 19:16:15.140 [pool-2-thread-1] AgentControlImpl - closeMqttConnection: MQTT connectionId 1 closed
[INFO ] 2023-06-30 19:16:15.152 [pool-2-thread-1] AgentControlImpl - shutdown request sent successfully
[INFO ] 2023-06-30 19:16:15.168 [grpc-default-executor-0] GRPCDiscoveryServer - UnregisterAgent: agentId sdk-java-agent reason Agent shutdown by OTF request 'That's it.'
[INFO ] 2023-06-30 19:16:15.170 [grpc-default-executor-0] ExampleControl - Agent sdk-java-agent is disconnected

Client:

[INFO ] 2023-06-30 19:15:57.522 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCLinkImpl - Making gPRC client connection with 127.0.0.1:47619 as sdk-java-agent...
[INFO ] 2023-06-30 19:15:58.010 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCLinkImpl - Client connection with Control is established, local address is 127.0.0.1
[INFO ] 2023-06-30 19:15:58.046 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCControlServer - GRPCControlServer created and listed on 127.0.0.1:33007
[INFO ] 2023-06-30 19:15:58.105 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCLinkImpl - Handle gRPC requests
[INFO ] 2023-06-30 19:15:58.105 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCControlServer - Server awaitTermination
[INFO ] 2023-06-30 19:16:01.213 [grpc-default-executor-0] GRPCControlServer - createMqttConnection: clientId client broker server:8883
[INFO ] 2023-06-30 19:16:01.218 [grpc-default-executor-0] Mqtt311ConnectionImpl - Creating AwsIotMqttConnectionBuilder with TLS
[INFO ] 2023-06-30 19:16:01.552 [grpc-default-executor-0] Mqtt311ConnectionImpl - MQTT 3.1.1 connection 1 is establisted
[INFO ] 2023-06-30 19:16:01.552 [Thread-2] Mqtt311ConnectionImpl - MQTT connection 1 connecteed or reconnected sessionPresent false
[INFO ] 2023-06-30 19:16:06.689 [grpc-default-executor-0] GRPCControlServer - Subscription: filter test/topic QoS 0 noLocal false retainAsPublished false retainHandling 2
[INFO ] 2023-06-30 19:16:06.689 [grpc-default-executor-0] GRPCControlServer - Subscribe: connectionId 1 subscriptionId null for 1 filters
[INFO ] 2023-06-30 19:16:06.692 [grpc-default-executor-0] Mqtt311ConnectionImpl - Subscribed on connection 1 for topics filter test/topic QoS AT_MOST_ONCE packet Id 1
[INFO ] 2023-06-30 19:16:06.692 [grpc-default-executor-0] GRPCControlServer - Subscribe response: connectionId 1 reason codes [0] reason string null
[INFO ] 2023-06-30 19:16:08.103 [Thread-2] Mqtt311ConnectionImpl - MQTT connection 1 interrupted, error code 5134: The connection was closed unexpectedly.
[INFO ] 2023-06-30 19:16:08.103 [pool-3-thread-1] GRPCDiscoveryClient - onMqttDisconnect
[INFO ] 2023-06-30 19:16:08.109 [pool-3-thread-1] GRPCDiscoveryClient - Doing gRPC OnMqttDisconnect
[INFO ] 2023-06-30 19:16:08.122 [pool-3-thread-1] GRPCDiscoveryClient - Done gRPC OnMqttDisconnect
[INFO ] 2023-06-30 19:16:11.712 [grpc-default-executor-0] GRPCControlServer - Publish: connectionId 1 topic test/topic QoS 1 retain false
[ERROR] 2023-06-30 19:16:11.713 [grpc-default-executor-0] GRPCControlServer - exception during publish
com.aws.greengrass.testing.mqtt5.client.exceptions.MqttException: MQTT client is not in connected state
    at com.aws.greengrass.testing.mqtt311.client.sdkmqtt.Mqtt311ConnectionImpl.stateCheck(Mqtt311ConnectionImpl.java:396) ~[classes/:?]
    at com.aws.greengrass.testing.mqtt311.client.sdkmqtt.Mqtt311ConnectionImpl.publish(Mqtt311ConnectionImpl.java:231) ~[classes/:?]
    at com.aws.greengrass.testing.mqtt5.client.grpc.GRPCControlServer$MqttClientControlImpl.publishMqtt(GRPCControlServer.java:385) [classes/:?]
    at com.aws.greengrass.testing.mqtt.client.MqttClientControlGrpc$MethodHandlers.invoke(MqttClientControlGrpc.java:667) [classes/:?]
    at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182) [grpc-stub-1.53.0.jar:1.53.0]
    at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:355) [grpc-core-1.53.0.jar:1.53.0]
    at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:867) [grpc-core-1.53.0.jar:1.53.0]
    at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) [grpc-core-1.53.0.jar:1.53.0]
    at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) [grpc-core-1.53.0.jar:1.53.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]
[INFO ] 2023-06-30 19:16:11.745 [grpc-default-executor-0] GRPCControlServer - closeMqttConnection: connectionId 1 reason 4
[INFO ] 2023-06-30 19:16:15.109 [Thread-2] Mqtt311ConnectionImpl - MQTT connection 1 interrupted, error code 0: Success.
[INFO ] 2023-06-30 19:16:15.109 [pool-3-thread-1] GRPCDiscoveryClient - onMqttDisconnect
[INFO ] 2023-06-30 19:16:15.110 [pool-3-thread-1] GRPCDiscoveryClient - Doing gRPC OnMqttDisconnect
[INFO ] 2023-06-30 19:16:15.111 [Thread-2] Mqtt311ConnectionImpl - MQTT connection 1 closed
[INFO ] 2023-06-30 19:16:15.129 [pool-3-thread-1] GRPCDiscoveryClient - Done gRPC OnMqttDisconnect
[INFO ] 2023-06-30 19:16:15.131 [grpc-default-executor-0] Mqtt311ConnectionImpl - MQTT 3.1.1 connection 1 has been disconnected
[INFO ] 2023-06-30 19:16:15.148 [grpc-default-executor-0] GRPCControlServer - shutdownAgent: reason That's it.
[INFO ] 2023-06-30 19:16:15.162 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCControlServer - Server awaitTermination done
[INFO ] 2023-06-30 19:16:15.162 [com.aws.greengrass.testing.mqtt5.client.Main.main()] GRPCLinkImpl - Shutdown gPRC link
[INFO ] 2023-06-30 19:16:15.174 [com.aws.greengrass.testing.mqtt5.client.Main.main()] Main - Execution done successfully

Any additional information or context required to review the change:

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

github-actions[bot] commented 1 year ago

Unit Tests Coverage Report

File Coverage Lines Branches
All files 72% 79% 65% :white_check_mark:
com.aws.greengrass.clientdevices.auth.PermissionEvaluationUtils 78% 82% 74% :white_check_mark:
com.aws.greengrass.clientdevices.auth.PermissionEvaluationUtils$Operation 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.PermissionEvaluationUtils$Resource 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.CertificateManager 79% 90% 69% :white_check_mark:
com.aws.greengrass.clientdevices.auth.ClientDevicesAuthService 78% 90% 67% :white_check_mark:
com.aws.greengrass.clientdevices.auth.DeviceAuthClient 73% 83% 64% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.ClientCertificateGenerator 95% 90% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateHelper$ProviderType 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateHelper 74% 93% 54% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateStore 72% 85% 60% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateExpiryMonitor 77% 87% 67% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.ServerCertificateGenerator 93% 87% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateGenerator 70% 90% 50% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateStore$CAType 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificateExpiryMonitor$CertRotationDecider 90% 100% 80% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.CertificatesConfig 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.events.SessionCreationEvent$SessionCreationStatus 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.usecases.VerifyIotCertificate 94% 88% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.usecases.VerifyThingAttachedToCertificate 92% 96% 88% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.usecases.CreateIoTThingSession 87% 90% 83% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.usecases.VerifyCertificateValidityPeriod 88% 88% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.infra.ClientCertificateStore 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.infra.BackgroundCertificateRefresh 83% 85% 82% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.infra.ThingRegistry 92% 97% 88% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.usecases.ConfigureManagedCertificateAuthority 85% 85% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.usecases.ConfigureCustomCertificateAuthority 83% 83% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.usecases.RegisterCertificateAuthorityUseCase 65% 81% 50% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.MetricsConfiguration 83% 100% 67% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.AuthorizationPolicyStatement$Effect 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.GroupManager 89% 94% 83% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.ConfigurationFormatVersion 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.CAConfiguration 96% 100% 92% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.RuntimeConfiguration 84% 99% 70% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.SecurityConfiguration 80% 93% 67% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.CDAConfiguration 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.GroupDefinition 75% 100% 50% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.ExpressionVisitor 84% 94% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.GroupConfiguration 90% 95% 86% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.ServiceErrorEvent 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.ClientDevicesAuthServiceApi 90% 79% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.DomainEvents 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.AuthorizeClientDeviceActionEvent$AuthorizationStatus 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.UseCases 71% 92% 50% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.DomainEvent 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.api.GetCertificateRequestOptions$CertificateType 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.attribute.StringLiteralAttribute 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.attribute.WildcardSuffixAttribute 88% 100% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.events.CertificateSubscriptionEvent$SubscriptionStatus 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.events.CACertificateChainChanged 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.Certificate$Status 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.IotAuthClient$Default 56% 47% 64% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.Thing 82% 86% 79% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.Certificate 78% 89% 67% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.GreengrassV2DataClientFactory 18% 18% 0% :x:
com.aws.greengrass.clientdevices.auth.iot.CertificateRegistry 95% 90% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.Component 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.events.VerifyClientDeviceIdentityEvent$VerificationStatus 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.infra.NetworkStateProvider$Default$1 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.infra.NetworkStateProvider$ConnectionState 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.infra.NetworkStateProvider$Default 75% 90% 60% :white_check_mark:
com.aws.greengrass.ipc.IPCUtils 83% 67% 100% :white_check_mark:
com.aws.greengrass.ipc.VerifyClientDeviceIdentityOperationHandler 60% 69% 50% :white_check_mark:
com.aws.greengrass.ipc.GetClientDeviceAuthTokenOperationHandler 86% 98% 75% :white_check_mark:
com.aws.greengrass.ipc.AuthorizeClientDeviceActionOperationHandler 79% 92% 67% :white_check_mark:
com.aws.greengrass.ipc.SubscribeToCertificateUpdatesOperationHandler 81% 88% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.SessionConfig 92% 100% 83% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.SessionManager$1 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.MqttSessionFactory 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.SessionCreator 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.SessionManager 88% 100% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.SessionImpl 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.SessionCreator$SessionFactorySingleton 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.session.MqttSessionFactory$MqttCredential 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.handlers.CACertificateChainChangedHandler 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.handlers.CAConfigurationChangedHandler 93% 87% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.handlers.CertificateRotationHandler 96% 91% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.certificate.handlers.SecurityConfigurationChangedHandler 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.handlers.SessionCreationEventHandler 88% 100% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.handlers.MetricsConfigurationChangedHandler 70% 90% 50% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.handlers.AuthorizeClientDeviceActionsMetricHandler 88% 100% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.handlers.VerifyClientDeviceIdentityEventHandler 88% 100% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.handlers.CertificateSubscriptionEventHandler 83% 100% 67% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.handlers.ServiceErrorEventHandler 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.iot.dto.CertificateV1DTO$Status 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.usecases.GetConnectivityInformationUseCase 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.usecases.RecordConnectivityChangesUseCase 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.util.ResizableLinkedBlockingQueue 90% 80% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.util.ParseIPAddress 90% 95% 84% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.ClientDeviceAuthMetrics 87% 98% 75% :white_check_mark:
com.aws.greengrass.clientdevices.auth.metrics.MetricsEmitter 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.CISShadowMonitor 63% 77% 50% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.RecordConnectivityChangesResponse 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.HostAddress 67% 67% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.RecordConnectivityChangesRequest 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.connectivity.ConnectivityInformation 100% 100% 100% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.RuleExpressionConstants 100% 100% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.TokenMgrError 22% 32% 12% :x:
com.aws.greengrass.clientdevices.auth.configuration.parser.RuleExpressionTokenManager 61% 65% 58% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.ASTStart 33% 33% 0% :x:
com.aws.greengrass.clientdevices.auth.configuration.parser.ASTAnd 67% 67% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.Token 58% 58% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.RuleExpressionDefaultVisitor 0% 0% 0% :x:
com.aws.greengrass.clientdevices.auth.configuration.parser.ASTOr 67% 67% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.SimpleCharStream 28% 31% 25% :x:
com.aws.greengrass.clientdevices.auth.configuration.parser.RuleExpressionTreeConstants 0% 0% 0% :x:
com.aws.greengrass.clientdevices.auth.configuration.parser.JJTRuleExpressionState 67% 65% 70% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.ASTThing 67% 67% 0% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.RuleExpression 63% 63% 62% :white_check_mark:
com.aws.greengrass.clientdevices.auth.configuration.parser.SimpleNode 27% 35% 19% :x:

Minimum allowed coverage is 50%

Generated by :monkey: cobertura-action against 97091130f12bd4dd99bb13cf3413fe546ad6fa64