password.pwm.config.profile.RuleHelperTest.java Source code

Java tutorial

Introduction

Here is the source code for password.pwm.config.profile.RuleHelperTest.java

Source

/*
 * Password Management Servlets (PWM)
 * http://www.pwm-project.org
 *
 * Copyright (c) 2006-2009 Novell, Inc.
 * Copyright (c) 2009-2017 The PWM Project
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package password.pwm.config.profile;

import org.apache.commons.lang3.StringUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import password.pwm.config.profile.PwmPasswordPolicy.RuleHelper;
import password.pwm.util.macro.MacroMachine;

import java.util.List;
import java.util.regex.Pattern;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static password.pwm.config.profile.PwmPasswordRule.RegExMatch;

public class RuleHelperTest {
    private static final String[][] MACRO_MAP = new String[][] { { "@User:ID@", "fflintstone" },
            { "@User:Email@", "fred@flintstones.tv" }, { "@LDAP:givenName@", "Fred" },
            { "@LDAP:sn@", "Flintstone" } };

    private MacroMachine macroMachine = mock(MacroMachine.class);
    private RuleHelper ruleHelper = mock(RuleHelper.class);

    @Before
    public void setUp() throws Exception {
        // Mock out things that don't need to be real
        when(macroMachine.expandMacros(anyString())).thenAnswer(replaceAllMacrosInMap(MACRO_MAP));
        when(ruleHelper.readBooleanValue(PwmPasswordRule.AllowMacroInRegExSetting)).thenReturn(Boolean.TRUE);
        when(ruleHelper.readRegExSetting(any(PwmPasswordRule.class), any(MacroMachine.class), anyString()))
                .thenCallRealMethod();
    }

    @Test
    public void testReadRegExSetting_noRegex() throws Exception {
        final String input = "@User:ID@, First Name: @LDAP:givenName@, Last Name: @LDAP:sn@, Email: @User:Email@";

        final List<Pattern> patterns = ruleHelper.readRegExSetting(RegExMatch, macroMachine, input);

        assertThat(patterns.size()).isEqualTo(1);
        assertThat(patterns.get(0).pattern())
                .isEqualTo("fflintstone, First Name: Fred, Last Name: Flintstone, Email: fred@flintstones.tv");
    }

    @Test
    public void testReadRegExSetting() throws Exception {
        final String input = "^@User:ID@[0-9]+$;;;^password$";

        final List<Pattern> patterns = ruleHelper.readRegExSetting(RegExMatch, macroMachine, input);

        assertThat(patterns.size()).isEqualTo(2);
        assertThat(patterns.get(0).pattern()).isEqualTo("^fflintstone[0-9]+$");
        assertThat(patterns.get(1).pattern()).isEqualTo("^password$");
    }

    private Answer<String> replaceAllMacrosInMap(final String[][] macroMap) {
        return new Answer<String>() {
            @Override
            public String answer(InvocationOnMock invocation) throws Throwable {
                final String[] macroNames = new String[macroMap.length];
                final String[] macroValues = new String[macroMap.length];

                for (int i = 0; i < macroMap.length; i++) {
                    macroNames[i] = macroMap[i][0];
                    macroValues[i] = macroMap[i][1];
                }

                final String stringWithMacros = invocation.getArgument(0);
                return StringUtils.replaceEach(stringWithMacros, macroNames, macroValues);
            }
        };
    }
}