/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.services;
import java.util.*;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.common.collect.Sets;
public class ServicesMetadataTest {
private static Set<ServiceMetadata> _controlNodeServices;
private static Set<ServiceMetadata> _extraNodeServices;
@BeforeClass
public static void populateServices() throws Exception {
ServiceMetadata apisvc = new ServiceMetadata();
apisvc.setName("apisvc");
apisvc.setPort(9080);
apisvc.setIsControlNodeService(true);
apisvc.setRoles("control");
ServiceMetadata syssvc = new ServiceMetadata();
syssvc.setName("syssvc");
syssvc.setPort(9998);
syssvc.setIsControlNodeService(true);
syssvc.setIsExtraNodeService(true);
syssvc.setRoles("control object");
ServiceMetadata datasvc = new ServiceMetadata();
datasvc.setName("datasvc");
datasvc.setPort(1001);
datasvc.setIsExtraNodeService(true);
datasvc.setRoles("object");
LinkedHashMap<String, ServiceMetadata> services = new LinkedHashMap<String,
ServiceMetadata>();
services.put(apisvc.getName(), apisvc);
services.put(syssvc.getName(), syssvc);
services.put(datasvc.getName(), datasvc);
RoleMetadata controlRole = new RoleMetadata();
controlRole.setName("control");
RoleMetadata dataRole = new RoleMetadata();
dataRole.setName("object");
LinkedHashMap<String, RoleMetadata> roles = new LinkedHashMap<String,
RoleMetadata>();
roles.put(controlRole.getName(), controlRole);
roles.put(dataRole.getName(), dataRole);
ServicesMetadata _servicesMetadata = new ServicesMetadata();
_servicesMetadata.setServiceMetadataMap(services);
_servicesMetadata.setRoleMetadataMap(roles);
_servicesMetadata.afterPropertiesSet();
}
@Test
public void testServicesOrder() {
Map<String, ServiceMetadata> services = ServicesMetadata.getServiceMetadataMap();
Assert.assertNotNull(services);
int cntr = 0;
for (String key : services.keySet()) {
switch (cntr++) {
case 0:
Assert.assertEquals(key, "apisvc");
break;
case 1:
Assert.assertEquals(key, "syssvc");
break;
case 2:
Assert.assertEquals(key, "datasvc");
break;
default:
Assert.fail();
}
}
}
@Test
public void testControlNodeServices() {
List<String> services = ServicesMetadata.getControlNodeServiceNames();
Assert.assertNotNull(services);
int cntr = 0;
for (String key : services) {
switch (cntr++) {
case 0:
Assert.assertEquals(key, "apisvc");
break;
case 1:
Assert.assertEquals(key, "syssvc");
break;
default:
Assert.fail();
}
}
}
@Test
public void testExtraNodeServices() {
List<String> services = ServicesMetadata.getExtraNodeServiceNames();
Assert.assertNotNull(services);
int cntr = 0;
for (String key : services) {
switch (cntr++) {
case 0:
Assert.assertEquals(key, "syssvc");
break;
case 1:
Assert.assertEquals(key, "datasvc");
break;
default:
Assert.fail();
}
}
}
@Test
public void testRoleIndex() {
Set<String> controlServices = Sets.newHashSet(
ServicesMetadata.getRoleServiceNames("control"));
Set<String> dataServices = Sets.newHashSet(
ServicesMetadata.getRoleServiceNames("object"));
Set<String> bothServices = Sets.newHashSet(
ServicesMetadata.getRoleServiceNames("control", "object"));
Assert.assertEquals(0, Sets.symmetricDifference(controlServices,
Sets.newHashSet("apisvc", "syssvc")).size());
Assert.assertEquals(0, Sets.symmetricDifference(dataServices,
Sets.newHashSet("datasvc", "syssvc")).size());
Assert.assertEquals(0, Sets.symmetricDifference(bothServices,
Sets.newHashSet("datasvc", "apisvc", "syssvc")).size());
}
}