package org.talend.dataquality.datamasking.functions; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; import org.junit.Before; import org.junit.Test; public class GenerateUniqueRandomPatternsTest { private GenerateUniqueRandomPatterns pattern; @Before public void setUp() throws Exception { // pattern we want to test List<AbstractField> fields = new ArrayList<AbstractField>(); List<String> enums = new ArrayList<String>(Arrays.asList("O", "P", "G", "U", "M", "S")); fields.add(new FieldEnum(enums, 1)); enums = new ArrayList<String>(Arrays.asList("SF", "KI", "QG", "DU")); fields.add(new FieldEnum(enums, 2)); fields.add(new FieldInterval(0, 500)); fields.add(new FieldInterval(5, 20)); pattern = new GenerateUniqueRandomPatterns(fields); pattern.setKey(new Random(454594).nextInt() % 10000 + 1000); } @Test public void testGenerateUniqueString() { StringBuilder result = pattern.generateUniqueString(new ArrayList<String>(Arrays.asList("U", "KI", "453", "12"))); assertEquals(result.toString(), "USF40818"); // test with padding 0 result = pattern.generateUniqueString(new ArrayList<String>(Arrays.asList("U", "KI", "123", "12"))); assertEquals(result.toString(), "UKI40518"); } @Test public void testOutLimit() { StringBuilder result = pattern.generateUniqueString(new ArrayList<String>(Arrays.asList("U", "KI", "502", "12"))); assertEquals(result, null); } @Test public void testUnique() { Set<StringBuilder> uniqueSetTocheck = new HashSet<StringBuilder>(); for (long i = 0; i < pattern.getFields().get(0).getWidth(); i++) for (long j = 0; j < pattern.getFields().get(1).getWidth(); j++) for (long k = 0; k < pattern.getFields().get(2).getWidth(); k++) for (long l = 0; l < pattern.getFields().get(3).getWidth(); l++) { StringBuilder uniqueMaskedNumber = pattern.generateUniqueString(new ArrayList<String>( Arrays.asList(pattern.getFields().get(0).decode(i), pattern.getFields().get(1).decode(j), pattern.getFields().get(2).decode(k), pattern.getFields().get(3).decode(l)))); assertFalse(" we found twice the uniqueMaskedNumberList " + uniqueMaskedNumber, uniqueSetTocheck.contains(uniqueMaskedNumber)); uniqueSetTocheck.add(uniqueMaskedNumber); } } }