blob: 094e4ba0f2c16519b68f04eb22e77362c19f0037 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Composent, Inc. and others. All rights reserved. This
* program and the accompanying materials are made available under the terms of
* the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.tests.osgi.services.remoteserviceadmin;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.discovery.IDiscoveryAdvertiser;
import org.eclipse.ecf.discovery.IDiscoveryLocator;
import org.eclipse.ecf.discovery.IServiceInfo;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.DiscoveredEndpointDescription;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.EndpointDescription;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.IDiscoveredEndpointDescriptionFactory;
import org.eclipse.ecf.osgi.services.remoteserviceadmin.IServiceInfoFactory;
import org.eclipse.ecf.tests.ECFAbstractTestCase;
import org.osgi.framework.Constants;
import org.osgi.util.tracker.ServiceTracker;
public abstract class AbstractMetadataFactoryTest extends ECFAbstractTestCase {
protected static final String DEFAULT_SERVICE_INTF_PACKAGE = "com.foo";
protected static final String DEFAULT_SERVICE_INTF_VERSION = "3.0.0";
protected static final String DEFAULT_SERVICE_INTF = DEFAULT_SERVICE_INTF_PACKAGE + "." + "Foo";
protected static final String DEFAULT_ENDPOINT_ID = "ecftcp://localhost:3282/server";
protected static final String DEFAULT_SERVICE_IMPORTED_CONFIG = "ecf.generic.server";
protected static final String DEFAULT_SERVICE_INTENT1 = "test.intent.1";
protected static final String DEFAULT_SERVICE_INTENT2 = "test.intent.2";
protected static final String DEFAULT_ECF_TARGET_ID = "ecftcp://localhost:3333/server";
protected static final String DEFAULT_RSFILTER = "(&(key1=foo)(key2=foo2))";
protected static final String EXTRA_PROPERTY1 = "test.extra.prop.value.1";
protected static final String EXTRA_PROPERTY2 = "test.extra.prop.value.2";
protected IServiceInfoFactory serviceInfoFactory;
protected IDiscoveredEndpointDescriptionFactory endpointDescriptionFactory;
protected IDiscoveryAdvertiser discoveryAdvertiser;
protected IDiscoveryLocator discoveryLocator;
protected IDiscoveryLocator getDiscoveryLocator() {
ServiceTracker serviceTracker = new ServiceTracker(Activator.getDefault().getContext(),IDiscoveryLocator.class.getName(), null);
serviceTracker.open();
IDiscoveryLocator result = (IDiscoveryLocator) serviceTracker.getService();
serviceTracker.close();
return result;
}
protected IDiscoveryAdvertiser getDiscoveryAdvertiser() {
ServiceTracker serviceTracker = new ServiceTracker(Activator.getDefault().getContext(),IDiscoveryAdvertiser.class.getName(), null);
serviceTracker.open();
IDiscoveryAdvertiser result = (IDiscoveryAdvertiser) serviceTracker.getService();
serviceTracker.close();
return result;
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
serviceInfoFactory = null;
endpointDescriptionFactory = null;
discoveryAdvertiser = null;
discoveryLocator = null;
super.tearDown();
}
protected Object createOSGiObjectClass() {
return new String[] { DEFAULT_SERVICE_INTF };
}
protected String createOSGiEndpointFrameworkUUID() {
return UUID.randomUUID().toString();
}
protected String createOSGiEndpointId() {
return DEFAULT_ENDPOINT_ID;
}
protected Long createOSGiEndpointServiceId() {
return new Long(1);
}
protected EndpointDescription createRequiredEndpointDescription() {
Map<String,Object> props = new HashMap<String,Object>();
// Add required OSGi properties
addRequiredOSGiProperties(props);
createECFRemoteServiceId(props);
// Add extra properties
addExtraProperties(props);
return new EndpointDescription(props);
}
protected EndpointDescription createFullEndpointDescription() {
Map<String,Object> props = new HashMap<String,Object>();
// Add required OSGi properties
addRequiredOSGiProperties(props);
// Add full OSGi properties
addOptionalOSGiProperties(props);
// required ECF properties
// Add extra properties
addExtraProperties(props);
return new EndpointDescription(props);
}
protected void addExtraProperties(Map<String, Object> props) {
props.put(EXTRA_PROPERTY1, "com.foo.bar.propertyvalue1");
props.put(EXTRA_PROPERTY2, "com.foo.bar.propertyvalue2");
}
protected EndpointDescription createBadOSGiEndpointDescrption() throws Exception {
Map<String,Object> props = new HashMap<String,Object>();
// Add only ECF properties
// no OSGi properties
createECFRemoteServiceId(props);
// This should throw a runtime exception
return new EndpointDescription(props);
}
protected EndpointDescription createBadECFEndpointDescrption() throws Exception {
Map<String,Object> props = new HashMap<String,Object>();
// Add required OSGi properties
addRequiredOSGiProperties(props);
// Add full OSGi properties
addOptionalOSGiProperties(props);
// No ECF required properties
// This should throw a runtime exception
return new EndpointDescription(props);
}
protected String createOSGiServiceImportedConfig() {
return DEFAULT_SERVICE_IMPORTED_CONFIG;
}
protected ID createECFContainerID(Map<String,Object> props) {
return getIDFactory().createStringID(DEFAULT_ENDPOINT_ID);
}
protected ID createECFTargetID(Map<String,Object> props) {
return getIDFactory().createStringID(DEFAULT_ECF_TARGET_ID);
}
protected void createECFRemoteServiceId(Map<String,Object> props) {
props.put(org.eclipse.ecf.remoteservice.Constants.SERVICE_ID, new Long(101));
}
protected void addRequiredOSGiProperties(Map<String,Object> props) {
// OBJECTCLASS
props.put(Constants.OBJECTCLASS,createOSGiObjectClass());
// endpoint.service.id
props.put(org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_SERVICE_ID, createOSGiEndpointServiceId());
// endpoint.framework.id
props.put(org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_FRAMEWORK_UUID, createOSGiEndpointFrameworkUUID());
// endpoint.id
props.put(org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_ID, createOSGiEndpointId());
// service imported configs
props.put(org.osgi.service.remoteserviceadmin.RemoteConstants.SERVICE_IMPORTED_CONFIGS,createOSGiServiceImportedConfig());
}
protected void addOptionalOSGiProperties(Map<String,Object> props) {
props.put(org.osgi.service.remoteserviceadmin.RemoteConstants.SERVICE_INTENTS, createOSGiServiceIntents());
props.put(org.osgi.service.remoteserviceadmin.RemoteConstants.ENDPOINT_PACKAGE_VERSION_+DEFAULT_SERVICE_INTF_PACKAGE,DEFAULT_SERVICE_INTF_VERSION);
}
protected Object createOSGiServiceIntents() {
return new String[] { DEFAULT_SERVICE_INTENT1, DEFAULT_SERVICE_INTENT2 };
}
protected String createECFRSFilter(Map<String, Object> props) {
return DEFAULT_RSFILTER;
}
protected ID[] createECFIDFilterIDs(Map<String, Object> props) {
return new ID[] { getIDFactory().createGUID(), getIDFactory().createGUID() };
}
protected IServiceInfo createServiceInfoForDiscovery(EndpointDescription endpointDescription) {
return serviceInfoFactory.createServiceInfo(discoveryAdvertiser, endpointDescription);
}
protected org.osgi.service.remoteserviceadmin.EndpointDescription createEndpointDescriptionFromDiscovery(
IServiceInfo discoveredServiceInfo) {
DiscoveredEndpointDescription ded = endpointDescriptionFactory.createDiscoveredEndpointDescription(discoveryLocator, discoveredServiceInfo);
assertNotNull(ded);
return ded.getEndpointDescription();
}
}