/* * Copyright (C) 2012-2015 DataStax Inc. * * 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 com.datastax.driver.osgi; import com.datastax.driver.core.CCMBridge; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.ProtocolOptions; import com.datastax.driver.core.TestUtils; import com.google.common.collect.Lists; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.options.CompositeOption; import org.ops4j.pax.exam.options.MavenArtifactProvisionOption; import org.ops4j.pax.exam.options.UrlProvisionOption; import org.ops4j.pax.exam.util.PathUtils; import java.util.List; import static org.ops4j.pax.exam.CoreOptions.*; public class BundleOptions { public static UrlProvisionOption driverBundle() { return driverBundle(false); } public static UrlProvisionOption driverBundle(boolean useShaded) { String classifier = useShaded ? "-shaded" : ""; return bundle("reference:file:" + PathUtils.getBaseDir() + "/../../driver-core/target/cassandra-driver-core-" + Cluster.getDriverVersion() + classifier + ".jar"); } public static UrlProvisionOption mappingBundle() { return bundle("reference:file:" + PathUtils.getBaseDir() + "/../../driver-mapping/target/cassandra-driver-mapping-" + Cluster.getDriverVersion() + ".jar"); } public static UrlProvisionOption extrasBundle() { return bundle("reference:file:" + PathUtils.getBaseDir() + "/../../driver-extras/target/cassandra-driver-extras-" + Cluster.getDriverVersion() + ".jar"); } public static MavenArtifactProvisionOption guavaBundle() { return mavenBundle("com.google.guava", "guava", getVersion("guava.version")); } public static CompositeOption lz4Bundle() { return new CompositeOption() { @Override public Option[] getOptions() { return options( systemProperty("cassandra.compression").value(ProtocolOptions.Compression.LZ4.name()), mavenBundle("net.jpountz.lz4", "lz4", getVersion("lz4.version")) ); } }; } public static CompositeOption snappyBundle() { return new CompositeOption() { @Override public Option[] getOptions() { return options( systemProperty("cassandra.compression").value(ProtocolOptions.Compression.SNAPPY.name()), mavenBundle("org.xerial.snappy", "snappy-java", getVersion("snappy.version")) ); } }; } public static CompositeOption hdrHistogramBundle() { return new CompositeOption() { @Override public Option[] getOptions() { return options( systemProperty("cassandra.usePercentileSpeculativeExecutionPolicy").value("true"), mavenBundle("org.hdrhistogram", "HdrHistogram", getVersion("hdr.version")) ); } }; } public static CompositeOption nettyBundles() { final String nettyVersion = getVersion("netty.version"); return new CompositeOption() { @Override public Option[] getOptions() { return options( mavenBundle("io.netty", "netty-buffer", nettyVersion), mavenBundle("io.netty", "netty-codec", nettyVersion), mavenBundle("io.netty", "netty-common", nettyVersion), mavenBundle("io.netty", "netty-handler", nettyVersion), mavenBundle("io.netty", "netty-transport", nettyVersion) ); } }; } public static UrlProvisionOption mailboxBundle() { return bundle("reference:file:" + PathUtils.getBaseDir() + "/target/classes"); } public static CompositeOption defaultOptions() { return new CompositeOption() { @Override public Option[] getOptions() { List<Option> options = Lists.newArrayList( // Delegate javax.security.cert to the parent classloader. javax.security.cert.X509Certificate is used in // io.netty.util.internal.EmptyArrays, but not directly by the driver. bootDelegationPackage("javax.security.cert"), systemProperty("cassandra.version").value(CCMBridge.getGlobalCassandraVersion().toString()), systemProperty("cassandra.contactpoints").value(TestUtils.IP_PREFIX + 1), systemProperty("logback.configurationFile").value("file:" + PathUtils.getBaseDir() + "/src/test/resources/logback.xml"), mavenBundle("org.slf4j", "slf4j-api", getVersion("slf4j.version")), mavenBundle("ch.qos.logback", "logback-classic", getVersion("logback.version")), mavenBundle("ch.qos.logback", "logback-core", getVersion("logback.version")), mavenBundle("io.dropwizard.metrics", "metrics-core", getVersion("metrics.version")), mavenBundle("org.testng", "testng", getVersion("testng.version")), systemPackages("org.testng", "org.junit", "org.junit.runner", "org.junit.runner.manipulation", "org.junit.runner.notification", "com.jcabi.manifests") ); if (CCMBridge.isWindows()) { // Workaround for Felix + Windows Server 2012. Felix does not properly alias 'windowsserver2012' // to 'win32', because of this some native libraries may fail to load. To work around this, force // the os.name property to win32 if on a windows platform. // See: https://issues.apache.org/jira/browse/FELIX-5184 options.add(systemProperty("os.name").value("win32")); } return options.toArray(new Option[options.size()]); } }; } private static String getVersion(String propertyName) { String value = System.getProperty(propertyName); if (value == null) { throw new IllegalArgumentException(propertyName + " system property is not set."); } return value; } }