| /**************************************************************************** |
| * 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<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(); |
| } |
| |
| } |