blob: 49b2921919fd90c091bc37f5693b90ce52dd27c6 [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.linkedin.api;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;
import javax.ws.rs.WebApplicationException;
import org.apache.camel.component.linkedin.api.model.Error;
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
import org.apache.cxf.jaxrs.client.WebClient;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Base class for resource tests.
*/
public abstract class AbstractResourceIntegrationTest extends Assert {
protected static final Logger LOG = LoggerFactory.getLogger(PeopleResourceIntegrationTest.class);
protected static final String DEFAULT_FIELDS = "";
protected static LinkedInOAuthRequestFilter requestFilter;
private static Properties properties;
private static OAuthToken token;
private static List<Object> resourceList = new ArrayList<Object>();
@BeforeClass
public static void beforeClass() throws Exception {
properties = new Properties();
properties.load(AbstractResourceIntegrationTest.class.getResourceAsStream("/test-options.properties"));
requestFilter = createOAuthHelper();
}
private static LinkedInOAuthRequestFilter createOAuthHelper() throws IOException {
final String userName = properties.getProperty("userName");
final String userPassword = properties.getProperty("userPassword");
final String clientId = properties.getProperty("clientId");
final String clientSecret = properties.getProperty("clientSecret");
final String redirectUri = properties.getProperty("redirectUri");
final OAuthScope[] scopes;
final String scope = properties.getProperty("scope");
if (scope != null) {
scopes = OAuthScope.fromValues(scope.split(","));
} else {
scopes = null;
}
final OAuthSecureStorage secureStorage = new OAuthSecureStorage() {
@Override
public OAuthToken getOAuthToken() {
return token;
}
@Override
public void saveOAuthToken(OAuthToken newToken) {
token = newToken;
}
};
final OAuthParams oAuthParams = new OAuthParams(userName, userPassword, secureStorage,
clientId, clientSecret, redirectUri, scopes);
return new LinkedInOAuthRequestFilter(oAuthParams, null, false, null);
}
@AfterClass
public static void afterClass() throws Exception {
// close all proxies
for (Object resource : resourceList) {
try {
WebClient.client(resource).close();
} catch (Exception ignore) {
}
}
if (requestFilter != null) {
requestFilter.close();
}
// TODO save and load token from test-options.properties
}
protected static <T> T getResource(Class<T> resourceClass) {
if (requestFilter == null) {
throw new IllegalStateException(AbstractResourceIntegrationTest.class.getName()
+ ".beforeClass must be invoked before getResource");
}
final T resource = JAXRSClientFactory.create(LinkedInOAuthRequestFilter.BASE_ADDRESS, resourceClass,
// Arrays.asList(new Object[] { requestFilter, new LinkedInExceptionResponseFilter() } ));
Arrays.asList(new Object[]{requestFilter, new EnumQueryParamConverterProvider()}));
resourceList.add(resource);
return resource;
}
protected void execute(Runnable runnable) {
try {
runnable.run();
} catch (WebApplicationException e) {
final org.apache.camel.component.linkedin.api.model.Error error = e.getResponse().readEntity(Error.class);
assertNotNull(error);
LOG.error("Error: {}", error.getMessage());
throw new LinkedInException(error, e.getResponse());
}
}
}