/*
* Copyright to the original author or authors.
*
* 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.rioproject.monitor.service;
import org.junit.Assert;
import net.jini.config.Configuration;
import net.jini.id.UuidFactory;
import org.junit.Test;
import org.rioproject.impl.config.DynamicConfiguration;
import org.rioproject.impl.opstring.OpString;
import org.rioproject.opstring.OperationalString;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
/**
* @author Dennis Reedy
*/
public class OpStringManagerControllerTest {
@Test
public void testAddRemove() throws Exception {
OperationalString opString = new OpString("test", null);
opString.addService(TestUtil.makeServiceElement("foo", "test"));
Configuration config = new DynamicConfiguration();
OpStringManagerController opStringManagerController = new OpStringManagerController();
opStringManagerController.setServiceProxy(TestUtil.createProvisionMonitor());
opStringManagerController.setEventProcessor(new ProvisionMonitorEventProcessor(config));
opStringManagerController.setConfig(config);
opStringManagerController.setServiceProvisioner(new ServiceProvisioner(config,
TestUtil.createProvisionMonitor(),
TestUtil.createEventHandler(),
null));
opStringManagerController.setUuid(UuidFactory.generate());
Map<String, Throwable> map = new HashMap<String, Throwable>();
OpStringManager manager = opStringManagerController.addOperationalString(opString, map, null, null, null);
Assert.assertNotNull(manager);
Assert.assertTrue(opStringManagerController.opStringExists(manager.getName()));
opStringManagerController.undeploy(manager, true);
String name = manager.getName();
manager = opStringManagerController.getOpStringManager(name);
Assert.assertNull(manager);
Assert.assertFalse(opStringManagerController.opStringExists(name));
}
@Test
public void concurrentCreationTest() throws ExecutionException, InterruptedException {
System.out.println("concurrentCreationTest\n----------------------");
OpStringManagerController opStringManagerController = new OpStringManagerController();
opStringManagerController.setConfig(new DynamicConfiguration());
OperationalString opString = new OpString("concurrent", null);
List<Future<OpStringManager>> futures = new ArrayList<Future<OpStringManager>>();
for(int i=0; i<100; i++) {
Callable<OpStringManager> deployer = new Deployer(opStringManagerController, opString);
FutureTask<OpStringManager> task = new FutureTask<OpStringManager>(deployer);
futures.add(task);
new Thread(task).start();
}
System.out.println("Created "+futures.size()+" threads to bang on one OpStringManagerController");
for(Future<OpStringManager> future : futures) {
OpStringManager opStringManager = future.get();
Assert.assertNotNull(opStringManager);
}
Assert.assertEquals(1, opStringManagerController.getOpStringManagers().length);
}
class Deployer implements Callable<OpStringManager> {
final OpStringManagerController opStringManagerController;
final OperationalString operationalString;
Deployer(OpStringManagerController opStringManagerController, OperationalString operationalString) {
this.opStringManagerController = opStringManagerController;
this.operationalString = operationalString;
}
public OpStringManager call() throws Exception {
OpStringManager opStringManager = null;
Map<String, Throwable> errorMap = new HashMap<String, Throwable>();
try {
opStringManager = opStringManagerController.addOperationalString(operationalString,
errorMap,
null,
TestUtil.createDeployAdmin(),
null);
} catch (Exception e) {
e.printStackTrace();
}
return opStringManager;
}
}
}