StringAnonymizerTest.java

/**
 * Copyright (c) 2017, RTE (http://www.rte-france.com)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 * SPDX-License-Identifier: MPL-2.0
 */
package com.powsybl.commons.util;

import org.junit.jupiter.api.Test;

import java.io.*;

import static org.junit.jupiter.api.Assertions.*;

/**
 * @author Geoffroy Jamgotchian {@literal <geoffroy.jamgotchian at rte-france.com>}
 */
class StringAnonymizerTest {

    private static String toCsv(StringAnonymizer anonymizer) throws IOException {
        StringWriter stringWriter = new StringWriter();
        BufferedWriter writer = new BufferedWriter(stringWriter);
        try {
            anonymizer.writeCsv(writer);
        } finally {
            writer.close();
        }
        return stringWriter.toString();
    }

    private static StringAnonymizer fromCsv(String csv) throws IOException {
        StringAnonymizer anonymizer = new StringAnonymizer();
        try (BufferedReader reader = new BufferedReader(new StringReader(csv))) {
            anonymizer.readCsv(reader);
        }
        return anonymizer;
    }

    @Test
    void test() throws IOException {
        StringAnonymizer anonymizer = new StringAnonymizer();
        String anonymizedFoo = anonymizer.anonymize("foo");
        String anonymizedBar = anonymizer.anonymize("bar");
        assertNotEquals(anonymizedFoo, anonymizedBar);
        assertEquals("A", anonymizedFoo);
        assertEquals("B", anonymizedBar);
        assertEquals(anonymizedFoo, anonymizer.anonymize("foo"));
        assertEquals("foo", anonymizer.deanonymize(anonymizedFoo));
        assertEquals("bar", anonymizer.deanonymize(anonymizedBar));
        assertNull(anonymizer.anonymize(null));
        assertNull(anonymizer.deanonymize(null));
        try {
            anonymizer.deanonymize("baz");
            fail();
        } catch (Exception ignored) {
        }
        String csv = toCsv(anonymizer);
        assertEquals(String.join(System.lineSeparator(), "foo;A", "bar;B") + System.lineSeparator(),
                     csv.toString());
        StringAnonymizer anonymizer2 = fromCsv(csv);
        assertEquals("foo", anonymizer2.deanonymize(anonymizedFoo));
        assertEquals("bar", anonymizer2.deanonymize(anonymizedBar));
    }

    @Test
    void invalidFileTest() throws IOException {
        String csv = String.join(System.lineSeparator(),
                "",
                "A;B");
        StringAnonymizer anonymizer = fromCsv(csv);
        assertEquals(1, anonymizer.getStringCount());
    }

    @Test
    void invalidFileTest2() throws IOException {
        String csv = String.join(System.lineSeparator(),
                "C");
        assertThrows(RuntimeException.class, () -> fromCsv(csv));
    }

    @Test
    void embeddedNewLineTest() throws IOException {
        StringAnonymizer anonymizer = new StringAnonymizer();
        String anonymizedFoo = anonymizer.anonymize("foo\nbar");
        StringAnonymizer anonymizer2 = fromCsv(toCsv(anonymizer));
        assertEquals("foo\nbar", anonymizer2.deanonymize(anonymizedFoo));
    }

    @Test
    void embeddedSeparatorTest() throws IOException {
        StringAnonymizer anonymizer = new StringAnonymizer();
        String anonymizedFoo = anonymizer.anonymize("foo;bar");
        StringAnonymizer anonymizer2 = fromCsv(toCsv(anonymizer));
        assertEquals("foo;bar", anonymizer2.deanonymize(anonymizedFoo));
    }
}