/*
* 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.test.deploy;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.rioproject.opstring.OperationalString;
import org.rioproject.opstring.OperationalStringManager;
import org.rioproject.deploy.ServiceBeanInstance;
import org.rioproject.cybernode.Cybernode;
import org.rioproject.test.RioTestRunner;
import org.rioproject.test.ServiceMonitor;
import org.rioproject.test.SetTestManager;
import org.rioproject.test.TestManager;
import org.rioproject.test.simple.Simple;
import java.io.File;
/**
* Tests simple deploy scenarios
*/
@RunWith(RioTestRunner.class)
public class SimpleDeployTest {
@SetTestManager
static TestManager testManager;
Cybernode cybernode;
@Before
public void setup() {
cybernode = (Cybernode)testManager.waitForService(Cybernode.class);
}
@Test
public void testSimple() {
Assert.assertNotNull(testManager);
Assert.assertNotNull(cybernode);
Throwable thrown = null;
try {
/* Count the generated groovy config files in /tmp. We want to
* make sure that if we generate a temp config file it is removed*/
int configFilesInTmp = countTempConfigFiles();
OperationalStringManager mgr = testManager.deploy();
Assert.assertNotNull("Expected non-null OperationalStringManager", mgr);
OperationalString opstring = mgr.getOperationalString();
Assert.assertNotNull(opstring);
Assert.assertEquals(1, opstring.getServices().length);
testManager.waitForDeployment(mgr);
ServiceBeanInstance[] instances =
cybernode.getServiceBeanInstances(opstring.getServices()[0]);
Assert.assertEquals(1, instances.length);
Simple simple = (Simple)instances[0].getService();
Assert.assertEquals("Hello visitor : 1", simple.hello("hi"));
Assert.assertEquals(configFilesInTmp, countTempConfigFiles());
testManager.undeploy(opstring.getName());
} catch(Exception e) {
thrown = e;
e.printStackTrace();
}
Assert.assertNull("Should not have thrown an exception", thrown);
}
@Test
public void testSimpleIncrement() {
Assert.assertNotNull(testManager);
Assert.assertNotNull(cybernode);
Throwable thrown = null;
try {
OperationalStringManager mgr = testManager.deploy();
Assert.assertNotNull("Expected non-null OperationalStringManager", mgr);
OperationalString opstring = mgr.getOperationalString();
Assert.assertNotNull(opstring);
Assert.assertEquals(1, opstring.getServices().length);
testManager.waitForDeployment(mgr);
ServiceBeanInstance[] instances =
cybernode.getServiceBeanInstances(opstring.getServices()[0]);
Assert.assertEquals(1, instances.length);
mgr.increment(opstring.getServices()[0], true, null);
ServiceMonitor<Simple> sMon =
new ServiceMonitor<Simple>(testManager.getServiceDiscoveryManager(), Simple.class);
sMon.waitFor(2);
instances =
cybernode.getServiceBeanInstances(opstring.getServices()[0]);
Assert.assertEquals(2, instances.length);
for(ServiceBeanInstance sbi : instances) {
Simple h = (Simple)sbi.getService();
Assert.assertEquals("Hello visitor : 1", h.hello("hi"));
}
testManager.undeploy(opstring.getName());
} catch(Exception e) {
thrown = e;
e.printStackTrace();
}
Assert.assertNull("Should not have thrown an exception", thrown);
}
@Test
public void testSimpleDecrement() {
Assert.assertNotNull(testManager);
Throwable thrown = null;
try {
OperationalStringManager mgr = testManager.deploy();
Assert.assertNotNull("Expected non-null OperationalStringManager", mgr);
OperationalString opstring = mgr.getOperationalString();
Assert.assertNotNull(opstring);
Assert.assertEquals(1, opstring.getServices().length);
testManager.waitForDeployment(mgr);
ServiceBeanInstance[] instances =
cybernode.getServiceBeanInstances(opstring.getServices()[0]);
Assert.assertEquals(1, instances.length);
Simple simple = (Simple)instances[0].getService();
Assert.assertEquals("Hello visitor : 1", simple.hello("hi"));
mgr.decrement(instances[0], true, true);
ServiceMonitor<Simple> sMon =
new ServiceMonitor<Simple>(testManager.getServiceDiscoveryManager(), Simple.class);
sMon.waitFor(0);
instances =
cybernode.getServiceBeanInstances(opstring.getServices()[0]);
Assert.assertEquals(0, instances.length);
testManager.undeploy(opstring.getName());
} catch(Exception e) {
thrown = e;
e.printStackTrace();
}
Assert.assertNull("Should not have thrown an exception", thrown);
}
private int countTempConfigFiles() {
int count = 0;
File tmpDir = new File(System.getProperty("java.io.tmpdir"));
for(String s : tmpDir.list()) {
if(s.endsWith(".groovy") || s.endsWith(".config"))
count++;
}
return count;
}
}