Author: swagle
Date: Wed Jun 19 03:02:00 2013
New Revision: 1494426
URL: http://svn.apache.org/r1494426
Log:
AMBARI-2397. Unencrypted master key stored in temporary file. Unit Test.
(swagle)
Added:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/encryption/CredentialProviderTest.java
Added:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/encryption/CredentialProviderTest.java
URL:
http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/encryption/CredentialProviderTest.java?rev=1494426&view=auto
==============================================================================
---
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/encryption/CredentialProviderTest.java
(added)
+++
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/security/encryption/CredentialProviderTest.java
Wed Jun 19 03:02:00 2013
@@ -0,0 +1,140 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.ambari.server.security.encryption;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import java.io.File;
+import java.io.IOException;
+
+public class CredentialProviderTest extends TestCase {
+ private String keystore_dir;
+ private static final Log LOG = LogFactory.getLog
+ (CredentialProviderTest.class);
+
+ @Rule
+ public TemporaryFolder tmpFolder = new TemporaryFolder();
+
+ @Override
+ protected void setUp() throws Exception {
+ tmpFolder.create();
+ keystore_dir = tmpFolder.getRoot().getAbsolutePath();
+ }
+
+ private void createMasterKey(String dir) {
+ File f = new File(dir + System.getProperty("file" +
+ ".separator") + Configuration.MASTER_KEY_FILENAME_DEFAULT);
+ if (!f.exists()) {
+ try {
+ f.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ MasterKeyService ms = new MasterKeyServiceImpl("blahblah!",
+ f.getAbsolutePath(), true);
+ if (!ms.isMasterKeyInitialized()) {
+ throw new ExceptionInInitializerError("Cannot create master key.");
+ }
+ }
+
+ @Test
+ public void testInitialization() throws Exception {
+ CredentialProvider cr = null;
+ String msFile = keystore_dir + System.getProperty("file" +
+ ".separator") + Configuration.MASTER_KEY_FILENAME_DEFAULT;
+ try {
+ new CredentialProvider(null, null, true);
+ fail("Expected an exception");
+ } catch (Throwable t) {
+ Assert.assertTrue(t instanceof IllegalArgumentException);
+ }
+ try {
+ new CredentialProvider(null, msFile, true);
+ fail("Expected an exception");
+ } catch (Throwable t) {
+ Assert.assertTrue(t instanceof AmbariException);
+ }
+ // Without master key persisted
+ cr = new CredentialProvider("blahblah!", msFile, false);
+ Assert.assertNotNull(cr);
+ Assert.assertNotNull(cr.getKeystoreService());
+ // With master key persisted
+ createMasterKey(keystore_dir);
+ cr = new CredentialProvider(null, msFile, true);
+ Assert.assertNotNull(cr);
+ Assert.assertNotNull(cr.getKeystoreService());
+ }
+
+ @Test
+ public void testIsAliasString() {
+ String test = "cassablanca";
+ Assert.assertFalse(CredentialProvider.isAliasString(test));
+ test = "${}";
+ Assert.assertFalse(CredentialProvider.isAliasString(test));
+ test = "{}";
+ Assert.assertFalse(CredentialProvider.isAliasString(test));
+ test = "{cassablanca}";
+ Assert.assertFalse(CredentialProvider.isAliasString(test));
+ test = "${cassablanca}";
+ Assert.assertFalse(CredentialProvider.isAliasString(test));
+ test = "${alias=cassablanca}";
+ Assert.assertTrue(CredentialProvider.isAliasString(test));
+ }
+
+ @Test
+ public void testCredentialStore() throws Exception {
+ String msFile = keystore_dir + System.getProperty("file" +
+ ".separator") + Configuration.MASTER_KEY_FILENAME_DEFAULT;
+ // With master key persisted
+ createMasterKey(keystore_dir);
+ CredentialProvider cr = new CredentialProvider(null, msFile, true);
+ Assert.assertNotNull(cr);
+ Assert.assertNotNull(cr.getKeystoreService());
+
+ try {
+ cr.addAliasToCredentialStore("", "xyz");
+ fail("Expected an exception");
+ } catch (Throwable t) {
+ Assert.assertTrue(t instanceof IllegalArgumentException);
+ }
+
+ try {
+ cr.addAliasToCredentialStore("xyz", null);
+ fail("Expected an exception");
+ } catch (Throwable t) {
+ Assert.assertTrue(t instanceof IllegalArgumentException);
+ }
+
+ cr.addAliasToCredentialStore("myalias", "mypassword");
+ Assert.assertEquals("mypassword", new String(cr.getPasswordForAlias
+ ("myalias")));
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ tmpFolder.delete();
+ }
+}