/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.jenkins.results.parser;
import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author Peter Yoo
*/
public class LoadBalancerUtilTest extends BaseJenkinsResultsParserTestCase {
@Before
public void setUp() throws Exception {
downloadSample("test-1", null);
downloadSample("test-2", null);
LoadBalancerUtil.setUpdateInterval(0);
}
@After
public void tearDown() throws Exception {
Properties properties = getTestProperties(null);
deleteFile(properties.getProperty("jenkins.shared.dir"));
}
@Test
public void testGetMostAvailableMasterURL() throws Exception {
JenkinsMaster.maxRecentBatchAge = 0;
assertSamples();
}
protected static Properties getDownloadProperties(
String baseInvocationHostName) {
Properties properties = new Properties();
properties.setProperty(
"base.invocation.url",
"http://" + baseInvocationHostName + ".liferay.com");
properties.setProperty(
"jenkins.shared.dir", "mnt/mfs-ssd1-10.10/jenkins/tmp");
properties.setProperty(
"jenkins.local.url[test-1-1]", "http://test-1-1");
properties.setProperty(
"jenkins.local.url[test-1-2]", "http://test-1-2");
properties.setProperty(
"jenkins.local.url[test-1-3]", "http://test-1-3");
properties.setProperty(
"jenkins.local.url[test-1-4]", "http://test-1-4");
properties.setProperty(
"jenkins.local.url[test-1-5]", "http://test-1-5");
properties.setProperty(
"jenkins.local.url[test-1-6]", "http://test-1-6");
properties.setProperty(
"jenkins.local.url[test-1-7]", "http://test-1-7");
properties.setProperty(
"jenkins.local.url[test-1-8]", "http://test-1-8");
properties.setProperty(
"jenkins.local.url[test-1-9]", "http://test-1-9");
properties.setProperty(
"jenkins.local.url[test-1-10]", "http://test-1-10");
properties.setProperty(
"jenkins.local.url[test-1-11]", "http://test-1-11");
properties.setProperty(
"jenkins.local.url[test-1-12]", "http://test-1-12");
properties.setProperty(
"jenkins.local.url[test-1-13]", "http://test-1-13");
properties.setProperty(
"jenkins.local.url[test-1-14]", "http://test-1-14");
properties.setProperty(
"jenkins.local.url[test-1-15]", "http://test-1-15");
properties.setProperty(
"jenkins.local.url[test-1-16]", "http://test-1-16");
properties.setProperty(
"jenkins.local.url[test-1-17]", "http://test-1-17");
properties.setProperty(
"jenkins.local.url[test-1-18]", "http://test-1-18");
properties.setProperty(
"jenkins.local.url[test-1-19]", "http://test-1-19");
properties.setProperty(
"jenkins.local.url[test-1-20]", "http://test-1-20");
properties.setProperty(
"jenkins.local.url[test-2-1]", "http://test-2-1");
properties.setProperty(
"jenkins.local.url[test-3-1]", "http://test-3-1");
properties.setProperty(
"jenkins.local.url[test-3-2]", "http://test-3-2");
properties.setProperty(
"jenkins.local.url[test-3-3]", "http://test-3-3");
for (int i = 1; i <= 20; i++) {
properties.setProperty("master.slaves(test-1-" + i + ")", "");
}
properties.setProperty("master.slaves(test-2-1)", "");
for (int i = 1; i <= 3; i++) {
properties.setProperty("master.slaves(test-3-" + i + ")", "");
}
properties.setProperty("invoked.batch.size", "2");
return properties;
}
@Override
protected void downloadSample(File sampleDir, URL url) throws Exception {
Properties properties = getDownloadProperties(sampleDir.getName());
List<String> masters = JenkinsResultsParserUtil.getMasters(
properties, sampleDir.getName());
for (String master : masters) {
downloadSampleURL(
new File(sampleDir, master),
JenkinsResultsParserUtil.createURL(
properties.getProperty(
"jenkins.local.url[" + master +
"]")),
"/computer/api/json?pretty&tree=computer" +
"[displayName,idle,offline]");
downloadSampleURL(
new File(sampleDir, master),
JenkinsResultsParserUtil.createURL(
properties.getProperty(
"jenkins.local.url[" + master +
"]")),
"/queue/api/json");
}
}
@Override
protected String getMessage(File sampleDir) throws Exception {
Properties properties = getTestProperties(sampleDir.getName());
return LoadBalancerUtil.getMostAvailableMasterURL(properties);
}
protected Properties getTestProperties(String baseInvocationHostName) {
Properties properties = getDownloadProperties(baseInvocationHostName);
for (Map.Entry<Object, Object> entry : properties.entrySet()) {
Object key = entry.getKey();
if (key.equals("base.invocation.url")) {
continue;
}
String value = (String)entry.getValue();
if (value.contains("http://")) {
Class<?> clazz = getClass();
value = value.replace(
"http://",
"${dependencies.url}" + clazz.getSimpleName() + "/" +
baseInvocationHostName + "/");
entry.setValue(value);
}
}
return properties;
}
}