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

Apache License 2.0
2 stars 3 forks source link

feat(uat): handle message expiry interval in mosquitto client #351

Closed bgklika closed 1 year ago

bgklika commented 1 year ago

Issue #, if available: Set/unset message expiry interval

Description of changes:

Why is this change necessary: New MQTT v5.0 feature message expiry interval should be handled

How was this change tested: Currently manually by running Control as application with hard-coded scenario. Later by adding new cucumber scenario.

Test results: Control:

[INFO ] 2023-06-30 15:27:50.490 [com.aws.greengrass.testing.mqtt.client.control.ExampleControl.main()] ExampleControl - Control: port 47619, with TLS, MQTT v5
[INFO ] 2023-06-30 15:27:50.710 [com.aws.greengrass.testing.mqtt.client.control.ExampleControl.main()] EngineControlImpl - MQTT client control gRPC server started, listening on 47619
[INFO ] 2023-06-30 15:28:35.532 [grpc-default-executor-0] GRPCDiscoveryServer - RegisterAgent: agentId mosquitto_agent
[INFO ] 2023-06-30 15:28:35.550 [grpc-default-executor-0] GRPCDiscoveryServer - DiscoveryClient: agentId mosquitto_agent address 127.0.0.1 port 35423
[INFO ] 2023-06-30 15:28:35.553 [grpc-default-executor-0] EngineControlImpl - Created new agent control for mosquitto_agent on 127.0.0.1:35423
[INFO ] 2023-06-30 15:28:35.604 [grpc-default-executor-0] ExampleControl - Agent mosquitto_agent is connected
[INFO ] 2023-06-30 15:28:35.608 [pool-2-thread-1] AgentTestScenario - Playing test scenario for agent id mosquitto_agent
[INFO ] 2023-06-30 15:28:38.628 [pool-2-thread-1] AgentTestScenario - Connect Set user property: region, US
[INFO ] 2023-06-30 15:28:38.628 [pool-2-thread-1] AgentTestScenario - Connect Set user property: type, JSON
[INFO ] 2023-06-30 15:28:38.995 [pool-2-thread-1] AgentControlImpl - Created connection with id 1 CONNACK 'sessionPresent: false
reasonCode: 0
receiveMaximum: 100
maximumQoS: 1
retainAvailable: true
maximumPacketSize: 149504
wildcardSubscriptionsAvailable: true
subscriptionIdentifiersAvailable: false
sharedSubscriptionsAvailable: true
serverKeepAlive: 60
topicAliasMaximum: 8
'
[INFO ] 2023-06-30 15:28:38.995 [pool-2-thread-1] AgentControlImpl - createMqttConnection: MQTT connectionId 1 created
[INFO ] 2023-06-30 15:28:38.995 [pool-2-thread-1] AgentTestScenario - MQTT connection with id 1 is established
[INFO ] 2023-06-30 15:28:44.002 [pool-2-thread-1] AgentTestScenario - Subscribe Set user property: region, US
[INFO ] 2023-06-30 15:28:44.002 [pool-2-thread-1] AgentTestScenario - Subscribe Set user property: type, JSON
[INFO ] 2023-06-30 15:28:44.010 [pool-2-thread-1] AgentControlImpl - SubscribeMqtt: subscribe on connection 1
[INFO ] 2023-06-30 15:28:44.083 [pool-2-thread-1] AgentTestScenario - Subscribe response: connectionId 1 reason codes [0] reason string ''
[INFO ] 2023-06-30 15:28:49.089 [pool-2-thread-1] AgentTestScenario - Set property payload format indicator true
[INFO ] 2023-06-30 15:28:49.089 [pool-2-thread-1] AgentTestScenario - Set property message expiry interval 3600
[INFO ] 2023-06-30 15:28:49.089 [pool-2-thread-1] AgentTestScenario - Publish Set user property: region, US
[INFO ] 2023-06-30 15:28:49.089 [pool-2-thread-1] AgentTestScenario - Publish Set user property: type, JSON
[INFO ] 2023-06-30 15:28:49.089 [pool-2-thread-1] AgentTestScenario - Set property content type text/plain; charset=utf-8
[INFO ] 2023-06-30 15:28:49.091 [pool-2-thread-1] AgentControlImpl - PublishMqtt: publishing on connectionId 1 topic test/topic
[INFO ] 2023-06-30 15:28:49.146 [grpc-default-executor-0] GRPCDiscoveryServer - OnReceiveMessage: agentId mosquitto_agent connectionId 1 topic test/topic QoS 0
[INFO ] 2023-06-30 15:28:49.148 [grpc-default-executor-0] AgentTestScenario - Message received on agentId mosquitto_agent connectionId 1 topic test/topic QoS 0 content <ByteString@130638d1 size=12 contents="Hello World!">
[INFO ] 2023-06-30 15:28:49.148 [grpc-default-executor-0] AgentTestScenario - Message has payload format indicator true
[INFO ] 2023-06-30 15:28:49.149 [grpc-default-executor-0] AgentTestScenario - Message has message expiry interval 3599
[INFO ] 2023-06-30 15:28:49.149 [grpc-default-executor-0] AgentTestScenario - Message has user property key region value US
[INFO ] 2023-06-30 15:28:49.149 [grpc-default-executor-0] AgentTestScenario - Message has user property key type value JSON
[INFO ] 2023-06-30 15:28:49.149 [grpc-default-executor-0] AgentTestScenario - Message has content type 'text/plain; charset=utf-8'
[INFO ] 2023-06-30 15:28:49.158 [pool-2-thread-1] AgentTestScenario - Published connectionId 1 reason code 0 reason string ''
[INFO ] 2023-06-30 15:28:54.159 [pool-2-thread-1] AgentTestScenario - Unsubscribe Set user property: region, US
[INFO ] 2023-06-30 15:28:54.159 [pool-2-thread-1] AgentTestScenario - Unsubscribe Set user property: type, JSON
[INFO ] 2023-06-30 15:28:54.161 [pool-2-thread-1] AgentControlImpl - UnsubscribeMqtt: unsubscribe on connectionId 1
[INFO ] 2023-06-30 15:28:54.211 [pool-2-thread-1] AgentTestScenario - Unsubscribe response: connectionId 1 reason codes [0] reason string ''
[INFO ] 2023-06-30 15:29:09.212 [pool-2-thread-1] AgentTestScenario - Disconnect Set user property: region, US
[INFO ] 2023-06-30 15:29:09.213 [pool-2-thread-1] AgentTestScenario - Disconnect Set user property: type, JSON
[INFO ] 2023-06-30 15:29:09.242 [grpc-default-executor-0] GRPCDiscoveryServer - OnMqttDisconnect: agentId mosquitto_agent connectionId 1 disconnect 'reasonCode: 0
' error ''
[INFO ] 2023-06-30 15:29:09.243 [grpc-default-executor-0] AgentTestScenario - MQTT disconnected on agentId mosquitto_agent connectionId 1 disconnect 'reasonCode: 0
' error ''
[INFO ] 2023-06-30 15:29:09.249 [pool-2-thread-1] AgentControlImpl - closeMqttConnection: MQTT connectionId 1 closed
[INFO ] 2023-06-30 15:29:09.256 [pool-2-thread-1] AgentControlImpl - shutdown request sent successfully
[INFO ] 2023-06-30 15:29:09.262 [grpc-default-executor-0] GRPCDiscoveryServer - UnregisterAgent: agentId mosquitto_agent reason Agent shutdown by OTF request 'That's it.'
[INFO ] 2023-06-30 15:29:09.264 [grpc-default-executor-0] ExampleControl - Agent mosquitto_agent is disconnected

