/**
 * 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.apache.aries.cdi.test.cases;

import javax.enterprise.inject.spi.BeanManager;

import org.osgi.framework.Bundle;
import org.osgi.util.tracker.ServiceTracker;

public class CdiExtenderTests extends AbstractTestCase {

	public void testStopExtender() throws Exception {
		Bundle cdiExtenderBundle = getCdiExtenderBundle();

		ServiceTracker<BeanManager,BeanManager> serviceTracker = getServiceTracker(cdiBundle);

		try {
			assertNotNull(serviceTracker.waitForService(timeout));

			cdiExtenderBundle.stop();

			assertTrue(serviceTracker.isEmpty());

			cdiExtenderBundle.start();

			assertNotNull(serviceTracker.waitForService(timeout));
		}
		finally {
			serviceTracker.close();
		}
	}

}