package com.netflix.ice.basic;
import static org.junit.Assert.*;
import java.util.Properties;
import org.junit.Test;
import com.amazonaws.util.json.JSONArray;
import com.netflix.ice.tag.Product;
/**
* Note: These tests require a running instance of Edda running at the url configured in ice.properties, so they
* strictly speaking not unit tests any more...
*/
public class EddaResourceServiceTest {
@Test
public void test() throws Exception {
EddaResourceService service = new EddaResourceService(new Properties());
service.init();
// does nothing really...
service.commit();
assertNotNull(service.getProductsWithResources());
assertEquals("Product-name for unsupported resource", "somename", service.getResource(null, null, new Product("somename"), null, null, 0));
assertEquals("Error for empty resourceId", "Error", service.getResource(null, null, Product.ec2, null, null, 0));
assertEquals("Error for empty resourceId", "Error", service.getResource(null, null, Product.ec2, "", null, 0));
assertEquals("Unknown for resourceIds that we do not find", "Unknown", service.getResource(null, null, Product.ec2, "someunknowninstance", null, 0));
JSONArray instances = service.readInstanceArray();
String resource = service.getResource(null, null, Product.ec2, instances.getString(0), null, 0);
assertFalse("Not Error for an actual instance", "Error".equals(resource));
resource = service.getResource(null, null, Product.ec2_instance, instances.getString(0), null, 0);
assertFalse("Not Error for an actual instance", "Error".equals(resource));
for(int i = 0;i < instances.length();i++) {
resource = service.getResource(null, null, Product.ec2_instance, instances.getString(i), null, 0);
assertFalse("Not Error for an actual instance", "Error".equals(resource));
}
}
@Test
public void testWrongURL() throws Exception {
// use a normal setup for retrieving the instances
EddaResourceService service = new EddaResourceService(new Properties());
JSONArray instances = service.readInstanceArray();
// overwrite config with an invalid hostname
Properties prop = new Properties();
prop.setProperty("ice.eddaresourceservice.url", "http://invalidhostname:18081/edda/api/v2/");
service = new EddaResourceService(prop);
// now the retrieved resources should return an error even for valid instances
String resource = service.getResource(null, null, Product.ec2, instances.getString(0), null, 0);
assertTrue("Error even for an actual instance when using wrong URL", "Error".equals(resource));
// overwrite config with an invalid URL
prop.setProperty("ice.eddaresourceservice.url", "sasie://invalidhostname:18081/edda/api/v2/");
service = new EddaResourceService(prop);
// now the retrieved resources should return an error even for valid instances
resource = service.getResource(null, null, Product.ec2, instances.getString(0), null, 0);
assertTrue("Error even for an actual instance when using wrong URL", "Error".equals(resource));
}
}