/* * Copyright 2012 NGDATA nv * * 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.lilyproject.testclientfw; import java.io.IOException; import java.net.MalformedURLException; import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.zookeeper.KeeperException; import org.lilyproject.cli.OptionUtil; import org.lilyproject.client.LilyClient; import org.lilyproject.client.NoServersException; import org.lilyproject.repository.api.IdGenerator; import org.lilyproject.repository.api.LRepository; import org.lilyproject.repository.api.LTable; import org.lilyproject.repository.api.RepositoryException; import org.lilyproject.repository.api.TypeManager; import org.lilyproject.util.io.Closer; import org.lilyproject.util.zookeeper.ZkConnectException; public abstract class BaseRepositoryTestTool extends BaseTestTool { private static final String DEFAULT_SOLR_URL = "http://localhost:8983/solr"; private static final String DEFAULT_SOLRCLOUD_URL = "localhost:2181/solr"; protected String solrUrl; private Option solrOption; private Option solrCloudOption; private Option repositoryOption; protected SolrServer solrServer; protected LilyClient lilyClient; protected String repositoryName; protected LRepository repository; protected LTable table; protected IdGenerator idGenerator; protected TypeManager typeManager; protected String NS = "tests"; protected boolean useSolrCloud; @Override @SuppressWarnings("static-access") public List<Option> getOptions() { List<Option> options = super.getOptions(); solrOption = OptionBuilder .withArgName("URL") .hasArg() .withDescription("URL of Solr. If using cloud mode then use the zookeeper connection string for Solr") .withLongOpt("solr") .create("s"); solrCloudOption = OptionBuilder .withDescription("Connect to a Solr cloud server") .withLongOpt("solrcloud") .create("sc"); repositoryOption = OptionBuilder .withArgName("repository") .hasArg() .withDescription("Repository name, if not specified the default repository is used") .withLongOpt("repository") .create(); options.add(solrOption); options.add(solrCloudOption); options.add(repositoryOption); return options; } @Override protected int processOptions(CommandLine cmd) throws Exception { int result = super.processOptions(cmd); if (result != 0) { return result; } useSolrCloud = cmd.hasOption(solrCloudOption.getOpt()); if (!cmd.hasOption(solrOption.getOpt())) { solrUrl = useSolrCloud ? DEFAULT_SOLRCLOUD_URL : DEFAULT_SOLR_URL; } else { solrUrl = useSolrCloud ? zkConnectionString + "/solr": cmd.getOptionValue(solrOption.getOpt()); } repositoryName = OptionUtil.getStringOption(cmd, repositoryOption, "default"); return 0; } @Override protected void cleanup() { Closer.close(lilyClient); super.cleanup(); } public void setupLily() throws IOException, ZkConnectException, NoServersException, InterruptedException, KeeperException, RepositoryException { lilyClient = new LilyClient(getZooKeeper()); repository = lilyClient.getRepository(repositoryName); table = repository.getDefaultTable(); idGenerator = repository.getIdGenerator(); typeManager = repository.getTypeManager(); } public void setupSolr() throws MalformedURLException { if (useSolrCloud) { System.out.println("Using SolrCloud instance with ZooKeeper " + solrUrl); solrServer = new CloudSolrServer(solrUrl); } else { System.out.println("Using Solr instance at " + solrUrl); ThreadSafeClientConnManager connectionManager = new ThreadSafeClientConnManager(); connectionManager.setDefaultMaxPerRoute(5); connectionManager.setMaxTotal(50); HttpClient httpClient = new DefaultHttpClient(connectionManager); solrServer = new HttpSolrServer(solrUrl, httpClient); } } }