package forklift.deployment;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import forklift.ForkliftTest;
import com.google.common.io.Files;
import org.junit.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;
public class DeploymentWatchTest {
@Test
public void watch()
throws IOException {
final File dir = Files.createTempDir();
try {
// Create a new deployment jar.
final File file = File.createTempFile("test", ".jar", dir);
Files.copy(ForkliftTest.testJar(), file);
FileDeployment fileDeployment = new FileDeployment();
fileDeployment.setDeployedFile(file);
final AtomicBoolean deploy = new AtomicBoolean(true);
DeploymentWatch watch = new DeploymentWatch(dir, new DeploymentEvents() {
@Override
public void onDeploy(Deployment deployment) {
assertTrue(deploy.get());
assertEquals(fileDeployment, deployment);
}
@Override
public void onUndeploy(Deployment deployment) {
assertFalse(deploy.get());
assertEquals(fileDeployment, deployment);
}
});
watch.run();
deploy.set(false);
file.delete();
watch.run();
} finally {
dir.delete();
}
}
@Test
public void loadProperties()
throws IOException {
final File dir = Files.createTempDir();
try {
// Create a new properties files.
final File file = File.createTempFile("test", ".properties", dir);
FileOutputStream fos = new FileOutputStream(file);
final String props = "db=prod\ndeploy=prod\nusername=mysql\npassword=mysql\n";
fos.write(props.getBytes());
fos.close();
FileDeployment fileDeployment = new FileDeployment();
fileDeployment.setDeployedFile(file);
final AtomicBoolean deploy = new AtomicBoolean(true);
DeploymentWatch watch = new DeploymentWatch(dir, new DeploymentEvents() {
@Override
public void onDeploy(Deployment deployment) {
assertTrue(deploy.get());
assertEquals(fileDeployment, deployment);
}
@Override
public void onUndeploy(Deployment deployment) {
assertFalse(deploy.get());
assertEquals(fileDeployment, deployment);
}
});
watch.run();
deploy.set(false);
file.delete();
watch.run();
} finally {
dir.delete();
}
}
@Test
public void propsWithComment()
throws IOException {
final File dir = Files.createTempDir();
try {
// Create a new properties files.
final File file = File.createTempFile("test", ".properties", dir);
FileOutputStream fos = new FileOutputStream(file);
final String props = "db=prod\n#Db Creds\n\ndb.username=mysql\ndb.password=mysql\n";
fos.write(props.getBytes());
fos.close();
FileDeployment fileDeployment = new FileDeployment();
fileDeployment.setDeployedFile(file);
final AtomicBoolean deploy = new AtomicBoolean(true);
DeploymentWatch watch = new DeploymentWatch(dir, new DeploymentEvents() {
@Override
public void onDeploy(Deployment deployment) {
assertTrue(deploy.get());
assertEquals(fileDeployment, deployment);
}
@Override
public void onUndeploy(Deployment deployment) {
assertFalse(deploy.get());
assertEquals(fileDeployment, deployment);
}
});
watch.run();
deploy.set(false);
file.delete();
watch.run();
} finally {
dir.delete();
}
}
@Test
public void badProps()
throws IOException {
final File dir = Files.createTempDir();
try {
// Create a new properties files.
final File file = File.createTempFile("test", ".properties", dir);
FileOutputStream fos = new FileOutputStream(file);
// Create a bad props file to make sure we handle them.
final String props = "db:prod\n\\u00sx=blah\nusername mysql\npassword=mysql\n";
fos.write(props.getBytes());
fos.close();
FileDeployment fileDeployment = new FileDeployment();
fileDeployment.setDeployedFile(file);
final AtomicBoolean deploy = new AtomicBoolean(true);
DeploymentWatch watch = new DeploymentWatch(dir, new DeploymentEvents() {
@Override
public void onDeploy(Deployment deployment) {
assertTrue(deploy.get());
assertEquals(fileDeployment, deployment);
}
@Override
public void onUndeploy(Deployment deployment) {
assertFalse(deploy.get());
assertEquals(fileDeployment, deployment);
}
});
watch.run();
deploy.set(false);
file.delete();
watch.run();
} finally {
dir.delete();
}
}
}