/*
* Copyright 2015-2016 OpenCB
*
* Licensed 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.opencb.opencga.server.rest;
import com.fasterxml.jackson.databind.ObjectReader;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletContainer;
import org.opencb.commons.datastore.core.QueryResponse;
import org.opencb.commons.datastore.core.QueryResult;
import org.opencb.opencga.catalog.monitor.executors.old.ExecutorManager;
import org.opencb.opencga.analysis.storage.AnalysisFileIndexer;
import org.opencb.opencga.catalog.CatalogManagerExternalResource;
import org.opencb.opencga.catalog.CatalogManagerTest;
import org.opencb.opencga.core.common.Config;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
/**
* Created by ralonso on 9/25/14.
*/
public class WSServerTestUtils {
private Server server;
private String restURL;
private Path configDir;
public static final int PORT = 8889;
public static final String DATABASE_PREFIX = "opencga_server_test_";
private CatalogManagerExternalResource catalogManagerResource;
public static <T> QueryResponse<T> parseResult(String json, Class<T> clazz) throws IOException {
// ObjectReader reader = OpenCGAWSServer.jsonObjectMapper.reader(OpenCGAWSServer.jsonObjectMapper.getTypeFactory().constructParametrizedType(
// QueryResponse.class, QueryResponse.class, OpenCGAWSServer.jsonObjectMapper.getTypeFactory().constructParametrizedType(QueryResult.class, QueryResult.class, clazz)));
// return reader.readValue(json);
ObjectReader reader = OpenCGAWSServer.jsonObjectMapper.reader(
OpenCGAWSServer.jsonObjectMapper.getTypeFactory().constructParametrizedType(QueryResponse.class, QueryResult.class, clazz)
);
return reader.readValue(json);
}
public void initServer() throws Exception {
ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.packages(false, "org.opencb.opencga.server.rest");
resourceConfig.property("jersey.config.server.provider.packages", "org.opencb.opencga.server.ws;io.swagger.jersey.listing;com.jersey.jaxb;com.fasterxml.jackson.jaxrs.json");
resourceConfig.property("jersey.config.server.provider.classnames", "org.glassfish.jersey.media.multipart.MultiPartFeature");
// Registering MultiPart class for POST forms
resourceConfig.register(MultiPartFeature.class);
ServletContainer sc = new ServletContainer(resourceConfig);
ServletHolder sh = new ServletHolder("opencga", sc);
server = new Server(PORT);
ServletContextHandler context = new ServletContextHandler(server, null, ServletContextHandler.SESSIONS);
context.addServlet(sh, "/opencga/webservices/rest/*");
context.setInitParameter("config-dir", configDir.toFile().toString());
System.err.println("Starting server");
server.start();
System.err.println("Waiting for conections");
System.out.println(server.getState());
restURL = server.getURI().resolve("/opencga/webservices/rest/").resolve("v1/").toString();
System.out.println(server.getURI());
}
public void shutdownServer() throws Exception {
System.err.println("Shutdown server");
server.stop();
server.join();
catalogManagerResource.after();
}
public WebTarget getWebTarget() {
Client webClient = ClientBuilder.newClient();
webClient.register(MultiPartFeature.class);
return webClient.target(restURL);
}
public void setUp() throws Exception {
//Create test environment. Override OpenCGA_Home
Path opencgaHome = Paths.get("/tmp/opencga-server-test");
configDir = opencgaHome.resolve("conf");
System.setProperty("app.home", opencgaHome.toString());
Config.setOpenCGAHome(opencgaHome.toString());
Files.createDirectories(opencgaHome);
Files.createDirectories(opencgaHome.resolve("conf"));
CatalogManagerTest catalogManagerTest = new CatalogManagerTest();
catalogManagerResource = catalogManagerTest.catalogManagerResource;
catalogManagerResource.before();
catalogManagerResource.getConfiguration().serialize(new FileOutputStream(configDir.resolve("configuration.yml").toFile()));
InputStream inputStream = new ByteArrayInputStream((ExecutorManager.OPENCGA_ANALYSIS_JOB_EXECUTOR + "=LOCAL" + "\n" +
AnalysisFileIndexer.OPENCGA_ANALYSIS_STORAGE_DATABASE_PREFIX + "=" + DATABASE_PREFIX).getBytes());
Files.copy(inputStream, opencgaHome.resolve("conf").resolve("analysis.properties"), StandardCopyOption.REPLACE_EXISTING);
inputStream = OpenCGAWSServerTest.class.getClassLoader().getResourceAsStream("storage-configuration.yml");
Files.copy(inputStream, opencgaHome.resolve("conf").resolve("storage-configuration.yml"), StandardCopyOption.REPLACE_EXISTING);
catalogManagerTest.setUpCatalogManager(catalogManagerResource.getCatalogManager()); //Clear and setup CatalogDatabase
OpenCGAWSServer.catalogManager = catalogManagerResource.getCatalogManager();
}
}