Search in sources :

Example 21 with Device

use of org.eclipse.hono.auth.Device in project hono by eclipse.

the class SigfoxProtocolAdapter method dataHandler.

private void dataHandler(final HttpContext ctx, final UploadHandler uploadHandler) {
    if (!ctx.isDeviceAuthenticated()) {
        LOG.warn("Not a device");
        return;
    }
    final Device gatewayDevice = ctx.getAuthenticatedDevice();
    final String deviceTenant = gatewayDevice.getTenantId();
    final String requestTenant = ctx.getRoutingContext().pathParam(SIGFOX_PARAM_TENANT);
    final String deviceId = ctx.getRoutingContext().queryParams().get(SIGFOX_PARAM_DEVICE_ID);
    final String strData = ctx.getRoutingContext().queryParams().get(SIGFOX_PARAM_DATA);
    final Buffer data = decodeData(strData);
    LOG.debug("{} handler - deviceTenant: {}, requestTenant: {}, deviceId: {}, data: {}", ctx.request().method(), deviceTenant, requestTenant, deviceId, strData);
    if (requestTenant == null) {
        ctx.fail(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST, "missing the tenant information in the request URL"));
        return;
    }
    if (!requestTenant.equals(deviceTenant)) {
        ctx.fail(new ClientErrorException(HttpURLConnection.HTTP_BAD_REQUEST, "tenant information mismatch"));
        return;
    }
    final String contentType = (data != null) ? CONTENT_TYPE_OCTET_STREAM : EventConstants.CONTENT_TYPE_EMPTY_NOTIFICATION;
    uploadHandler.upload(ctx, deviceTenant, deviceId, data, contentType);
}
Also used : Buffer(io.vertx.core.buffer.Buffer) Device(org.eclipse.hono.auth.Device) ClientErrorException(org.eclipse.hono.client.ClientErrorException)

Example 22 with Device

use of org.eclipse.hono.auth.Device in project hono by eclipse.

the class VertxBasedMqttProtocolAdapterTest method testOnPublishedAuthenticatedMessageFailsForNonMatchingTenant.

/**
 * Verifies that the adapter rejects a message published by a gateway whose tenant
 * does not match the tenant specified in the topic.
 *
 * @param ctx The helper to use for running tests on vert.x.
 */
@Test
public void testOnPublishedAuthenticatedMessageFailsForNonMatchingTenant(final VertxTestContext ctx) {
    givenAnAdapter();
    // WHEN an authenticated gateway publishes a message to a topic that does not match the gateway's tenant
    final MqttContext context = newContext(MqttQoS.AT_MOST_ONCE, TelemetryConstants.TELEMETRY_ENDPOINT + "/other-tenant/4711", span, new Device("my-tenant", "gateway"));
    adapter.onPublishedMessage(context).onComplete(ctx.failing(t -> {
        // THEN the message cannot be published
        assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_FORBIDDEN);
        ctx.completeNow();
    }));
}
Also used : HttpURLConnection(java.net.HttpURLConnection) VertxTestContext(io.vertx.junit5.VertxTestContext) MqttQoS(io.netty.handler.codec.mqtt.MqttQoS) MetricsTags(org.eclipse.hono.service.metric.MetricsTags) MqttEndpoint(io.vertx.mqtt.MqttEndpoint) MqttPublishMessage(io.vertx.mqtt.messages.MqttPublishMessage) Mockito.when(org.mockito.Mockito.when) Truth.assertThat(com.google.common.truth.Truth.assertThat) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) VertxExtension(io.vertx.junit5.VertxExtension) EventConstants(org.eclipse.hono.util.EventConstants) Device(org.eclipse.hono.auth.Device) Timeout(io.vertx.junit5.Timeout) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) TelemetryConstants(org.eclipse.hono.util.TelemetryConstants) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Buffer(io.vertx.core.buffer.Buffer) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) MqttProtocolAdapterProperties(org.eclipse.hono.adapter.mqtt.MqttProtocolAdapterProperties) Span(io.opentracing.Span) TracingMockSupport(org.eclipse.hono.test.TracingMockSupport) Mockito.mock(org.mockito.Mockito.mock) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) Device(org.eclipse.hono.auth.Device) Test(org.junit.jupiter.api.Test)

