/*
* Copyright 2008 Alin Dreghiciu.
*
* Licensed 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.ops4j.pax.exam.spi.container;
/**
* Management of an OSGi framework that can be used as a integration test container.
*
* @author Alin Dreghiciu (adreghiciu@gmail.com)
* @since 0.3.0, December 09, 2008
*/
public interface TestContainer
{
<T> T getService( Class<T> serviceType )
throws TestContainerException;
<T> T getService( Class<T> serviceType, long timeoutInMillis )
throws TestContainerException;
long installBundle( String bundleUrl )
throws TestContainerException;
long installBundle( String bundleLocation, byte[] bundle )
throws TestContainerException;
void startBundle( long bundleId )
throws TestContainerException;
/**
* Sets the start level for a bundle.
*
* @param bundleId bundle id
* @param startLevel start level
*
* @throws TestContainerException if startlevel cannot be set
*/
void setBundleStartLevel( long bundleId, int startLevel )
throws TestContainerException;
/**
* Starts the test container.
*
* @throws TimeoutException - if timeout occured and the test container cannot be started
*/
void start()
throws TimeoutException;
/**
* Stops the test container.
*
* @throws TimeoutException - if timeout occured and the test container cannot be stopped
*/
void stop()
throws TimeoutException;
/**
* Waits for a bundle to be in a certain state and returns.
*
* @param bundleId bundle id
* @param state expected state
* @param timeoutInMillis max time to wait for state
*
* @throws TimeoutException - if timeout occured and expected state has not being reached
*/
void waitForState( long bundleId, int state, long timeoutInMillis )
throws TimeoutException;
}