/*
* Copyright 2014 EMC Corporation. 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.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0.txt
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.emc.vipr.ribbon.test;
import com.emc.vipr.ribbon.SmartClientConfigKey;
import com.emc.vipr.ribbon.ViPRDataServicesServerList;
import com.emc.vipr.services.lib.ViprConfig;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.Server;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicHttpResponse;
import org.apache.http.message.BasicStatusLine;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
import javax.xml.bind.JAXBException;
import java.io.IOException;
import java.util.List;
import java.util.Properties;
public class ViPRDataServicesServerListTest {
@Test
public void testServerPoll() throws Exception {
Properties viprProperties = null;
try {
viprProperties = ViprConfig.getProperties();
} catch (Exception e) {
Assume.assumeTrue("vipr.properties missing", false);
}
String serverString = ViprConfig.getPropertyNotEmpty(viprProperties, ViprConfig.PROP_S3_ENDPOINT);
String user = ViprConfig.getPropertyNotEmpty(viprProperties, ViprConfig.PROP_S3_ACCESS_KEY_ID);
String secret = ViprConfig.getPropertyNotEmpty(viprProperties, ViprConfig.PROP_S3_SECRET_KEY);
ViPRDataServicesServerList serverList = new ViPRDataServicesServerList();
IClientConfig nfConfig = new DefaultClientConfigImpl();
nfConfig.setProperty(SmartClientConfigKey.ViPRDataServicesProtocol, "http");
nfConfig.setProperty(SmartClientConfigKey.ViPRDataServicesInitialNodes, serverString.replaceAll("^https?://", ""));
nfConfig.setProperty(SmartClientConfigKey.ViPRDataServicesUser, user);
nfConfig.setProperty(SmartClientConfigKey.ViPRDataServicesUserSecret, secret);
nfConfig.setProperty(SmartClientConfigKey.ViPRDataServicesTimeout, 5000);
serverList.initWithNiwsConfig(nfConfig);
List<Server> servers = serverList.getUpdatedListOfServers();
Assert.assertTrue("size of server pool did not increase", servers.size() > 1);
}
@Test
public void testXmlParse() throws Exception {
String rawXml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
" <ListDataNode xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">\n" +
" <DataNodes> 10.247.102.239</DataNodes>\n" +
" <DataNodes>10.247.102.240</DataNodes>\n" +
" <DataNodes>10.247.102.241 </DataNodes>\n" +
" <VersionInfo>vipr-2.0.0.0.r2b3e482</VersionInfo>\n" +
" </ListDataNode>";
HttpResponse testResponse = new BasicHttpResponse(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
testResponse.setEntity(new StringEntity(rawXml, ContentType.APPLICATION_XML));
ParserTester tester = new ParserTester();
List<String> hosts = tester.testParse(testResponse);
Assert.assertEquals("wrong number of hosts", 3, hosts.size());
Assert.assertEquals("wrong 1st host", "10.247.102.239", hosts.get(0));
Assert.assertEquals("wrong 2nd host", "10.247.102.240", hosts.get(1));
Assert.assertEquals("wrong 3rd host", "10.247.102.241", hosts.get(2));
}
private class ParserTester extends ViPRDataServicesServerList {
public List<String> testParse(HttpResponse response) throws IOException, JAXBException {
return this.parseResponse(response);
}
}
}