Repository: mina-sshd
Updated Branches:
  refs/heads/master d2f8d47d2 -> 970a1e776


Fixed problem discovered by 
PublickeyAuthenticatorTest#testAcceptAllPublickeyAuthenticator


Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/970a1e77
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/970a1e77
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/970a1e77

Branch: refs/heads/master
Commit: 970a1e7768e3e1e033a0b6dcf4c43d23c808854a
Parents: d2f8d47
Author: Lyor Goldstein <[email protected]>
Authored: Tue Aug 18 12:31:54 2015 +0300
Committer: Lyor Goldstein <[email protected]>
Committed: Tue Aug 18 12:31:54 2015 +0300

----------------------------------------------------------------------
 .../pubkey/StaticPublickeyAuthenticator.java    |  4 +-
 .../sshd/server/PublickeyAuthenticatorTest.java | 54 +++++++++++++-------
 2 files changed, 38 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/970a1e77/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java
 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java
index 29f7a57..3aba17f 100644
--- 
a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java
+++ 
b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/StaticPublickeyAuthenticator.java
@@ -51,13 +51,13 @@ public abstract class StaticPublickeyAuthenticator extends 
AbstractLoggingBean i
     protected void handleAcceptance(String username, PublicKey key, 
ServerSession session) {
         // accepting without really checking is dangerous, thus the warning
         log.warn("authenticate({}[{}][{}][{}]: accepted without checking",
-                 username, session, key.getAlgorithm(), 
KeyUtils.getFingerPrint(key));
+                 username, session, (key == null) /* don't care about the key 
*/ ? "null" : key.getAlgorithm(), KeyUtils.getFingerPrint(key));
     }
 
     protected void handleRejection(String username, PublicKey key, 
ServerSession session) {
         if (log.isDebugEnabled()) {
             log.debug("authenticate({}[{}][{}][{}]: rejected",
-                      username, session, key.getAlgorithm(), 
KeyUtils.getFingerPrint(key));
+                      username, session, (key == null) /* don't care about the 
key */ ? "null" : key.getAlgorithm(), KeyUtils.getFingerPrint(key));
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/970a1e77/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java
----------------------------------------------------------------------
diff --git 
a/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java
 
b/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java
index 36889ee..33e32e2 100644
--- 
a/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java
+++ 
b/sshd-core/src/test/java/org/apache/sshd/server/PublickeyAuthenticatorTest.java
@@ -19,10 +19,12 @@
 
 package org.apache.sshd.server;
 
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.math.BigInteger;
 import java.security.PublicKey;
+import java.security.interfaces.RSAPublicKey;
 import java.util.Arrays;
-import java.util.Random;
 
 import org.apache.sshd.common.util.GenericUtils;
 import org.apache.sshd.server.auth.pubkey.AcceptAllPublickeyAuthenticator;
@@ -46,38 +48,54 @@ public class PublickeyAuthenticatorTest extends 
BaseTestSupport {
     }
 
     @Test
-    public void testAcceptAllPublickeyAuthenticator() throws Exception {
+    public void testAcceptAllPublickeyAuthenticator() throws Throwable {
         
testStaticPublickeyAuthenticator(AcceptAllPublickeyAuthenticator.INSTANCE);
     }
 
     @Test
-    public void testRejectAllPublickeyAuthenticator() throws Exception {
+    public void testRejectAllPublickeyAuthenticator() throws Throwable {
         
testStaticPublickeyAuthenticator(RejectAllPublickeyAuthenticator.INSTANCE);
     }
 
-    private void testStaticPublickeyAuthenticator(StaticPublickeyAuthenticator 
authenticator) throws Exception {
+    private void testStaticPublickeyAuthenticator(StaticPublickeyAuthenticator 
authenticator) throws Throwable {
         Method method = PublickeyAuthenticator.class.getMethod("authenticate", 
String.class, PublicKey.class, ServerSession.class);
-        PublicKey key = Mockito.mock(PublicKey.class);
+        RSAPublicKey key = Mockito.mock(RSAPublicKey.class);
         Mockito.when(key.getAlgorithm()).thenReturn(getCurrentTestName());
         
Mockito.when(key.getEncoded()).thenReturn(GenericUtils.EMPTY_BYTE_ARRAY);
         Mockito.when(key.getFormat()).thenReturn(getCurrentTestName());
+        Mockito.when(key.getModulus()).thenReturn(BigInteger.TEN);
+        Mockito.when(key.getPublicExponent()).thenReturn(BigInteger.ONE);
 
-        Object[] args = {getCurrentTestName(), key, null /* ServerSession */};
-        Object[] invArgs = new Object[args.length];
-        Random rnd = new Random(System.nanoTime());
+        ServerSession session = Mockito.mock(ServerSession.class);
+        Object[] invArgs = new Object[] { null /* username */, null /* key */, 
null /* server session */ };
         boolean expected = authenticator.isAccepted();
-        for (int index = 0; index < Long.SIZE; index++) {
-            for (int j = 0; j < args.length; j++) {
-                if (rnd.nextBoolean()) {
-                    invArgs[j] = args[j];
-                } else {
-                    invArgs[j] = null;
+        boolean[] flags = new boolean[] { false, true };
+        for (boolean useUsername : flags) {
+            invArgs[0] = useUsername ? getCurrentTestName() : null;
+
+            for (boolean useKey : flags) {
+                invArgs[1] = useKey ? key : null;
+
+                for (boolean useSession : flags) {
+                    invArgs[2] = useSession ? session : null;
+
+                    Object result;
+                    try {
+                        result = method.invoke(authenticator, invArgs);
+                    } catch(InvocationTargetException e) {
+                        Throwable t = e.getTargetException();   // peel of the 
real exception
+                        System.err.println("Failed (" + 
t.getClass().getSimpleName() + ")"
+                                          + " to invoke with user=" + 
useUsername
+                                          + ", key=" + useKey
+                                          + ", session=" + useSession
+                                          + ": " + t.getMessage());
+                        throw t;
+                    }
+
+                    assertTrue("No boolean result", result instanceof Boolean);
+                    assertEquals("Mismatched result for " + 
Arrays.toString(invArgs), expected, ((Boolean) result).booleanValue());
                 }
             }
-
-            Object result = method.invoke(authenticator, invArgs);
-            assertTrue("No boolean result", result instanceof Boolean);
-            assertEquals("Mismatched result for " + Arrays.toString(invArgs), 
expected, ((Boolean) result).booleanValue());
         }
     }
 }

Reply via email to