/** * 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()); } } }