+ and: 'the dmi in the cache is trusted'
+ assert trustLevelPerDmiPlugin.get('my-dmi') == TrustLevel.COMPLETE
+ }
+
+ def 'Device trust level updated'() {
+ given: 'a non trusted cm handle'
+ trustLevelPerCmHandle.put('ch-1', TrustLevel.NONE)
+ and: 'a trusted dmi plugin'
+ trustLevelPerDmiPlugin.put('my-dmi', TrustLevel.COMPLETE)
+ and: 'inventory persistence service returns yang model cm handle'
+ mockInventoryPersistence.getYangModelCmHandle('ch-1') >> new YangModelCmHandle(id: 'ch-1', dmiDataServiceName: 'my-dmi')
+ when: 'update of device to COMPLETE trust level handled'
+ objectUnderTest.handleUpdateOfDeviceTrustLevel('ch-1', TrustLevel.COMPLETE)
+ then: 'the cm handle in the cache is trusted'
+ assert trustLevelPerCmHandle.get('ch-1', TrustLevel.COMPLETE)
+ and: 'notification is sent'
+ 1 * mockAttributeValueChangeEventPublisher.publishAvcEvent('ch-1', 'trustLevel', 'NONE', 'COMPLETE')
+ }
+
+ def 'Device trust level updated with same value'() {
+ given: 'a non trusted cm handle'
+ trustLevelPerCmHandle.put('ch-1', TrustLevel.NONE)
+ and: 'a trusted dmi plugin'
+ trustLevelPerDmiPlugin.put('my-dmi', TrustLevel.COMPLETE)
+ and: 'inventory persistence service returns yang model cm handle'
+ mockInventoryPersistence.getYangModelCmHandle('ch-1') >> new YangModelCmHandle(id: 'ch-1', dmiDataServiceName: 'my-dmi')
+ when: 'update of device trust to the same level (NONE)'
+ objectUnderTest.handleUpdateOfDeviceTrustLevel('ch-1', TrustLevel.NONE)
+ then: 'the cm handle in the cache is not trusted'
+ assert trustLevelPerCmHandle.get('ch-1', TrustLevel.NONE)
+ and: 'no notification is sent'
+ 0 * mockAttributeValueChangeEventPublisher.publishAvcEvent(*_)
+ }
+
+ def 'Dmi trust level restored to complete with non trusted device'() {
+ given: 'a non trusted dmi'
+ trustLevelPerDmiPlugin.put('my-dmi', TrustLevel.NONE)
+ and: 'a non trusted device'
+ trustLevelPerCmHandle.put('ch-1', TrustLevel.NONE)
+ when: 'restore the dmi trust level to COMPLETE'
+ objectUnderTest.handleUpdateOfDmiTrustLevel('my-dmi', ['ch-1'], TrustLevel.COMPLETE)
+ then: 'the cm handle in the cache is still NONE'
+ assert trustLevelPerCmHandle.get('ch-1') == TrustLevel.NONE
+ and: 'no notification is sent'
+ 0 * mockAttributeValueChangeEventPublisher.publishAvcEvent(*_)