/***************************************************************************
* Copyright (c) 2012-2015 VMware, 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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.vmware.bdd.utils;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.testng.Assert;
import org.testng.annotations.Test;
public class TestCommonUtil {
@Test
public void testValidateVcResourceName() {
assertFalse(CommonUtil.validateVcResourceName(""));
assertTrue(CommonUtil
.validateVcResourceName("the你好學習こんにちは안녕하세요schönenuntrèsbon_t- aux.3210"));
assertFalse(CommonUtil
.validateVcResourceName("the你好學習こんにちは안녕하세요schönenuntrèsbon_t- aux$"));
assertFalse(CommonUtil.validateVcResourceName("%&*$#@!\\\\/:*?\"<>|;'"));
assertFalse(CommonUtil.validateVcResourceName("()+,=[]^`{}~"));
assertTrue(CommonUtil.validateVcResourceName("resource name"));
assertTrue(CommonUtil.validateVcResourceName("192.168.0.1"));
assertTrue(CommonUtil.validateVcResourceName("VM network192.168.0.1"));
assertTrue(CommonUtil.validateVcResourceName("-------- ------"));
}
@Test
public void testValidateResourceName() {
assertEquals(CommonUtil.validateDistroName("name1"), true);
assertEquals(CommonUtil.validateDistroName("Name2"), true);
assertEquals(CommonUtil.validateDistroName("name3_"), true);
assertEquals(CommonUtil.validateDistroName("name4 "), true);
assertEquals(CommonUtil.validateDistroName("name-5"), true);
assertEquals(CommonUtil.validateDistroName("name6-"), true);
assertEquals(CommonUtil.validateDistroName("-name7-"), true);
assertFalse(CommonUtil.validateDistroName("%&*$#@!\\\\/:*?\"<>|;'"));
assertFalse(CommonUtil.validateDistroName("()+,=[]^`{}~"));
}
@Test
public void testValidateDistroName() {
assertEquals(CommonUtil.validateDistroName("name1"), true);
assertEquals(CommonUtil.validateDistroName("Name2"), true);
assertEquals(CommonUtil.validateDistroName("name3_"), true);
assertEquals(CommonUtil.validateDistroName("name4 "), true);
assertEquals(CommonUtil.validateDistroName("name-5"), true);
assertEquals(CommonUtil.validateDistroName("name6-"), true);
assertEquals(CommonUtil.validateDistroName("-name7-"), true);
assertFalse(CommonUtil.validateDistroName("%&*$#@!\\\\/:*?\"<>|;'"));
assertFalse(CommonUtil.validateDistroName("()+,=[]^`{}~"));
}
@Test
public void testValidateClusterName() {
assertEquals(CommonUtil.validateClusterName("clusterName1"), true);
assertEquals(CommonUtil.validateClusterName("clusterName2"), true);
assertEquals(CommonUtil.validateClusterName("clusterName3_"), true);
assertEquals(CommonUtil.validateClusterName("clusterName4 "), false);
assertEquals(CommonUtil.validateClusterName("clusterName-5"), false);
assertEquals(CommonUtil.validateClusterName("clusterName6-"), false);
assertEquals(CommonUtil.validateClusterName("-clusterName7"), false);
assertEquals(CommonUtil.validateClusterName("cluster-Name8"), false);
assertEquals(CommonUtil.validateClusterName("cluster Name9"), false);
}
@Test
public void testValidateNodeGroupName() {
assertEquals(CommonUtil.validateNodeGroupName("nodeGroupName1"), true);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroupName2"), true);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroupName3_"), false);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroupName4 "), false);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroupName-5"), false);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroupName6-"), false);
assertEquals(CommonUtil.validateNodeGroupName("-nodeGroupName7"), false);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroup Name8"), false);
assertEquals(CommonUtil.validateNodeGroupName("nodeGroup_Name9"), false);
assertEquals(CommonUtil.validateNodeGroupName("_nodeGroupName10"), false);
assertEquals(
CommonUtil
.validateNodeGroupName("nodeGroupName1234567890123456789012345678901234567890123456789012345678901234567890"),
false);
}
@Test
public void testValidatePathInfo() {
assertEquals(CommonUtil.validataPathInfo("/clusters"), true); // delete|stop|start cluster
assertEquals(CommonUtil.validataPathInfo("/cluster/test01/fix/disk"), true); // fixCluster
assertEquals(CommonUtil.validataPathInfo("/cluster/test_01/fix/disk"), true);
assertEquals(CommonUtil.validataPathInfo("/cluster//test_01/fix///disk//"), true);
assertEquals(CommonUtil.validataPathInfo("/cluster/test01/param_wait_for_result"), true); // asyncSetParam
assertEquals(CommonUtil.validataPathInfo("/cluster/test01/nodegroup/data/scale"), true); // scaleCluster
assertEquals(CommonUtil.validataPathInfo("/cluster/test01/config"), true); // configCluster
assertEquals(CommonUtil.validataPathInfo("/cluster/test01/nodegroup/data/instancenum"), true); // resizeCluster
assertEquals(CommonUtil.validataPathInfo("/clusters/\r\nHTTP/1.1 200 OK\r\n location: index.html"), false);
}
@Test
public void testValidateVcDataStoreNames() {
List<String> vcDataStoreNames = new ArrayList<String>();
vcDataStoreNames.add("vcDataStore_Name1");
vcDataStoreNames.add("vcDataStore_Nam*");
vcDataStoreNames.add("vcDataStore_Nam?");
vcDataStoreNames.add("vcData Store_Name2");
vcDataStoreNames.add("vcDataStoreName3-");
vcDataStoreNames.add("vcDataStoreName192.168.0.1");
vcDataStoreNames.add("vcDataStoreName(192.168.0.1)");
vcDataStoreNames.add("vc本地存储(192.168.0.1)");
assertEquals(CommonUtil.validateVcDataStoreNames(vcDataStoreNames), true);
List<String> errorVcDataStoreNames1 = new ArrayList<String>();
errorVcDataStoreNames1.add("vcDataStoreName!");
assertEquals(CommonUtil.validateVcDataStoreNames(errorVcDataStoreNames1), false);
List<String> errorVcDataStoreNames2 = new ArrayList<String>();
errorVcDataStoreNames2.add("vcDataStoreName#");
assertEquals(CommonUtil.validateVcDataStoreNames(errorVcDataStoreNames2), false);
}
@Test
public void testGetDatastoreJavaPattern() {
String datastore = "(192.168.0.1)datastore";
String pattern = CommonUtil.getDatastoreJavaPattern("(192.168.0.1)datasto?e");
assertTrue(datastore.matches(pattern));
pattern = CommonUtil.getDatastoreJavaPattern("(192.168.0.1)data*");
assertTrue(datastore.matches(pattern));
}
/*
@Test
public void testIsComputeOnly() {
List<String> roles = new ArrayList<String>();
roles.add(HadoopRole.HADOOP_TASKTRACKER.toString());
String distroVendor = "apache";
assertTrue(CommonUtil.isComputeOnly(roles, distroVendor));
roles.add(HadoopRole.TEMPFS_CLIENT_ROLE.toString());
assertTrue(CommonUtil.isComputeOnly(roles, distroVendor));
roles.add(HadoopRole.HADOOP_DATANODE.toString());
assertTrue(!CommonUtil.isComputeOnly(roles, distroVendor));
roles.clear();
roles.add(HadoopRole.MAPR_TASKTRACKER_ROLE.toString());
distroVendor = Constants.MAPR_VENDOR;
assertTrue(CommonUtil.isComputeOnly(roles, distroVendor));
roles.add(HadoopRole.MAPR_NFS_ROLE.toString());
assertTrue(!CommonUtil.isComputeOnly(roles, distroVendor));
}*/
@Test
public void testMakeVmMemoryDivisibleBy4() {
long max = Long.MAX_VALUE;
max = CommonUtil.makeVmMemoryDivisibleBy4(max);
assertTrue(max > 0);
}
@Test
public void testDecode() {
assertEquals(CommonUtil.decode("datastore1"), "datastore1");
assertEquals(CommonUtil.decode(CommonUtil.encode("데이터저장소1")), "데이터저장소1");
assertEquals(CommonUtil.decode(CommonUtil.encode("数据存储1")), "数据存储1");
}
@Test
public void testEncode() {
assertEquals(CommonUtil.encode("datastore1"), "datastore1");
assertEquals(CommonUtil.encode("데이터저장소1"),
"%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A0%80%EC%9E%A5%EC%86%8C1");
assertEquals(CommonUtil.encode("数据存储1"),
"%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A81");
}
@Test
public void testGetTimestamp() throws ParseException {
String dateStr = CommonUtil.getCurrentTimestamp();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = simpleDateFormat.parse(dateStr.substring(1, dateStr.length()-1));
assertNotNull(date);
}
@Test
public void testValidateClusterPassword() {
//length less than 8
assertFalse(CommonUtil.validateClusterPassword("P@ssw0r"));
//length more than 20
assertFalse(CommonUtil.validateClusterPassword("P@ssw0rdP@ssw0rdP@ssw0rd"));
//no special character
assertFalse(CommonUtil.validateClusterPassword("Passw0rd"));
//no digit
assertFalse(CommonUtil.validateClusterPassword("P@ssword"));
//no upper case letter
assertFalse(CommonUtil.validateClusterPassword("p@ssw0rd"));
//no lower case letter
assertFalse(CommonUtil.validateClusterPassword("P@SSW0RD"));
//valid one
assertTrue(CommonUtil.validateClusterPassword("P@ssw0rd"));
}
@Test
public void testReadJsonFileSucc() throws ParseException {
String fileName = "/whitelist.json";
try {
URL url = this.getClass().getResource(fileName);
FileInputStream fis = new FileInputStream(url.getPath());
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
StringBuilder sb = new StringBuilder();
String line = "";
while ( (line = br.readLine()) != null ) {
sb.append(line);
}
br.close();
String contentRead = CommonUtil.readJsonFile(url);
String testString = sb.toString();
contentRead = contentRead.replaceAll("\n", "");
Assert.assertEquals(contentRead, testString);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void testReadJsonFileNotExisted() throws ParseException {
String contentRead = CommonUtil.readJsonFile("Not_Existed");
Assert.assertEquals(contentRead, "");
}
@Test
public void testInputsConvert() throws ParseException {
String[] sa = { "ab", "123", "*&^" };
List<String> ls = CommonUtil.inputsConvert("ab,123,*&^");
for ( int i=0; i<sa.length; i++ ) {
Assert.assertEquals(ls.get(i), sa[i]);
}
// add a case for a string without ","
ls = CommonUtil.inputsConvert("abc123-xyz");
Assert.assertEquals(ls.get(0), "abc123-xyz");
Set<String> words = new TreeSet<String>();
words.addAll(Arrays.asList("ab", "123", "*&^"));
Assert.assertEquals("*&^,123,ab", CommonUtil.inputsConvert(words));
Map<String, String> map = new TreeMap<String, String>();
map.put("name", "name1");
map.put("value", "value1");
Assert.assertEquals("name:name1,value:value1", CommonUtil.inputsConvert(map));
}
@Test
public void testExecCommand() throws ParseException {
String tmpDir = System.getProperty("java.io.tmpdir");
if ( tmpDir.endsWith(File.separator) ) {
tmpDir = tmpDir.substring(0, tmpDir.length()-1);
}
String filePathName = tmpDir + File.separator + "abc";
File f = new File(filePathName);
Assert.assertFalse(f.exists());
// call the api method
String cmd = "touch " + filePathName;
Process p = CommonUtil.execCommand(cmd);
Assert.assertNotNull(p);
Assert.assertTrue(f.exists());
// delete the file after test
f.delete();
}
@Test
public void testValidateUrl() throws ParseException {
List<String> errorMsgs = new ArrayList<String>();
boolean valid = CommonUtil.validateUrl("http://10.141.73.8:8080", errorMsgs);
Assert.assertTrue(valid);
errorMsgs.clear();
valid = CommonUtil.validateUrl("ftp://10.141.73.8:8080", errorMsgs);
Assert.assertFalse(valid);
Assert.assertEquals(errorMsgs.get(0), "URL should starts with http or https");
}
}