Search in sources :

Example 1 with Target

use of org.apache.qpid.proton.amqp.transport.Target in project vertx-proton by vert-x3.

the class ProtonClientTest method processConnectionAnonymousSenderSpecifiesLinkTarget.

private void processConnectionAnonymousSenderSpecifiesLinkTarget(TestContext context, Async async, ProtonConnection serverConnection) {
    serverConnection.sessionOpenHandler(session -> session.open());
    serverConnection.receiverOpenHandler(receiver -> {
        LOG.trace("Server receiver opened");
        // TODO: set the local target on link before opening it
        receiver.handler((delivery, msg) -> {
            // We got the message that was sent, complete the test
            LOG.trace("Server got msg: {0}", getMessageBody(context, msg));
            serverConnection.disconnect();
            async.complete();
        });
        // Verify that the remote link target (set by the client) matches
        // up to the expected value to signal use of the anonymous relay
        Target remoteTarget = receiver.getRemoteTarget();
        context.assertNotNull(remoteTarget, "Client did not set a link target");
        context.assertNull(remoteTarget.getAddress(), "Unexpected target address");
        receiver.open();
    });
    serverConnection.openHandler(result -> {
        serverConnection.open();
    });
}
Also used : Target(org.apache.qpid.proton.amqp.transport.Target)

Example 2 with Target

use of org.apache.qpid.proton.amqp.transport.Target in project hono by eclipse.

the class AmqpServiceBaseTest method getTarget.

private static Target getTarget(final ResourceIdentifier targetAddress) {
    Target result = mock(Target.class);
    when(result.getAddress()).thenReturn(targetAddress.toString());
    return result;
}
Also used : Target(org.apache.qpid.proton.amqp.transport.Target)

Example 3 with Target

use of org.apache.qpid.proton.amqp.transport.Target in project hono by eclipse.

the class AmqpServiceBaseTest method testHandleReceiverOpenRejectsUnauthorizedClient.

/**
 * Verifies that the service rejects sender links on resources that
 * the client is not authorized to write to.
 */
@Test
public void testHandleReceiverOpenRejectsUnauthorizedClient() {
    // GIVEN a server with a endpoint
    final ResourceIdentifier restrictedTargetAddress = ResourceIdentifier.from(ENDPOINT, "RESTRICTED_TENANT", null);
    final AmqpEndpoint endpoint = mock(AmqpEndpoint.class);
    when(endpoint.getName()).thenReturn(ENDPOINT);
    final AuthorizationService authService = mock(AuthorizationService.class);
    when(authService.isAuthorized(Constants.PRINCIPAL_ANONYMOUS, restrictedTargetAddress, Activity.WRITE)).thenReturn(Future.succeededFuture(Boolean.FALSE));
    final AmqpServiceBase<ServiceConfigProperties> server = createServer(endpoint);
    server.setAuthorizationService(authService);
    // WHEN a client connects to the server using a address for a tenant it is not authorized to write to
    final Target target = getTarget(restrictedTargetAddress);
    final ProtonReceiver receiver = mock(ProtonReceiver.class);
    when(receiver.getRemoteTarget()).thenReturn(target);
    when(receiver.setCondition(any())).thenReturn(receiver);
    server.handleReceiverOpen(newConnection(Constants.PRINCIPAL_ANONYMOUS), receiver);
    // THEN the server closes the link with the client
    verify(receiver).close();
}
Also used : ProtonReceiver(io.vertx.proton.ProtonReceiver) ResourceIdentifier(org.eclipse.hono.util.ResourceIdentifier) Target(org.apache.qpid.proton.amqp.transport.Target) AuthorizationService(org.eclipse.hono.service.auth.AuthorizationService) ServiceConfigProperties(org.eclipse.hono.config.ServiceConfigProperties) Test(org.junit.Test)

Example 4 with Target

use of org.apache.qpid.proton.amqp.transport.Target in project hono by eclipse.

the class AbstractRequestResponseClientTest method setUp.

