blob: 1f81c2434ef6ce24405997f8fb286de2cae52492 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.camel.component.olingo4;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelExecutionException;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.apache.camel.util.IntrospectionSupport;
import org.apache.http.HttpHost;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.olingo.client.api.ODataClient;
import org.apache.olingo.client.api.domain.ClientObjectFactory;
import org.apache.olingo.client.core.ODataClientFactory;
/**
* Abstract base class for Olingo 4.0 Integration tests generated by Camel API
* component maven plugin.
*/
public class AbstractOlingo4TestSupport extends CamelTestSupport {
protected static final String TEST_SERVICE_BASE_URL = "http://services.odata.org/TripPinRESTierService";
protected final ODataClient odataClient = ODataClientFactory.getClient();
protected final ClientObjectFactory objFactory = odataClient.getObjectFactory();
@Override
protected CamelContext createCamelContext() throws Exception {
final CamelContext context = super.createCamelContext();
Map<String, Object> options = new HashMap<>();
options.put("serviceUri", getRealServiceUrl(TEST_SERVICE_BASE_URL));
options.put("contentType", "application/json;charset=utf-8");
final Olingo4Configuration configuration = new Olingo4Configuration();
IntrospectionSupport.setProperties(configuration, options);
// add OlingoComponent to Camel context
final Olingo4Component component = new Olingo4Component(context);
component.setConfiguration(configuration);
context.addComponent("olingo4", component);
return context;
}
/*
* Every request to the demo OData 4.0
* (http://services.odata.org/TripPinRESTierService) generates unique
* service URL with postfix like (S(tuivu3up5ygvjzo5fszvnwfv)) for each
* session This method makes request to the base URL and return URL with
* generated postfix
*/
@SuppressWarnings("deprecation")
protected String getRealServiceUrl(String baseUrl) throws ClientProtocolException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(baseUrl);
HttpContext httpContext = new BasicHttpContext();
httpclient.execute(httpGet, httpContext);
HttpUriRequest currentReq = (HttpUriRequest)httpContext.getAttribute(ExecutionContext.HTTP_REQUEST);
HttpHost currentHost = (HttpHost)httpContext.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
String currentUrl = (currentReq.getURI().isAbsolute()) ? currentReq.getURI().toString() : (currentHost.toURI() + currentReq.getURI());
return currentUrl;
}
@Override
public boolean isCreateCamelContextPerClass() {
// only create the context once for this class
return true;
}
@SuppressWarnings("unchecked")
protected <T> T requestBodyAndHeaders(String endpointUri, Object body, Map<String, Object> headers) throws CamelExecutionException {
return (T)template().requestBodyAndHeaders(endpointUri, body, headers);
}
@SuppressWarnings("unchecked")
protected <T> T requestBody(String endpoint, Object body) throws CamelExecutionException {
return (T)template().requestBody(endpoint, body);
}
}