/*
* Copyright (c) 2016 Network New Technologies Inc.
*
* 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.networknt.mask;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingProvider;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.EnumSet;
import java.util.Set;
public class MaskTest {
@BeforeClass
public static void configJsonPath() {
Configuration.setDefaults(new Configuration.Defaults() {
private final JsonProvider jsonProvider = new JacksonJsonProvider();
private final MappingProvider mappingProvider = new JacksonMappingProvider();
@Override
public JsonProvider jsonProvider() {
return jsonProvider;
}
@Override
public MappingProvider mappingProvider() {
return mappingProvider;
}
@Override
public Set<Option> options() {
return EnumSet.noneOf(Option.class);
}
});
}
@Test
public void testMaskString() {
String url1 = "/v1/customer?sin=123456789&password=secret&number=1234567890123456";
String output = Mask.maskString(url1, "uri");
System.out.println("ouput = " + output);
Assert.assertEquals("/v1/customer?sin=masked&password=******&number=----------------", output);
}
@Test
public void testMaskQueryParameter() {
String test = "aaaa";
String output = Mask.maskRegex(test, "queryParameter", "accountNo");
System.out.println("output = " + output);
Assert.assertEquals(output, "****");
}
@Test
public void testMaskRequestHeader() {
String testHeader1 = "test";
String testHeader2 = "tests";
String output1 = Mask.maskRegex(testHeader1, "requestHeader", "header1");
System.out.println("output1 = " + output1);
Assert.assertEquals(output1, "****");
String output2 = Mask.maskRegex(testHeader2, "requestHeader", "header2");
Assert.assertEquals(output2, "*****");
}
@Test
public void testMaskResponseHeader() {
String testHeader = "header";
String output = Mask.maskRegex(testHeader, "responseHeader", "header3");
System.out.println("output = " + output);
Assert.assertEquals(output, "******");
}
@Test
public void testMaskRequestBody() {
String input = "{\"name\":\"Steve\",\"contact\":{\"phone\":\"416-111-1111\"},\"password\":\"secret\"}";
String output = Mask.maskJson(input, "test1");
System.out.println(output);
Assert.assertEquals(JsonPath.parse(output).read("$.contact.phone"), "************");
Assert.assertEquals(JsonPath.parse(output).read("$.password"), "******");
Assert.assertEquals(output, "{\"name\":\"Steve\",\"contact\":{\"phone\":\"************\"},\"password\":\"******\"}");
}
@Test
public void testMaskResponseBody() {
String input = "{\"name\":\"Steve\",\"list\":[\"secret1\", \"secret2\"],\"password\":\"secret\"}";
String output = Mask.maskJson(input, "test2");
System.out.println(output);
//TODO mask a list of values doesn't work. Fix it.
//Assert.assertEquals(JsonPath.parse(output).read("$.list[1]"), "*******");
//Assert.assertEquals(JsonPath.parse(output).read("$.password"), "******");
}
}