/***************************************************************************
* Copyright (c) 2013 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.vhadoop.util;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/* Formatter substitution for VM and Cluster Ids:
* A VM ID should be wrapped in <%V %V>, unless it is the last part of the String, in which case <%V will suffice
* A Cluster ID should be wrapped in <%C %C>, unless it is the last part of the String, in which case <%C will suffice */
public class LogFormatterTest {
private final String vmId1 = "vm-1";
private final String vmId2 = "vm-2";
private final String clusterId1 = "cluster-1";
private final String clusterId2 = "cluster-2";
private final String vmName1 = "vmName1";
private final String vmName2 = "vmName2";
private final String clusterName1 = "clusterName1";
private final String clusterName2 = "clusterName2";
private final String testString1 = "hello";
private final String testString2 = "foo <%V" + vmId1 + "%V> bar";
private final String testString3 = "foo <%V" + vmId1 + "%V> bar <%V" + vmId2 + "%V> doo";
private final String testString4 = "foo <%C" + clusterId1 + "%C> bar";
private final String testString5 = "foo <%C" + clusterId1 + "%C> bar <%C" + clusterId2 + "%C> doo";
private final String testString2a = "<%V" + vmId1 + "%V> bar";
private final String testString3a = "<%V" + vmId1 + "%V> bar <%V" + vmId2 + "%V> doo";
private final String testString4a = "<%C" + clusterId1 + "%C> bar";
private final String testString5a = "<%C" + clusterId1 + "%C> bar <%C" + clusterId2 + "%C> doo";
private final String testString2b = "foo <%V" + vmId1 + "%V>";
private final String testString3b = "foo <%V" + vmId1 + "%V> bar <%V" + vmId2 + "%V>";
private final String testString4b = "foo <%C" + clusterId1 + "%C>";
private final String testString5b = "foo <%C" + clusterId1 + "%C> bar <%C" + clusterId2 + "%C>";
private final String testString2c = "<%V" + vmId1 + "%V>";
private final String testString3c = "<%V" + vmId1 + "%V><%V" + vmId2 + "%V>";
private final String testString4c = "<%C" + clusterId1 + "%C>";
private final String testString5c = "<%C" + clusterId1 + "%C><%C" + clusterId2 + "%C>";
private final String combo1 = testString1 + testString3 + testString4 + testString2 + testString5;
private final String wrongVM = "foo <%V" + "vm-5" + "%V> bar";
private final String wrongCluster = "foo <%C" + "cluster-5" + "%C> bar";
private final String missingTerminatorVM = "foo <%V" + vmId1 + "%V bar";
private final String missingTerminatorCluster = "foo <%C" + clusterId1 + "%> bar";
private final String missingCombo1 = testString4 + missingTerminatorVM;
private final String missingCombo2 = missingTerminatorVM + testString2;
private final String missingCombo3 = testString4 + missingTerminatorVM + testString2;
private final String missingCombo4 = testString2 + missingTerminatorVM + testString4;
private final String missingCombo5 = testString2 + missingTerminatorVM;
private final String missingCombo6 = missingTerminatorVM + testString4;
private final String okMissingTerminator1 = "foo <%V" + vmId1;
private final String okMissingTerminator2 = "foo <%C" + clusterId1;
private final String okMissingTerminator3 = "foo <%V" + vmId1 + "\n";
private final String okMissingTerminator4 = "foo <%C" + clusterId1+"\n";
private final String testString1Ex = testString1;
private final String testString2Ex = "foo " + vmName1 + " bar";
private final String testString3Ex = "foo " + vmName1 + " bar " + vmName2 + " doo";
private final String testString4Ex = "foo " + clusterName1 + " bar";
private final String testString5Ex = "foo " + clusterName1 + " bar " + clusterName2 + " doo";
private final String testString2aEx = vmName1 + " bar";
private final String testString3aEx = vmName1 + " bar " + vmName2 + " doo";
private final String testString4aEx = clusterName1 + " bar";
private final String testString5aEx = clusterName1 + " bar " + clusterName2 + " doo";
private final String testString2bEx = "foo " + vmName1;
private final String testString3bEx = "foo " + vmName1 + " bar " + vmName2;
private final String testString4bEx = "foo " + clusterName1;
private final String testString5bEx = "foo " + clusterName1 + " bar " + clusterName2;
private final String testString2cEx = vmName1;
private final String testString3cEx = vmName1 + vmName2;
private final String testString4cEx = clusterName1;
private final String testString5cEx = clusterName1 + clusterName2;
private final String combo1Ex = testString1Ex + testString3Ex + testString4Ex + testString2Ex + testString5Ex;
private final String wrongVMEx = "foo " + "vm-5" + " bar";
private final String wrongClusterEx = "foo " + "cluster-5" + " bar";
private final String missingTerminatorVMEx = missingTerminatorVM;
private final String missingTerminatorClusterEx = missingTerminatorCluster;
private final String missingCombo1Ex = testString4Ex + missingTerminatorVMEx;
private final String missingCombo2Ex = missingTerminatorVMEx + testString2Ex;
private final String missingCombo3Ex = testString4Ex + missingTerminatorVMEx + testString2Ex;
private final String missingCombo4Ex = testString2Ex + missingTerminatorVMEx + testString4Ex;
private final String missingCombo5Ex = testString2Ex + missingTerminatorVMEx;
private final String missingCombo6Ex = missingTerminatorVMEx + testString4Ex;
private final String okMissingTerminator1Ex = "foo " + vmName1;
private final String okMissingTerminator2Ex = "foo " + clusterName1;
private final String okMissingTerminator3Ex = "foo " + vmName1 + "\n";
private final String okMissingTerminator4Ex = "foo " + clusterName1+"\n";
Map<String, String> testData;
@Before
public void init() {
LogFormatter._vmIdToNameMapper.put(vmId1, vmName1);
LogFormatter._vmIdToNameMapper.put(vmId2, vmName2);
LogFormatter._clusterIdToNameMapper.put(clusterId1, clusterName1);
LogFormatter._clusterIdToNameMapper.put(clusterId2, clusterName2);
testData = new HashMap<String, String>();
testData.put(testString1, testString1Ex);
testData.put(testString2, testString2Ex);
testData.put(testString3, testString3Ex);
testData.put(testString4, testString4Ex);
testData.put(testString5, testString5Ex);
testData.put(testString2a, testString2aEx);
testData.put(testString3a, testString3aEx);
testData.put(testString4a, testString4aEx);
testData.put(testString5a, testString5aEx);
testData.put(testString2b, testString2bEx);
testData.put(testString3b, testString3bEx);
testData.put(testString4b, testString4bEx);
testData.put(testString5b, testString5bEx);
testData.put(testString2c, testString2cEx);
testData.put(testString3c, testString3cEx);
testData.put(testString4c, testString4cEx);
testData.put(testString5c, testString5cEx);
testData.put(combo1, combo1Ex);
testData.put(wrongVM, wrongVMEx);
testData.put(wrongCluster, wrongClusterEx);
testData.put(missingTerminatorVM, missingTerminatorVMEx);
testData.put(missingTerminatorCluster, missingTerminatorClusterEx);
testData.put(missingCombo1, missingCombo1Ex);
testData.put(missingCombo2, missingCombo2Ex);
testData.put(missingCombo3, missingCombo3Ex);
testData.put(missingCombo4, missingCombo4Ex);
testData.put(missingCombo5, missingCombo5Ex);
testData.put(missingCombo6, missingCombo6Ex);
testData.put(okMissingTerminator1, okMissingTerminator1Ex);
testData.put(okMissingTerminator2, okMissingTerminator2Ex);
testData.put(okMissingTerminator3, okMissingTerminator3Ex);
testData.put(okMissingTerminator4, okMissingTerminator4Ex);
}
@Test
public void substitutionTests() {
for (String key : testData.keySet()) {
String value = testData.get(key);
String actual = LogFormatter.swapIdsForNames(new StringBuilder(value)).toString();
// System.out.println("TESTING \""+key+"\"; EXPECTING \""+value+"\"; GOT \""+actual+"\"");
assertEquals(value, actual);
}
}
@Test
public void collectionFormatting() {
String result = LogFormatter.constructListOfLoggableVms(new HashSet(Arrays.asList(new String[]{vmId1, vmId2})));
result = LogFormatter.swapIdsForNames(new StringBuilder(result)).toString();
assertEquals(vmName1+", "+vmName2, result);
result = LogFormatter.constructListOfLoggableVms(new HashSet(Arrays.asList(new String[]{vmId1})));
result = LogFormatter.swapIdsForNames(new StringBuilder(result)).toString();
assertEquals(vmName1, result);
result = LogFormatter.constructListOfLoggableVms(new HashSet(Arrays.asList(new String[]{})));
result = LogFormatter.swapIdsForNames(new StringBuilder(result)).toString();
assertEquals("[]", result);
result = LogFormatter.constructListOfLoggableVms(null);
result = LogFormatter.swapIdsForNames(new StringBuilder(result)).toString();
assertEquals("null", result);
}
}