/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* 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
*******************************************************************************/
package org.ebayopensource.turmeric.runtime.tests.config;
import static org.junit.Assert.*;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceNotFoundException;
import org.ebayopensource.turmeric.runtime.common.impl.internal.config.GlobalConfigHolder;
import org.ebayopensource.turmeric.runtime.common.impl.utils.ParseUtils;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.config.ServiceConfigHolder;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.config.ServiceConfigManager;
import org.ebayopensource.turmeric.runtime.spf.impl.internal.service.RequestParamsDescriptor;
import org.ebayopensource.turmeric.runtime.tests.common.AbstractTurmericTestCase;
import org.ebayopensource.turmeric.runtime.tests.common.util.ExceptionUtils;
import org.junit.After;
import org.junit.Test;
import org.junit.AfterClass;
public class ServiceConfigTest extends AbstractTurmericTestCase {
public ServiceConfigTest() {
System.setProperty(ParseUtils.SYS_PROP_CONFIG_SCHEMA_CHECK, "ERROR");
}
@After
public void tearDown() throws Exception {
ServiceConfigManager configManager = ServiceConfigManager.getInstance();
configManager.setConfigTestCase("config");
}
@AfterClass
public static void setPropertyToNone() throws Exception {
System.setProperty(ParseUtils.SYS_PROP_CONFIG_SCHEMA_CHECK, "NONE");
}
@Test
public void testRequestParamMapping() throws Exception {
System.setProperty(ParseUtils.SYS_PROP_CONFIG_SCHEMA_CHECK, "WARNING");
ParseUtils.reloadSchemaCheckLevel();
ServiceConfigManager configManager = ServiceConfigManager.getInstance();
configManager.setConfigTestCase("request-param", "testconfig");
String goodService = "good-service";
try {
configManager.getConfig(goodService);
} catch (Throwable e) {
fail("Failed to find valid service: " + goodService.toString() + " " + e.getMessage());
}
try {
ServiceConfigHolder cch = configManager.getConfigForUpdate(goodService);
RequestParamsDescriptor rpDesc = cch.getRequestParamsDescriptor();
// aliases check
System.out.println(rpDesc.getRequestParams("swim").aliases());
System.out.println(rpDesc.getRequestParams("dive").aliases());
Map<String, String> aliases = rpDesc.getRequestParams("swim").aliases();
assertTrue(aliases.containsKey("dist"));
assertTrue(aliases.containsKey("doI"));
assertTrue(aliases.containsValue("howlong"));
assertTrue(aliases.containsValue("do.i.know.swimming"));
// duplicates check
System.out.println(rpDesc.getPathIndices());
Set<String> pathIndices = rpDesc.getPathIndices();
assertTrue(pathIndices.contains("2"));
assertTrue(pathIndices.contains("3"));
assertTrue(pathIndices.contains("5"));
assertTrue(pathIndices.contains("6"));
// Parameter mapping count check
assertEquals(rpDesc.getRequestParams("swim").count(), 4);
assertEquals(rpDesc.getRequestParams("dive").count(), 2);
assertEquals(rpDesc.getRequestParams("swim").get("2"), "howlong");
assertEquals(rpDesc.getRequestParams("swim").get("3"), "do.i.know.swimming");
assertEquals(rpDesc.getRequestParams("swim").get("5"), "do.i.know.swimming.2");
assertEquals(rpDesc.getRequestParams("swim").get("6"), "do.i.know.swimming.3");
assertEquals(rpDesc.getRequestParams("dive").get("2"), "height");
assertEquals(rpDesc.getRequestParams("dive").get("3"), "howlong");
}
catch (Throwable e) {
fail("Test failed " + goodService.toString() + " " + e.getMessage());
}
}
/**
* @check Exceptions need to be handled
*/
@Test
public void serviceConfig() throws Exception {
System.setProperty(ParseUtils.SYS_PROP_CONFIG_SCHEMA_CHECK, "ERROR");
ParseUtils.reloadSchemaCheckLevel();
StringBuffer output = new StringBuffer();
ServiceConfigManager configManager = ServiceConfigManager.getInstance();
configManager.setConfigTestCase("configtest2", "testconfig");
try {
String fakeService = "unknown";
configManager.getConfig(fakeService);
fail("Service should not be found: " + fakeService);
} catch (Throwable e) {
ExceptionUtils.checkException(e, ServiceNotFoundException.class, "No configuration defined for service: unknown");
}
String goodService = "test2";
try {
configManager.getConfig(goodService);
} catch (Throwable e) {
fail("Failed to find valid service: " + goodService.toString());
}
for (int i = 1; i <= 7; i++) { // test 6 is not really valid - namespace must be declared
String testcase = "configtest" + String.valueOf(i);
configManager.setConfigTestCase(testcase, "testconfig");
Collection<String> allConfig = configManager.getAllServiceAdminNames();
output.append("Test case: " + testcase + '\n');
for (String svcName : allConfig) {
try {
ServiceConfigHolder cch = configManager.getConfigForUpdate(svcName);
cch.dump(output);
} catch (Exception e) {
output.append("Exception: " + e.toString() + '\n');
}
try {
GlobalConfigHolder gch = configManager.getGlobalConfigForUpdate();
gch.dump(output);
} catch (Exception e) {
output.append("Exception: " + e.toString() + '\n');
}
}
}
String absPath = CompareUtils.writeOutputFile(this.getClass(), output, "server");
String compareString = CompareUtils.getCompareString(this.getClass(), "server.compare.txt");
assertEquals(compareString, output.toString());
configManager.setConfigTestCase("config");
}
}