[
https://issues.apache.org/jira/browse/CAMEL-11882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16192593#comment-16192593
]
ASF GitHub Bot commented on CAMEL-11882:
----------------------------------------
Github user ppalaga closed the pull request at:
https://github.com/apache/camel/pull/2005
> ServiceDefinition.metadata not passed to RibbonServiceLoadBalancer
> ------------------------------------------------------------------
>
> Key: CAMEL-11882
> URL: https://issues.apache.org/jira/browse/CAMEL-11882
> Project: Camel
> Issue Type: Bug
> Components: camel-ribbon
> Reporter: Peter Palaga
> Assignee: Peter Palaga
>
> I tried to write a Ribbon Load Balancer test that would send requests to two
> application paths on the same server and port. Because
> {{org.apache.camel.cloud.ServiceDefinition}} has no notion of context path, I
> used the {{ServiceDefinition.metadata}} to define it and in the
> {{serviceCall}} I used an expression
> {{.expression().simple("jetty:http://${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}/${header.CamelServiceCallServiceMeta[contextPath]}")}}
> to use it.
> However, the test is not passing because
> {{RibbonServiceLoadBalancer.RibbonServerList.asRibbonServerList(List<ServiceDefinition>)}}
> is not passing the medata map to {{RibbonServiceDefinition}}. The test
> passes as expected when {{RibbonServerList.asRibbonServerList()}} is fixed.
> Here is the test:
> {code}
> package org.apache.camel.component.ribbon.cloud;
> import java.util.Collections;
> import org.apache.camel.RoutesBuilder;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.component.ribbon.RibbonConfiguration;
> import org.apache.camel.impl.cloud.StaticServiceDiscovery;
> import org.apache.camel.test.junit4.CamelTestSupport;
> import org.junit.Test;
> public class RibbonServiceCallRouteMetadataTest extends CamelTestSupport {
> @Test
> public void testServiceCall() throws Exception {
> getMockEndpoint("mock:app1").expectedMessageCount(1);
> getMockEndpoint("mock:app2").expectedMessageCount(1);
> getMockEndpoint("mock:result").expectedMessageCount(2);
> String out = template.requestBody("direct:start", null, String.class);
> String out2 = template.requestBody("direct:start", null,
> String.class);
> assertEquals("app2", out);
> assertEquals("app1", out2);
> assertMockEndpointsSatisfied();
> }
> @Override
> protected RoutesBuilder createRouteBuilder() throws Exception {
> return new RouteBuilder() {
> @Override
> public void configure() throws Exception {
> // setup a static ribbon server list with these 2 servers to
> start with
> StaticServiceDiscovery servers = new StaticServiceDiscovery();
> servers.addServer("myService", "localhost", 9090,
> Collections.singletonMap("contextPath", "app1"));
> servers.addServer("myService", "localhost", 9090,
> Collections.singletonMap("contextPath", "app2"));
> RibbonConfiguration configuration = new RibbonConfiguration();
> RibbonServiceLoadBalancer loadBalancer = new
> RibbonServiceLoadBalancer(configuration);
> from("direct:start")
> .serviceCall()
> .name("myService")
>
> .expression().simple("jetty:http://${header.CamelServiceCallServiceHost}:${header.CamelServiceCallServicePort}/${header.CamelServiceCallServiceMeta[contextPath]}")
> .loadBalancer(loadBalancer)
> .serviceDiscovery(servers)
> .end()
> .to("mock:result");
> from("jetty:http://localhost:9090/app1")
> .to("mock:app1")
> .transform().constant("app1");
> from("jetty:http://localhost:9090/app2")
> .to("mock:app2")
> .transform().constant("app2");
> }
> };
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)