summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Wall <kwall@apache.org>2012-02-15 09:13:55 +0000
committerKeith Wall <kwall@apache.org>2012-02-15 09:13:55 +0000
commit055864d41ad23deb3f0b63fa65adb5bc2cd0871b (patch)
tree140754e29d80a0c5a6e7236a0bf24c7d22c97403
parent29389c473d4ff7983b21e7826c4cf80b6cd59c28 (diff)
downloadqpid-python-055864d41ad23deb3f0b63fa65adb5bc2cd0871b.tar.gz
QPID-3840: added automated tests for the Java Broker's qpid-passwd script and Passwd class
Applied patch from Andrew MacBean <andymacbean@gmail.com> and Philip Harvey <phil@philharveyonline.com> git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1244406 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--java/broker/src/main/java/org/apache/qpid/tools/security/Passwd.java48
-rw-r--r--java/broker/src/test/java/org/apache/qpid/tools/security/PasswdTest.java38
-rw-r--r--java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java67
-rwxr-xr-xjava/test-profiles/CPPExcludes3
4 files changed, 127 insertions, 29 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/tools/security/Passwd.java b/java/broker/src/main/java/org/apache/qpid/tools/security/Passwd.java
index ae150708ca..cd833c89c4 100644
--- a/java/broker/src/main/java/org/apache/qpid/tools/security/Passwd.java
+++ b/java/broker/src/main/java/org/apache/qpid/tools/security/Passwd.java
@@ -14,26 +14,26 @@
* "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.
+ * under the License.
+ *
*
- *
*/
package org.apache.qpid.tools.security;
-import org.apache.commons.codec.binary.Base64;
-
import java.io.IOException;
-import java.io.PrintStream;
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
import java.security.DigestException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
+import org.apache.commons.codec.binary.Base64;
+
+/**
+ * Utility to generate user:encodedPassword string for use in md5passwd
+ */
public class Passwd
{
- private Passwd()
- {
- }
-
public static void main(String args[]) throws NoSuchAlgorithmException, DigestException, IOException
{
if (args.length != 2)
@@ -42,7 +42,14 @@ public class Passwd
System.exit(0);
}
- byte[] data = args[1].getBytes("utf-8");
+ Passwd passwd = new Passwd();
+ String output = passwd.getOutput(args[0], args[1]);
+ System.out.println(output);
+ }
+
+ public String getOutput(String userName, String password) throws UnsupportedEncodingException, NoSuchAlgorithmException
+ {
+ byte[] data = password.getBytes("utf-8");
MessageDigest md = MessageDigest.getInstance("MD5");
@@ -57,24 +64,7 @@ public class Passwd
byte[] encoded = b64.encode(digest);
- output(args[0], encoded);
- }
-
- private static void output(String user, byte[] encoded) throws IOException
- {
- PrintStream ps = new PrintStream(System.out);
-
- user += ":";
- ps.write(user.getBytes("utf-8"));
-
- for (byte b : encoded)
- {
- ps.write(b);
- }
-
- ps.println();
-
- ps.flush();
- ps.close();
+ String encodedStr = new String(encoded, Charset.forName("utf-8"));
+ return userName + ":" + encodedStr;
}
}
diff --git a/java/broker/src/test/java/org/apache/qpid/tools/security/PasswdTest.java b/java/broker/src/test/java/org/apache/qpid/tools/security/PasswdTest.java
new file mode 100644
index 0000000000..b2a7234c8a
--- /dev/null
+++ b/java/broker/src/test/java/org/apache/qpid/tools/security/PasswdTest.java
@@ -0,0 +1,38 @@
+/*
+ * 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.qpid.tools.security;
+
+import junit.framework.TestCase;
+
+public class PasswdTest extends TestCase
+{
+ public void testUserGuestAndPasswordGuest() throws Exception
+ {
+ Passwd passwd = new Passwd();
+ String output = passwd.getOutput("guest", "guest");
+ assertEquals("guest:CE4DQ6BIb/BVMN9scFyLtA==", output);
+ }
+
+ public void testUser1AndPasswordFoo() throws Exception
+ {
+ Passwd passwd = new Passwd();
+ String output = passwd.getOutput("user1", "foo");
+ assertEquals("user1:rL0Y20zC+Fzt72VPzMSk2A==", output);
+ }
+}
diff --git a/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java b/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java
new file mode 100644
index 0000000000..f8a2fc15a8
--- /dev/null
+++ b/java/systests/src/main/java/org/apache/qpid/scripts/QpidPasswdTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.qpid.scripts;
+
+import java.io.File;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.qpid.test.utils.Piper;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class QpidPasswdTest extends QpidTestCase
+{
+ private static final String PASSWD_SCRIPT = "qpid-passwd";
+ private static final String EXPECTED_OUTPUT = "user1:rL0Y20zC+Fzt72VPzMSk2A==";
+
+ public void testRunScript() throws Exception
+ {
+ Process process = null;
+ try
+ {
+ String scriptPath =
+ QpidTestCase.QPID_HOME + File.separatorChar
+ + "bin" + File.separatorChar
+ + PASSWD_SCRIPT;
+
+ ProcessBuilder pb = new ProcessBuilder(scriptPath, "user1", "foo");
+ process = pb.start();
+
+ Piper piper = new Piper(process.getInputStream(), System.out, EXPECTED_OUTPUT, EXPECTED_OUTPUT);
+ piper.start();
+
+ boolean finishedSuccessfully = piper.await(2, TimeUnit.SECONDS);
+ assertTrue("Script should have completed with expected output " + EXPECTED_OUTPUT, finishedSuccessfully);
+
+ process.waitFor();
+ piper.join();
+
+ assertEquals("Unexpected exit value from backup script", 0, process.exitValue());
+ }
+ finally
+ {
+ if (process != null)
+ {
+ process.getErrorStream().close();
+ process.getInputStream().close();
+ process.getOutputStream().close();
+ }
+ }
+
+ }
+}
diff --git a/java/test-profiles/CPPExcludes b/java/test-profiles/CPPExcludes
index 52488b3ffa..14671f97af 100755
--- a/java/test-profiles/CPPExcludes
+++ b/java/test-profiles/CPPExcludes
@@ -166,3 +166,6 @@ org.apache.qpid.server.queue.MessageGroupQueueTest#testGroupAssignmentSurvivesEm
// CPP Broker does not implement message conversion from 0-9-1
org.apache.qpid.server.message.MessageProtocolConversionTest#*
+
+// passwd script is a Java Broker specific command line tool
+org.apache.qpid.scripts.QpidPasswdTest#*