
#    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.
#-standalone: target/index.xml

-runtrace = true

-target = \
    org.osgi.test.cases.remoteserviceadmin

-runproperties = \
    report="true", \
    osgi.resolverMode="strict"
    rsa.ct.timeout="300000", \
    rsa.ct.timeout.factor="3"
#    org.osgi.test.cases.remoteserviceadmin.system.packages.extra="junit.framework;version=3.8", \
#    org.osgi.test.cases.remoteserviceadmin.bundles="jar/osgi.cmpn-5.0.0.jar,jar/org.osgi.impl.service.log-1.3.2.jar,jar/org.apache.cxf.dosgi.singlebundle-1.3.1.jar,jar/org.apache.cxf.dosgi.discovery.server.config-1.2.0.jar", \
#    org.osgi.test.cases.remoteserviceadmin.serverconfig="service.exported.configs,org.apache.cxf.ws.port", \
#    service.exported.configs="org.apache.cxf.ws", \
#    org.apache.cxf.ws.port="@@FREE_PORT@@"

-runvm = \
    -Xmx512m, -XX:MaxPermSize=350m

-runsystempackages=javax.xml.stream; version=1.0, javax.xml.stream.events; version=1.0, javax.xml.stream.util; version=1.0
-runfw: org.eclipse.osgi;version='[3.8.0.v20120529-1548,3.8.0.v20120529-1548]'
-runee: JavaSE-1.8
-runrequires: \
	osgi.identity;filter:='(osgi.identity=org.osgi.test.cases.remoteserviceadmin)',\
	osgi.identity;filter:='(osgi.identity=org.apache.aries.rsa.topology-manager)',\
	osgi.identity;filter:='(osgi.identity=org.ops4j.pax.logging.pax-logging-service)'
	
-runblacklist: \
	osgi.identity;filter:='(osgi.identity=osgi.cmpn)',\
	osgi.identity;filter:='(osgi.identity=slf4j.api)'
-runbundles: \
	org.apache.aries.rsa.core;version='[1.10.0,1.10.1)',\
	org.apache.aries.rsa.discovery.config;version='[1.10.0,1.10.1)',\
	org.apache.aries.rsa.provider.tcp;version='[1.10.0,1.10.1)',\
	org.apache.aries.rsa.spi;version='[1.10.0,1.10.1)',\
	org.apache.aries.rsa.topology-manager;version='[1.10.0,1.10.1)',\
	org.apache.felix.configadmin;version='[1.8.0,1.8.1)',\
	org.apache.felix.eventadmin;version='[1.4.2,1.4.3)',\
	org.apache.servicemix.bundles.junit;version='[3.8.2,3.8.3)',\
	org.osgi.test.cases.remoteserviceadmin;version='[5.0.0,5.0.1)',\
	org.ops4j.pax.logging.pax-logging-api;version='[1.8.5,1.8.6)',\
	org.ops4j.pax.logging.pax-logging-service;version='[1.8.5,1.8.6)'
