/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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 org.pentaho.di.core.encryption;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
import org.junit.Test;
import org.pentaho.di.core.KettleClientEnvironment;
import org.pentaho.di.core.exception.KettleValueException;
/**
* Test cases for encryption, to make sure that encrypted password remain the same between versions.
*
* @author Matt Casters
*/
public class KettleTwoWayPasswordEncoderTest {
@BeforeClass
public static void setUpBeforeClass() throws Exception {
KettleClientEnvironment.init();
}
/**
* Test password encryption.
*
* @throws KettleValueException
*/
@Test
public void testEncode1() throws KettleValueException {
KettleTwoWayPasswordEncoder encoder = new KettleTwoWayPasswordEncoder();
String encryption;
encryption = encoder.encode( null, false );
assertTrue( "".equals( encryption ) );
encryption = encoder.encode( "", false );
assertTrue( "".equals( encryption ) );
encryption = encoder.encode( " ", false );
assertTrue( "2be98afc86aa7f2e4cb79ce309ed2ef9a".equals( encryption ) );
encryption = encoder.encode( "Test of different encryptions!!@#$%", false );
assertTrue( "54657374206f6620646966666572656e742067d0fbddb11ad39b8ba50aef31fed1eb9f".equals( encryption ) );
encryption = encoder.encode( " Spaces left", false );
assertTrue( "2be98afe84af48285a81cbd30d297a9ce".equals( encryption ) );
encryption = encoder.encode( "Spaces right", false );
assertTrue( "2be98afc839d79387ae0aee62d795a7ce".equals( encryption ) );
encryption = encoder.encode( " Spaces ", false );
assertTrue( "2be98afe84a87d2c49809af73db81ef9a".equals( encryption ) );
encryption = encoder.encode( "1234567890", false );
assertTrue( "2be98afc86aa7c3d6f84dfb2689caf68a".equals( encryption ) );
}
/**
* Test password decryption.
*
* @throws KettleValueException
*/
@Test
public void testDecode1() throws KettleValueException {
KettleTwoWayPasswordEncoder encoder = new KettleTwoWayPasswordEncoder();
String encryption;
String decryption;
encryption = encoder.encode( null );
decryption = encoder.decode( encryption );
assertTrue( "".equals( decryption ) );
encryption = encoder.encode( "" );
decryption = encoder.decode( encryption );
assertTrue( "".equals( decryption ) );
encryption = encoder.encode( " " );
decryption = encoder.decode( encryption );
assertTrue( " ".equals( decryption ) );
encryption = encoder.encode( "Test of different encryptions!!@#$%" );
decryption = encoder.decode( encryption );
assertTrue( "Test of different encryptions!!@#$%".equals( decryption ) );
encryption = encoder.encode( " Spaces left" );
decryption = encoder.decode( encryption );
assertTrue( " Spaces left".equals( decryption ) );
encryption = encoder.encode( "Spaces right" );
decryption = encoder.decode( encryption );
assertTrue( "Spaces right".equals( decryption ) );
encryption = encoder.encode( " Spaces " );
decryption = encoder.decode( encryption );
assertTrue( " Spaces ".equals( decryption ) );
encryption = encoder.encode( "1234567890" );
decryption = encoder.decode( encryption );
assertTrue( "1234567890".equals( decryption ) );
assertEquals( "", encoder.decode( null ) );
}
/**
* Test password encryption (variable style).
*
* @throws KettleValueException
*/
@Test
public void testEncode2() throws KettleValueException {
KettleTwoWayPasswordEncoder encoder = new KettleTwoWayPasswordEncoder();
String encryption;
encryption = encoder.encode( null );
assertTrue( "Encrypted ".equals( encryption ) );
encryption = encoder.encode( "" );
assertTrue( "Encrypted ".equals( encryption ) );
encryption = encoder.encode( "String" );
assertTrue( "Encrypted 2be98afc86aa7f2e4cb799d64cc9ba1dd".equals( encryption ) );
encryption = encoder.encode( " ${VAR} String" );
assertTrue( " ${VAR} String".equals( encryption ) );
encryption = encoder.encode( " %%VAR%% String" );
assertTrue( " %%VAR%% String".equals( encryption ) );
encryption = encoder.encode( " %% VAR String" );
assertTrue( "Encrypted 2be988fed4f87a4a599599d64cc9ba1dd".equals( encryption ) );
encryption = encoder.encode( "${%%$$$$" );
assertTrue( "Encrypted 2be98afc86aa7f2e4ef02eb359ad6eb9e".equals( encryption ) );
}
/**
* Test password decryption (variable style).
*
* @throws KettleValueException
*/
@Test
public void testDecode2() throws KettleValueException {
KettleTwoWayPasswordEncoder encoder = new KettleTwoWayPasswordEncoder();
String encryption;
String decryption;
encryption = encoder.encode( null );
decryption = encoder.decode( encryption );
assertTrue( "".equals( decryption ) );
encryption = encoder.encode( "" );
decryption = encoder.decode( encryption );
assertTrue( "".equals( decryption ) );
encryption = encoder.encode( "String" );
decryption = encoder.decode( encryption );
assertTrue( "String".equals( decryption ) );
encryption = encoder.encode( " ${VAR} String", false );
decryption = encoder.decode( encryption );
assertTrue( " ${VAR} String".equals( decryption ) );
encryption = encoder.encode( " %%VAR%% String", false );
decryption = encoder.decode( encryption );
assertTrue( " %%VAR%% String".equals( decryption ) );
encryption = encoder.encode( " %% VAR String", false );
decryption = encoder.decode( encryption );
assertTrue( " %% VAR String".equals( decryption ) );
encryption = encoder.encode( "${%%$$$$", false );
decryption = encoder.decode( encryption );
assertTrue( "${%%$$$$".equals( decryption ) );
}
}