/**
 * Sets up the fixture.
 */
@SuppressWarnings("unchecked")
@Before
public void setUp() {
    vertx = mock(Vertx.class);
    context = HonoClientUnitTestHelper.mockContext(vertx);
    receiver = HonoClientUnitTestHelper.mockProtonReceiver();
    sender = HonoClientUnitTestHelper.mockProtonSender();
    Target target = mock(Target.class);
    when(target.getAddress()).thenReturn("peer/tenant");
    when(sender.getCredit()).thenReturn(10);
    when(sender.getRemoteTarget()).thenReturn(target);
    cache = mock(ExpiringValueCache.class);
    client = getClient("tenant", sender, receiver);
    // do not time out requests by default
    client.setRequestTimeout(0);
}
Also used : Target(org.apache.qpid.proton.amqp.transport.Target) ExpiringValueCache(org.eclipse.hono.cache.ExpiringValueCache) Vertx(io.vertx.core.Vertx) Before(org.junit.Before)

Example 5 with Target

use of org.apache.qpid.proton.amqp.transport.Target in project hono by eclipse.

the class AmqpServiceBaseTest method testHandleReceiverOpenForwardsToEndpoint.

/**
 * Verifies that the service notifies a registered endpoint about a client
 * that has established a link.
 */
@Test
public void testHandleReceiverOpenForwardsToEndpoint() {
    // GIVEN a server with an endpoint
    final ResourceIdentifier targetAddress = ResourceIdentifier.from(ENDPOINT, Constants.DEFAULT_TENANT, null);
    final AmqpEndpoint endpoint = mock(AmqpEndpoint.class);
    when(endpoint.getName()).thenReturn(ENDPOINT);
    final AuthorizationService authService = mock(AuthorizationService.class);
    when(authService.isAuthorized(Constants.PRINCIPAL_ANONYMOUS, targetAddress, Activity.WRITE)).thenReturn(Future.succeededFuture(Boolean.TRUE));
    final AmqpServiceBase<ServiceConfigProperties> server = createServer(endpoint);
    server.setAuthorizationService(authService);
    // WHEN a client connects to the server using this endpoint
    final Target target = getTarget(targetAddress);
    final ProtonReceiver receiver = mock(ProtonReceiver.class);
    when(receiver.getRemoteTarget()).thenReturn(target);
    when(receiver.attachments()).thenReturn(mock(Record.class));
    server.handleReceiverOpen(newConnection(Constants.PRINCIPAL_ANONYMOUS), receiver);
    // THEN the server delegates link establishment to the endpoint
    verify(endpoint).onLinkAttach(any(ProtonConnection.class), eq(receiver), eq(targetAddress));
}
Also used : ProtonReceiver(io.vertx.proton.ProtonReceiver) ResourceIdentifier(org.eclipse.hono.util.ResourceIdentifier) ProtonConnection(io.vertx.proton.ProtonConnection) Target(org.apache.qpid.proton.amqp.transport.Target) AuthorizationService(org.eclipse.hono.service.auth.AuthorizationService) ServiceConfigProperties(org.eclipse.hono.config.ServiceConfigProperties) Record(org.apache.qpid.proton.engine.Record) Test(org.junit.Test)

Aggregations

Target (org.apache.qpid.proton.amqp.transport.Target)5 ProtonReceiver (io.vertx.proton.ProtonReceiver)2 ServiceConfigProperties (org.eclipse.hono.config.ServiceConfigProperties)2 AuthorizationService (org.eclipse.hono.service.auth.AuthorizationService)2 ResourceIdentifier (org.eclipse.hono.util.ResourceIdentifier)2 Test (org.junit.Test)2 Vertx (io.vertx.core.Vertx)1 ProtonConnection (io.vertx.proton.ProtonConnection)1 Record (org.apache.qpid.proton.engine.Record)1 ExpiringValueCache (org.eclipse.hono.cache.ExpiringValueCache)1 Before (org.junit.Before)1