/**************************************************************************** * Copyright (c) 2010 Composent, Inc. and others. * * This program and the accompanying materials are made * available under the terms of the Eclipse Public License 2.0 * which is available at https://www.eclipse.org/legal/epl-2.0/ * * Contributors: * Composent, Inc. - initial API and implementation * * SPDX-License-Identifier: EPL-2.0 *****************************************************************************/ 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.BundleContext; import org.osgi.framework.Constants; import org.osgi.framework.FrameworkUtil; 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(getContext(),IDiscoveryLocator.class.getName(), null); serviceTracker.open(); IDiscoveryLocator result = (IDiscoveryLocator) serviceTracker.getService(); serviceTracker.close(); return result; } protected IDiscoveryAdvertiser getDiscoveryAdvertiser() { ServiceTracker serviceTracker = new ServiceTracker(getContext(),IDiscoveryAdvertiser.class.getName(), null); serviceTracker.open(); IDiscoveryAdvertiser result = (IDiscoveryAdvertiser) serviceTracker.getService(); serviceTracker.close(); return result; } protected BundleContext getContext() { return FrameworkUtil.getBundle(getClass()).getBundleContext(); } 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 props = new HashMap(); // Add required OSGi properties addRequiredOSGiProperties(props); createECFRemoteServiceId(props); // Add extra properties addExtraProperties(props); return new EndpointDescription(props); } protected EndpointDescription createFullEndpointDescription() { Map props = new HashMap(); // 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 props) { props.put(EXTRA_PROPERTY1, "com.foo.bar.propertyvalue1"); props.put(EXTRA_PROPERTY2, "com.foo.bar.propertyvalue2"); } protected EndpointDescription createBadOSGiEndpointDescrption() throws Exception { Map props = new HashMap(); // 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 props = new HashMap(); // 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 props) { return getIDFactory().createStringID(DEFAULT_ENDPOINT_ID); } protected ID createECFTargetID(Map props) { return getIDFactory().createStringID(DEFAULT_ECF_TARGET_ID); } protected void createECFRemoteServiceId(Map props) { props.put(org.eclipse.ecf.remoteservice.Constants.SERVICE_ID, new Long(101)); } protected void addRequiredOSGiProperties(Map 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 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 props) { return DEFAULT_RSFILTER; } protected ID[] createECFIDFilterIDs(Map 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(); } }