Example 23 with Device

use of org.eclipse.hono.auth.Device in project hono by eclipse.

the class VertxBasedMqttProtocolAdapterTest method testOnPublishedMessageFailsForMissingDeviceId.

/**
 * Verifies that the adapter fails to map a topic without a device ID received from an anonymous device.
 *
 * @param ctx The helper to use for running tests on vert.x.
 */
@Test
public void testOnPublishedMessageFailsForMissingDeviceId(final VertxTestContext ctx) {
    givenAnAdapter();
    // WHEN an anonymous device publishes a message to a topic that does not contain a device ID
    final MqttContext context = newContext(MqttQoS.AT_MOST_ONCE, TelemetryConstants.TELEMETRY_ENDPOINT + "/my-tenant", span);
    adapter.onPublishedMessage(context).onComplete(ctx.failing(t -> {
        // THEN the message cannot be published
        assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_BAD_REQUEST);
        ctx.completeNow();
    }));
}
Also used : HttpURLConnection(java.net.HttpURLConnection) VertxTestContext(io.vertx.junit5.VertxTestContext) MqttQoS(io.netty.handler.codec.mqtt.MqttQoS) MetricsTags(org.eclipse.hono.service.metric.MetricsTags) MqttEndpoint(io.vertx.mqtt.MqttEndpoint) MqttPublishMessage(io.vertx.mqtt.messages.MqttPublishMessage) Mockito.when(org.mockito.Mockito.when) Truth.assertThat(com.google.common.truth.Truth.assertThat) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) VertxExtension(io.vertx.junit5.VertxExtension) EventConstants(org.eclipse.hono.util.EventConstants) Device(org.eclipse.hono.auth.Device) Timeout(io.vertx.junit5.Timeout) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) TelemetryConstants(org.eclipse.hono.util.TelemetryConstants) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Buffer(io.vertx.core.buffer.Buffer) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) MqttProtocolAdapterProperties(org.eclipse.hono.adapter.mqtt.MqttProtocolAdapterProperties) Span(io.opentracing.Span) TracingMockSupport(org.eclipse.hono.test.TracingMockSupport) Mockito.mock(org.mockito.Mockito.mock) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) Test(org.junit.jupiter.api.Test)

Example 24 with Device

use of org.eclipse.hono.auth.Device in project hono by eclipse.

the class VertxBasedMqttProtocolAdapterTest method testMapTopicFailsForQoS2EventMessage.

/**
 * Verifies that the adapter rejects QoS 2 messages published to the <em>event</em> endpoint.
 *
 * @param ctx The helper to use for running tests on vert.x.
 */
@Test
public void testMapTopicFailsForQoS2EventMessage(final VertxTestContext ctx) {
    givenAnAdapter();
    // WHEN a device publishes a message with QoS 2 to an "event" topic
    final MqttPublishMessage message = newMessage(MqttQoS.EXACTLY_ONCE, EventConstants.EVENT_ENDPOINT);
    adapter.mapTopic(newContext(message, span, null)).onComplete(ctx.failing(t -> {
        // THEN the message cannot be mapped to a topic
        assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_BAD_REQUEST);
        ctx.completeNow();
    }));
}
Also used : HttpURLConnection(java.net.HttpURLConnection) VertxTestContext(io.vertx.junit5.VertxTestContext) MqttQoS(io.netty.handler.codec.mqtt.MqttQoS) MetricsTags(org.eclipse.hono.service.metric.MetricsTags) MqttEndpoint(io.vertx.mqtt.MqttEndpoint) MqttPublishMessage(io.vertx.mqtt.messages.MqttPublishMessage) Mockito.when(org.mockito.Mockito.when) Truth.assertThat(com.google.common.truth.Truth.assertThat) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) VertxExtension(io.vertx.junit5.VertxExtension) EventConstants(org.eclipse.hono.util.EventConstants) Device(org.eclipse.hono.auth.Device) Timeout(io.vertx.junit5.Timeout) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) TelemetryConstants(org.eclipse.hono.util.TelemetryConstants) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Buffer(io.vertx.core.buffer.Buffer) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) MqttProtocolAdapterProperties(org.eclipse.hono.adapter.mqtt.MqttProtocolAdapterProperties) Span(io.opentracing.Span) TracingMockSupport(org.eclipse.hono.test.TracingMockSupport) Mockito.mock(org.mockito.Mockito.mock) MqttPublishMessage(io.vertx.mqtt.messages.MqttPublishMessage) Test(org.junit.jupiter.api.Test)