Mosquitto client:

$ build/src/mosquitto-test-client mosquitto_agent 
[DEBUG]: Initialize gRPC library
[DEBUG]: Making gPRC link with 127.0.0.1:47619 as agent_id 'mosquitto_agent'
[DEBUG]: Sending RegisterAgent request with agent_id mosquitto_agent
[DEBUG]: Local address is 127.0.0.1
[DEBUG]: GRPCControlServer created and listed on 127.0.0.1:35423
[DEBUG]: Sending DiscoveryAgent request agent_id 'mosquitto_agent' host:port 127.0.0.1:35423
[DEBUG]: gPRC link established with 127.0.0.1:47619 as agent_id 'mosquitto_agent'
[DEBUG]: Initialize Mosquitto MQTT library
[DEBUG]: Mosquitto library version 2.0.15
[DEBUG]: Handle gRPC requests
[DEBUG]: CreateMqttConnection client_id 'GGMQ-test-device2' broker a2rytmonq5cblh-ats.iot.eu-central-1.amazonaws.com:8883
[DEBUG]: Creating Mosquitto MQTT v5 connection for a2rytmonq5cblh-ats.iot.eu-central-1.amazonaws.com:8883
[DEBUG]: Copied TX user property region:US
[DEBUG]: Copied TX user property type:JSON
[DEBUG]: Establishing Mosquitto MQTT v5 connection to a2rytmonq5cblh-ats.iot.eu-central-1.amazonaws.com:8883 in 10 seconds
[DEBUG]: Use provided TLS credentials
[DEBUG]: mosquitto: Client GGMQ-test-device2 sending CONNECT
[DEBUG]: mosquitto: Client GGMQ-test-device2 received CONNACK (0)
[DEBUG]: onConnect rc 0 flags 0 props 0x7f8708010780
[DEBUG]: Establishing MQTT connection to a2rytmonq5cblh-ats.iot.eu-central-1.amazonaws.com:8883 completed with reason code 0
[DEBUG]: Connection registered with id 1
[DEBUG]: Subscription: filter test/topic QoS 0 noLocal 0 retainAsPublished 0 retainHandling 2
[DEBUG]: SubscribeMqtt connection_id 1
[DEBUG]: Copied TX user property region:US
[DEBUG]: Copied TX user property type:JSON
[DEBUG]: mosquitto: Client GGMQ-test-device2 sending SUBSCRIBE (Mid: 1, Topic: test/topic, QoS: 0, Options: 0x20)
[DEBUG]: mosquitto: Client GGMQ-test-device2 received SUBACK
[DEBUG]: onSubscribe mid 1 qos_count 1 granted_qos 0x7f8708014040 props (nil)
[DEBUG]: Subscribed on filters 'test/topic,' QoS 0 no local 0 retain as published 0 retain handing 2 with message id 1
[DEBUG]: Copied RX reason code 0
[DEBUG]: PublishMqtt connection_id 1 topic test/topic retain 0
[DEBUG]: Copied TX payload format indicator 1
[DEBUG]: Copied TX message expiry interval 3600
[DEBUG]: Copied TX user property region:US
[DEBUG]: Copied TX user property type:JSON
[DEBUG]: Copied TX content type "text/plain; charset=utf-8"
[DEBUG]: mosquitto: Client GGMQ-test-device2 sending PUBLISH (d0, q1, r0, m2, 'test/topic', ... (12 bytes))
[DEBUG]: mosquitto: Client GGMQ-test-device2 received PUBLISH (d0, q0, r0, m0, 'test/topic', ... (12 bytes))
[DEBUG]: onMessage message 0x7f8708015908 props 0x7f8708011f00
[DEBUG]: Copied RX payload format indicator 1
[DEBUG]: Copied RX message expiry interval 3599
[DEBUG]: Copied RX content type "text/plain; charset=utf-8"
[DEBUG]: Copied RX user property region:US
[DEBUG]: Copied RX user property type:JSON
[DEBUG]: Sending OnReceiveMessage request agent_id 'mosquitto_agent' connection_id 1
[DEBUG]: mosquitto: Client GGMQ-test-device2 received PUBACK (Mid: 2, RC:0)
[DEBUG]: onPublish mid 2 rc 0 props (nil)
[DEBUG]: Published on topic 'test/topic' QoS 1 retain 0 with rc 0 message id 2
[DEBUG]: UnsubscribeMqtt connection_id 1
[DEBUG]: Copied TX user property region:US
[DEBUG]: Copied TX user property type:JSON
[DEBUG]: mosquitto: Client GGMQ-test-device2 sending UNSUBSCRIBE (Mid: 3, Topic: test/topic)
[DEBUG]: mosquitto: Client GGMQ-test-device2 received UNSUBACK
[DEBUG]: onUnsubscribe mid 3 props (nil)
[DEBUG]: Unsubscribed from filters 'test/topic,' with message id 3
[DEBUG]: Copied RX reason code 0
[DEBUG]: CloseMqttConnection connection_id 1 reason 4
[DEBUG]: Disconnect Mosquitto MQTT connection with reason code 4
[DEBUG]: Copied TX user property region:US
[DEBUG]: Copied TX user property type:JSON
[DEBUG]: mosquitto: Client GGMQ-test-device2 sending DISCONNECT
[DEBUG]: onDisconnect rc 0 props (nil)
[DEBUG]: Sending OnMqttDisconnect request agent_id 'mosquitto_agent' connection_id 1 error '(null)'
[DEBUG]: Destroy Mosquitto MQTT connection
[DEBUG]: ShutdownAgent with reason 'That's it.'
[DEBUG]: Shutdown gPRC link
[DEBUG]: Sending UnregisterAgent request agent_id 'mosquitto_agent' reason 'Agent shutdown by OTF request 'That's it.''
[DEBUG]: Shutdown MQTT library
[DEBUG]: Shutdown gRPC library
[DEBUG]: Execution done

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 5493a742da59fd9f2e9cef6a53bdc6cff23223b3