package cloudone.cumulonimbus.persistence;
import cloudone.ServiceFullName;
import cloudone.cumulonimbus.ServiceRegistryService;
import cloudone.cumulonimbus.ServiceRegistryServiceTest;
import cloudone.cumulonimbus.model.Cluster;
import cloudone.cumulonimbus.model.RegisteredRuntime;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.nio.file.Files;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* @author Martin Mares (martin.mares at oracle.com)
*/
public class ServiceRegistryPersistenceTest {
private File dir;
@Before
public void setUp() throws Exception {
dir = Files.createTempDirectory("unit_cumul").toFile();
}
@After
public void tearDown() throws Exception {
if (dir != null) {
deleteDirectory(dir);
}
}
public static boolean deleteDirectory(File directory) {
if(directory.exists()){
File[] files = directory.listFiles();
if(null!=files){
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
deleteDirectory(files[i]);
}
else {
files[i].delete();
}
}
}
}
return(directory.delete());
}
@Test
public void testStore() throws Exception {
ServiceRegistryService service = ServiceRegistryServiceTest.getService();
ServiceRegistryPersistence persistence = new ServiceRegistryPersistence(new File(dir, "strg.json"), service, true);
service.addRegistrationListener(persistence);
Map<String, Integer> apps = new HashMap<>();
apps.put("one", 200);
apps.put("two", 201);
RegisteredRuntime rr1 = service.register(new ServiceFullName("a", "b", "1"), 100, apps);
apps.put("one", 202);
apps.put("two", 203);
apps.put("three", 203);
RegisteredRuntime rr2 = service.register(new ServiceFullName("a", "b", "2"), 101, apps);
apps.clear();
apps.put("foo", 204);
apps.put("bar", 205);
RegisteredRuntime rr3 = service.register(new ServiceFullName("a", "b", "1"), 102, apps);
persistence.store();
Collection<Cluster> clusters = persistence.loadClusters();
assertNotNull(clusters);
assertEquals(2, clusters.size());
//Find cluster
Cluster cl = null;
for (Cluster cluster : clusters) {
if ((new ServiceFullName("a", "b", "1")).equals(cluster.getFullName())) {
cl = cluster;
break;
}
}
assertNotNull(cl);
assertNotNull(cl.getRuntimes());
assertEquals(2, cl.getRuntimes().size());
//Find runtime
RegisteredRuntime rr = null;
for (RegisteredRuntime registeredRuntime : cl.getRuntimes()) {
if (registeredRuntime.getInstanceId() == rr1.getInstanceId()) {
rr = registeredRuntime;
break;
}
}
assertNotNull(rr);
assertEquals(2, rr.getApplicationPorts().size());
assertEquals(new Integer(201), rr.getApplicationPorts().get("two"));
}
}