blob: 0738efdd88236f57ec4d77ea7cf7f09eecf9e11f [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.sling.paxexam.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerClass;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
/** Verify that we get a working Sling launchpad with what SlingPaxOptions provide */
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class SlingSetupTest {
/** Use a released launchpad for this example */
public static final String SLING_LAUNCHPAD_VERSION = "6";
@Inject
private BundleContext bundleContext;
@org.ops4j.pax.exam.Configuration
public Option[] config() {
return SlingPaxOptions.defaultLaunchpadOptions(SLING_LAUNCHPAD_VERSION).getOptions();
}
private void assertBundleActive(String symbolicName) {
assertEquals("Expecting bundle to be active:" + symbolicName, Bundle.ACTIVE, getBundleState(symbolicName));
}
private boolean isFragment(Bundle b) {
return b.getHeaders().get("Fragment-Host") != null;
}
private Bundle getBundle(String symbolicName) {
for(Bundle b : bundleContext.getBundles()) {
if(symbolicName.equals(b.getSymbolicName())) {
return b;
}
}
return null;
}
/** @return bundle state, UNINSTALLED if absent */
private int getBundleState(String symbolicName) {
return getBundleState(getBundle(symbolicName));
}
/** @return bundle state, UNINSTALLED if absent, ACTIVE */
private int getBundleState(Bundle b) {
if(b == null) {
return Bundle.UNINSTALLED;
} else if(isFragment(b)) {
return Bundle.ACTIVE;
} else {
return b.getState();
}
}
@Test
public void testBundleContext() {
assertNotNull("Expecting BundleContext to be set", bundleContext);
}
@Test
public void testSlingBundles() {
final String [] bundles = {
"org.apache.sling.adapter",
"org.apache.sling.api",
"org.apache.sling.auth.core",
"org.apache.sling.auth.form",
"org.apache.sling.auth.openid",
"org.apache.sling.auth.selector",
"org.apache.sling.bundleresource.impl",
"org.apache.sling.commons.classloader",
"org.apache.sling.commons.json",
"org.apache.sling.commons.log",
"org.apache.sling.commons.mime",
"org.apache.sling.commons.osgi",
"org.apache.sling.commons.scheduler",
"org.apache.sling.commons.threads",
"org.apache.sling.engine",
"org.apache.sling.event",
"org.apache.sling.extensions.explorer",
"org.apache.sling.extensions.threaddump",
"org.apache.sling.extensions.webconsolebranding",
"org.apache.sling.extensions.webconsolesecurityprovider",
"org.apache.sling.fsresource",
"org.apache.sling.installer.core",
"org.apache.sling.installer.provider.file",
"org.apache.sling.installer.provider.jcr",
"org.apache.sling.jcr.api",
"org.apache.sling.jcr.base",
"org.apache.sling.jcr.classloader",
"org.apache.sling.jcr.contentloader",
"org.apache.sling.jcr.jackrabbit.accessmanager",
"org.apache.sling.jcr.jackrabbit.server",
"org.apache.sling.jcr.jackrabbit.usermanager",
"org.apache.sling.jcr.ocm",
"org.apache.sling.jcr.resource",
"org.apache.sling.jcr.webconsole",
"org.apache.sling.launchpad.content",
"org.apache.sling.launchpad.installer",
"org.apache.sling.scripting.api",
"org.apache.sling.scripting.core",
"org.apache.sling.scripting.javascript",
"org.apache.sling.scripting.jsp",
"org.apache.sling.scripting.jsp.taglib",
"org.apache.sling.servlets.get",
"org.apache.sling.servlets.post",
"org.apache.sling.servlets.resolver",
"org.apache.sling.settings"
};
final List<String> missing = new ArrayList<String>();
for(String bundleName : bundles) {
final int state = getBundleState(bundleName);
if(state != Bundle.ACTIVE) {
missing.add(bundleName + " (state=" + state + ")");
}
}
if(!missing.isEmpty()) {
fail("Some required bundles are missing or inactive:" + missing);
}
}
@Test
public void testSlingServices() {
assertBundleActive("org.apache.sling.commons.mime");
assertBundleActive("org.apache.sling.engine");
final String [] services = {
"org.apache.sling.engine.SlingRequestProcessor",
"org.apache.sling.commons.mime.MimeTypeService",
"org.apache.sling.jcr.api.SlingRepository"
};
final List<String> missing = new ArrayList<String>();
for(String svc : services) {
final ServiceReference<?> ref = bundleContext.getServiceReference(svc);
if(ref == null) {
missing.add(svc);
} else {
bundleContext.ungetService(ref);
}
}
if(!missing.isEmpty()) {
fail("Some required services are missing:" + missing);
}
}
}