/* * ApplicationInsights-Java * Copyright (c) Microsoft Corporation * All rights reserved. * * MIT License * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the ""Software""), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, merge, * publish, distribute, sublicense, and/or sell copies of the Software, and to permit * persons to whom the Software is furnished to do so, subject to the following conditions: * The above copyright notice and this permission notice shall be included in all copies or * substantial portions of the Software. * THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ package com.microsoft.applicationinsights.telemetry; import java.net.URI; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import com.microsoft.applicationinsights.internal.util.Sanitizer; import org.junit.Test; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertEquals; public final class SanitizerTest { private final static String VALID_KEY_PROPERTY = "ValidKey"; private final static String VALID_VALUE_PROPERTY = "ValidValue"; private final static String VALID_URL = "http://wwww.microsoft.com/"; private final static String NON_VALID_URL = "http:sd{@~fsd.s.d.f;fffff"; private final static Double VALID_VALUE_MEASUREMENT = 1.0; @Test public void testSanitizeNullProperties() throws Exception { Sanitizer.sanitizeProperties(null); } @Test public void testSanitizeEmptyProperties() throws Exception { ConcurrentMap<String, String> properties = new ConcurrentHashMap<String, String>(); Sanitizer.sanitizeProperties(properties); assertTrue(properties.isEmpty()); } @Test public void testSanitizeValidProperties() throws Exception { ConcurrentMap<String, String> properties = new ConcurrentHashMap<String, String>(); properties.put(VALID_KEY_PROPERTY, VALID_VALUE_PROPERTY); Sanitizer.sanitizeProperties(properties); assertEquals(properties.size(), 1); assertEquals(properties.get(VALID_KEY_PROPERTY), VALID_VALUE_PROPERTY); } @Test public void testSanitizeTooLongKeyAndValueProperties() throws Exception { ConcurrentMap<String, String> properties = new ConcurrentHashMap<String, String>(); properties.put(createString(Sanitizer.MAX_MAP_NAME_LENGTH + 1), createString(Sanitizer.MAX_VALUE_LENGTH + 1)); Sanitizer.sanitizeProperties(properties); assertEquals(properties.size(), 1); Map.Entry<String, String> entry = properties.entrySet().iterator().next(); assertEquals(entry.getKey().length(), Sanitizer.MAX_MAP_NAME_LENGTH); assertEquals(entry.getValue().length(), Sanitizer.MAX_VALUE_LENGTH); } @Test public void testSanitizeIllegalCharsProperties() throws Exception { ConcurrentMap<String, String> properties = new ConcurrentHashMap<String, String>(); String validKey = createString(10); properties.put("@" + validKey + " ", VALID_VALUE_PROPERTY); Sanitizer.sanitizeProperties(properties); assertEquals(properties.size(), 1); Map.Entry<String, String> entry = properties.entrySet().iterator().next(); assertEquals(entry.getKey(), validKey); assertEquals(entry.getValue(), VALID_VALUE_PROPERTY); } @Test public void testNonValidEmptyUUID() { boolean valid = Sanitizer.isUUID(""); assertFalse(valid); } @Test public void testNonValidNullUUID() { boolean valid = Sanitizer.isUUID(null); assertFalse(valid); } @Test public void testNonValidBadFormat1UUID() { boolean valid = Sanitizer.isUUID("sadfsa"); assertFalse(valid); } @Test public void testNonValidBadFormat2UUID() { boolean valid = Sanitizer.isUUID("c934153105ac4d8c972e36e97601d5ffc934153105ac4d8c972e36e97601d5ff"); assertFalse(valid); } @Test public void testValidUUIDWithComma() { // boolean valid = Sanitizer.isUUID("c9341531-05ac-4d8c-972e-36e97601d5ff"); boolean valid = Sanitizer.isUUID("00000000-0000-0000-0000-000000000000"); assertTrue(valid); } @Test public void testValidUUIDWithoutComma() { boolean valid = Sanitizer.isUUID("c934153105ac4d8c972e36e97601d5ff"); assertFalse(valid); } @Test public void testSanitizeNullMeasurements() throws Exception { Sanitizer.sanitizeMeasurements(null); } @Test public void testSanitizeEmptyMeasurements() throws Exception { ConcurrentMap<String, Double> measurements = new ConcurrentHashMap<String, Double>(); Sanitizer.sanitizeMeasurements(measurements); assertTrue(measurements.isEmpty()); } @Test public void testSanitizeValidMeasurements() throws Exception { ConcurrentMap<String, Double> measurements = new ConcurrentHashMap<String, Double>(); measurements.put(VALID_KEY_PROPERTY, VALID_VALUE_MEASUREMENT); Sanitizer.sanitizeMeasurements(measurements); assertEquals(measurements.size(), 1); assertEquals(measurements.get(VALID_KEY_PROPERTY), VALID_VALUE_MEASUREMENT); } @Test public void testSanitizeIllegalCharsMeasurements() throws Exception { ConcurrentMap<String, Double> measurements = new ConcurrentHashMap<String, Double>(); String validKey = createString(10); measurements.put("@" + validKey + " ", VALID_VALUE_MEASUREMENT); Sanitizer.sanitizeMeasurements(measurements); assertEquals(measurements.size(), 1); Map.Entry<String, Double> entry = measurements.entrySet().iterator().next(); assertEquals(entry.getKey(), validKey); assertEquals(entry.getValue(), VALID_VALUE_MEASUREMENT); } @Test public void testSanitizeNullUri() throws Exception { Sanitizer.sanitizeUri(null); } @Test public void testSanitizeNonValidUri() throws Exception { URI uri = Sanitizer.sanitizeUri(NON_VALID_URL); assertNull(uri); } @Test public void testSanitizeValidUri() throws Exception { URI uri = Sanitizer.sanitizeUri(VALID_URL); assertNotNull(uri); } @Test public void testSanitizeNullValue() { String value = Sanitizer.sanitizeValue(null); assertNull(value); } @Test public void testSanitizeEmptyValue() { String value = Sanitizer.sanitizeValue(""); assertEquals(value, ""); } @Test public void testSanitizeLongValue() throws Exception { String name = Sanitizer.sanitizeValue(createString(Sanitizer.MAX_VALUE_LENGTH + 1)); assertNotNull(name); assertEquals(name.length(), Sanitizer.MAX_VALUE_LENGTH); } @Test public void testSanitizeValidValue() throws Exception { String name = Sanitizer.sanitizeValue(VALID_VALUE_PROPERTY); assertNotNull(name); assertEquals(name, VALID_VALUE_PROPERTY); } @Test public void testSanitizeNullName() { String name = Sanitizer.sanitizeName(null); assertNull(name); } @Test public void testSanitizeEmptyName() { String name = Sanitizer.sanitizeName(""); assertEquals(name, ""); } @Test public void testSanitizeLongName() throws Exception { String name = Sanitizer.sanitizeName(createString(Sanitizer.MAX_NAME_LENGTH + 1)); assertNotNull(name); assertEquals(name.length(), Sanitizer.MAX_NAME_LENGTH); } @Test public void testSanitizeValidName() throws Exception { String name = Sanitizer.sanitizeName(VALID_KEY_PROPERTY); assertNotNull(name); assertEquals(name, VALID_KEY_PROPERTY); } @Test public void testSanitizeNullMessage() { String message = Sanitizer.sanitizeMessage(null); assertNull(message); } @Test public void testSanitizeEmptyMessage() { String message = Sanitizer.sanitizeMessage(""); assertEquals(message, ""); } @Test public void testSanitizeLongMessage() throws Exception { String name = Sanitizer.sanitizeMessage(createString(Sanitizer.MAX_MESSAGE_LENGTH + 1)); assertNotNull(name); assertEquals(name.length(), Sanitizer.MAX_MESSAGE_LENGTH); } @Test public void testSanitizeValidMessage() throws Exception { String originMessage = createString(10); String message = Sanitizer.sanitizeMessage(originMessage); assertNotNull(message); assertEquals(message, originMessage); } @Test public void testSafeStringToUrlWithNull() throws Exception { URI url = Sanitizer.safeStringToUri(null); assertNull(url); } @Test public void testSafeStringToUrlWithEmpty() throws Exception { URI uri = Sanitizer.sanitizeUri(""); assertNull(uri); } @Test public void testSafeStringToUrlWithValid() throws Exception { URI uri = Sanitizer.sanitizeUri(VALID_URL); assertNotNull(uri); } @Test public void testSafeStringToUrlWithNonValid() throws Exception { URI uri = Sanitizer.sanitizeUri(NON_VALID_URL); assertNull(uri); } private String createString(int length) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; ++i) { sb.append('a'); } return sb.toString(); } }