Example 25 with Device

use of org.eclipse.hono.auth.Device in project hono by eclipse.

the class VertxBasedMqttProtocolAdapterTest method testOnPublishedAuthenticatedMessageFailsForMissingDeviceId.

/**
 * Verifies that the adapter fails to map a topic without a device ID received from an authenticated device.
 *
 * @param ctx The helper to use for running tests on vert.x.
 */
@Test
public void testOnPublishedAuthenticatedMessageFailsForMissingDeviceId(final VertxTestContext ctx) {
    givenAnAdapter();
    // WHEN an authenticated device publishes a message to a topic that does not contain a device ID
    final MqttContext context = newContext(MqttQoS.AT_MOST_ONCE, TelemetryConstants.TELEMETRY_ENDPOINT + "/my-tenant", span, new Device("my-tenant", "device"));
    adapter.onPublishedMessage(context).onComplete(ctx.failing(t -> {
        // THEN the message cannot be published
        assertServiceInvocationException(ctx, t, HttpURLConnection.HTTP_BAD_REQUEST);
        ctx.completeNow();
    }));
}
Also used : HttpURLConnection(java.net.HttpURLConnection) VertxTestContext(io.vertx.junit5.VertxTestContext) MqttQoS(io.netty.handler.codec.mqtt.MqttQoS) MetricsTags(org.eclipse.hono.service.metric.MetricsTags) MqttEndpoint(io.vertx.mqtt.MqttEndpoint) MqttPublishMessage(io.vertx.mqtt.messages.MqttPublishMessage) Mockito.when(org.mockito.Mockito.when) Truth.assertThat(com.google.common.truth.Truth.assertThat) ServiceInvocationException(org.eclipse.hono.client.ServiceInvocationException) VertxExtension(io.vertx.junit5.VertxExtension) EventConstants(org.eclipse.hono.util.EventConstants) Device(org.eclipse.hono.auth.Device) Timeout(io.vertx.junit5.Timeout) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) TelemetryConstants(org.eclipse.hono.util.TelemetryConstants) ExtendWith(org.junit.jupiter.api.extension.ExtendWith) Buffer(io.vertx.core.buffer.Buffer) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) MqttProtocolAdapterProperties(org.eclipse.hono.adapter.mqtt.MqttProtocolAdapterProperties) Span(io.opentracing.Span) TracingMockSupport(org.eclipse.hono.test.TracingMockSupport) Mockito.mock(org.mockito.Mockito.mock) MqttContext(org.eclipse.hono.adapter.mqtt.MqttContext) Device(org.eclipse.hono.auth.Device) Test(org.junit.jupiter.api.Test)

Aggregations

Device (org.eclipse.hono.auth.Device)115 HttpURLConnection (java.net.HttpURLConnection)74 Test (org.junit.jupiter.api.Test)72 Future (io.vertx.core.Future)69 ClientErrorException (org.eclipse.hono.client.ClientErrorException)67 Buffer (io.vertx.core.buffer.Buffer)66 Handler (io.vertx.core.Handler)63 TenantObject (org.eclipse.hono.util.TenantObject)63 Promise (io.vertx.core.Promise)59 Constants (org.eclipse.hono.util.Constants)58 Span (io.opentracing.Span)55 RegistrationAssertion (org.eclipse.hono.util.RegistrationAssertion)55 SpanContext (io.opentracing.SpanContext)53 VertxTestContext (io.vertx.junit5.VertxTestContext)52 VertxExtension (io.vertx.junit5.VertxExtension)51 MessageHelper (org.eclipse.hono.util.MessageHelper)51 ExtendWith (org.junit.jupiter.api.extension.ExtendWith)51 Mockito.when (org.mockito.Mockito.when)51 Truth.assertThat (com.google.common.truth.Truth.assertThat)50 ResourceIdentifier (org.eclipse.hono.util.ResourceIdentifier)47