@Override protected boolean passesFormalVerification(final ResourceIdentifier linkTarget, final Message msg) { return RegistrationMessageFilter.verify(linkTarget, msg); }
/** * Checks whether a given registration message contains all required properties. * * @param linkTarget The resource path to check the message's properties against for consistency. * @param msg The AMQP 1.0 message to perform the checks on. * @return {@code true} if the message passes all checks. */ public static boolean verify(final ResourceIdentifier linkTarget, final Message msg) { if (!hasValidDeviceId(linkTarget, msg)) { return false; } else if (!hasCorrelationId(msg)) { return false; } else if (!RegistrationConstants.isValidAction(msg.getSubject())) { LOG.trace("message [{}] does not contain valid action property", msg.getMessageId()); return false; } else if (msg.getReplyTo() == null) { LOG.trace("message [{}] contains no reply-to address", msg.getMessageId()); return false; } else if (msg.getBody() != null && !MessageHelper.hasDataBody(msg)) { LOG.trace("message [{}] contains no Data section payload", msg.getMessageId()); return false; } else { return true; } } }
/** * Checks whether a given registration message contains all required properties. * * @param linkTarget The resource path to check the message's properties against for consistency. * @param msg The AMQP 1.0 message to perform the checks on. * @return {@code true} if the message passes all checks. */ public static boolean verify(final ResourceIdentifier linkTarget, final Message msg) { if (!hasValidDeviceId(linkTarget, msg)) { return false; } else if (!hasCorrelationId(msg)) { return false; } else if (!RegistrationConstants.isValidAction(msg.getSubject())) { LOG.trace("message [{}] does not contain valid action property", msg.getMessageId()); return false; } else if (msg.getReplyTo() == null) { LOG.trace("message [{}] contains no reply-to address", msg.getMessageId()); return false; } else if (msg.getBody() != null && !MessageHelper.hasDataBody(msg, true)) { LOG.trace("message [{}] contains no AmqpValue or Data section payload", msg.getMessageId()); return false; } else { return true; } } }
@Override protected boolean passesFormalVerification(final ResourceIdentifier linkTarget, final Message msg) { return RegistrationMessageFilter.verify(linkTarget, msg); }
/** * Verifies that a request that does not contain a device ID * does not pass the filter. */ @Test public void testVerifyDetectsMissingDeviceId() { // GIVEN a registration message lacking the device id final Message msg = givenAMessageHavingProperties(null, ACTION_GET); // WHEN receiving the message via a link final ResourceIdentifier linkTarget = getResourceIdentifier(MY_TENANT); // THEN message validation fails assertFalse(RegistrationMessageFilter.verify(linkTarget, msg)); }
/** * Verifies that a request that contains another device ID than the link it has been * sent on does not pass the filter. */ @Test public void testVerifyDetectsDeviceIdMismatch() { // GIVEN a registration message with device id not matching the link target final Message msg = givenAMessageHavingProperties(MY_DEVICE + "_1", ACTION_GET); // WHEN receiving the message via a link final ResourceIdentifier linkTarget = getResourceIdentifier(MY_TENANT, MY_DEVICE); // THEN message validation fails assertFalse(RegistrationMessageFilter.verify(linkTarget, msg)); }
/** * Verifies that a request that does not contain a subject * does not pass the filter. */ @Test public void testVerifyDetectsMissingAction() { // GIVEN a registration message lacking a valid subject final Message msg = givenAMessageHavingProperties(MY_DEVICE, null); // WHEN receiving the message via a link final ResourceIdentifier linkTarget = getResourceIdentifier(MY_TENANT); // THEN message validation fails assertFalse(RegistrationMessageFilter.verify(linkTarget, msg)); }
/** * Verifies that a request with a tenant-level target address containing * all required properties passes the filter. */ @Test public void testVerifySucceedsForTenantOnlyLinkTarget() { // GIVEN a valid registration message for myDevice final Message msg = givenAMessageHavingProperties(MY_DEVICE, ACTION_GET); // WHEN receiving the message via a link with matching tenant-level target address final ResourceIdentifier linkTarget = getResourceIdentifier(MY_TENANT); // THEN message validation succeeds assertTrue(RegistrationMessageFilter.verify(linkTarget, msg)); }
/** * Verifies that a valid request that contains the same device ID as the link it * has been sent on passes the filter. */ @Test public void testVerifySucceedsForMatchingDevice() { // GIVEN a registration message for myDevice final Message msg = givenAMessageHavingProperties(MY_DEVICE, ACTION_GET); // WHEN receiving the message via a link with matching device-level address final ResourceIdentifier linkTarget = getResourceIdentifier(MY_TENANT, MY_DEVICE); // THEN message validation succeeds assertTrue(RegistrationMessageFilter.verify(linkTarget, msg)); }