You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2016/07/15 03:35:27 UTC

mina-sshd git commit: [SSHD-675] Provide default implementations for overloaded configuration methods on Client/ServerFactoryManager interfaces

Repository: mina-sshd
Updated Branches:
  refs/heads/master 4637fbc56 -> e9cab9196


[SSHD-675] Provide default implementations for overloaded configuration methods on Client/ServerFactoryManager interfaces


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

Branch: refs/heads/master
Commit: e9cab91969a75e2fd7134480db19a320521eaaa2
Parents: 4637fbc
Author: Lyor Goldstein <ly...@gmail.com>
Authored: Fri Jul 15 06:36:37 2016 +0300
Committer: Lyor Goldstein <ly...@gmail.com>
Committed: Fri Jul 15 06:36:37 2016 +0300

----------------------------------------------------------------------
 pom.xml                                         |   2 +-
 .../auth/hostbased/UserAuthHostBased.java       |   2 +-
 .../client/auth/pubkey/KeyPairIdentity.java     |   2 +-
 .../sshd/common/kex/KexFactoryManager.java      |  75 ++++++++
 .../signature/SignatureFactoriesManager.java    |  76 +++++---
 .../auth/hostbased/UserAuthHostBased.java       |   2 +-
 .../server/auth/pubkey/UserAuthPublicKey.java   |   2 +-
 .../server/global/OpenSshHostKeysHandler.java   |   2 +-
 .../sshd/common/kex/KexFactoryManagerTest.java  | 188 +++++++++++++++++++
 9 files changed, 315 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5d8b186..668a33c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -112,7 +112,7 @@
             <dependency>
                 <groupId>org.apache.mina</groupId>
                 <artifactId>mina-core</artifactId>
-                <version>2.0.10</version>
+                <version>2.0.13</version>
             </dependency>
             <dependency>
                 <groupId>tomcat</groupId>

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/client/auth/hostbased/UserAuthHostBased.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/hostbased/UserAuthHostBased.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/hostbased/UserAuthHostBased.java
index e57a75b..3d8c832 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/hostbased/UserAuthHostBased.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/hostbased/UserAuthHostBased.java
@@ -113,7 +113,7 @@ public class UserAuthHostBased extends AbstractUserAuth implements SignatureFact
 
         Collection<NamedFactory<Signature>> factories =
                 ValidateUtils.checkNotNullAndNotEmpty(
-                        SignatureFactoriesManager.Utils.resolveSignatureFactories(this, session),
+                        SignatureFactoriesManager.resolveSignatureFactories(this, session),
                         "No signature factories for session=%s",
                         session);
         Signature verifier = ValidateUtils.checkNotNull(

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/client/auth/pubkey/KeyPairIdentity.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/pubkey/KeyPairIdentity.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/pubkey/KeyPairIdentity.java
index 90f560e..02400cd 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/pubkey/KeyPairIdentity.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/pubkey/KeyPairIdentity.java
@@ -40,7 +40,7 @@ public class KeyPairIdentity implements PublicKeyIdentity {
 
     public KeyPairIdentity(SignatureFactoriesManager primary, SignatureFactoriesManager secondary, KeyPair pair) {
         this.signatureFactories = ValidateUtils.checkNotNullAndNotEmpty(
-                SignatureFactoriesManager.Utils.resolveSignatureFactories(primary, secondary),
+                SignatureFactoriesManager.resolveSignatureFactories(primary, secondary),
                 "No available signature factories");
         this.pair = ValidateUtils.checkNotNull(pair, "No key pair");
     }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/common/kex/KexFactoryManager.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/kex/KexFactoryManager.java b/sshd-core/src/main/java/org/apache/sshd/common/kex/KexFactoryManager.java
index fbe4544..6776f29 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/kex/KexFactoryManager.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/kex/KexFactoryManager.java
@@ -19,14 +19,23 @@
 
 package org.apache.sshd.common.kex;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.common.NamedResource;
+import org.apache.sshd.common.cipher.BuiltinCiphers;
 import org.apache.sshd.common.cipher.Cipher;
+import org.apache.sshd.common.compression.BuiltinCompressions;
 import org.apache.sshd.common.compression.Compression;
 import org.apache.sshd.common.keyprovider.KeyPairProviderHolder;
+import org.apache.sshd.common.mac.BuiltinMacs;
 import org.apache.sshd.common.mac.Mac;
 import org.apache.sshd.common.signature.SignatureFactoriesManager;
+import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.ValidateUtils;
 
 /**
  * Holds KEX negotiation stage configuration
@@ -47,7 +56,29 @@ public interface KexFactoryManager extends KeyPairProviderHolder, SignatureFacto
      * @return a list of named <code>Cipher</code> factories, never {@code null}
      */
     List<NamedFactory<Cipher>> getCipherFactories();
+    default String getCipherFactoriesNameList() {
+        return NamedResource.Utils.getNames(getCipherFactories());
+    }
+    default List<String> getCipherFactoriesNames() {
+        return NamedResource.Utils.getNameList(getCipherFactories());
+    }
+
     void setCipherFactories(List<NamedFactory<Cipher>> cipherFactories);
+    default void setCipherFactoriesNameList(String names) {
+        setCipherFactoriesNames(GenericUtils.split(names, ','));
+    }
+    default void setCipherFactoriesNames(String ... names) {
+        setCipherFactoriesNames(GenericUtils.isEmpty((Object[]) names) ? Collections.<String>emptyList() : Arrays.asList(names));
+    }
+    default void setCipherFactoriesNames(Collection<String> names) {
+        BuiltinCiphers.ParseResult result = BuiltinCiphers.parseCiphersList(names);
+        @SuppressWarnings({ "rawtypes", "unchecked" })
+        List<NamedFactory<Cipher>> factories =
+                (List) ValidateUtils.checkNotNullAndNotEmpty(result.getParsedFactories(), "No supported cipher factories: %s", names);
+        Collection<String> unsupported = result.getUnsupportedFactories();
+        ValidateUtils.checkTrue(GenericUtils.isEmpty(unsupported), "Unsupported cipher factories found: %s", unsupported);
+        setCipherFactories(factories);
+    }
 
     /**
      * Retrieve the list of named factories for <code>Compression</code>.
@@ -55,7 +86,29 @@ public interface KexFactoryManager extends KeyPairProviderHolder, SignatureFacto
      * @return a list of named <code>Compression</code> factories, never {@code null}
      */
     List<NamedFactory<Compression>> getCompressionFactories();
+    default String getCompressionFactoriesNameList() {
+        return NamedResource.Utils.getNames(getCompressionFactories());
+    }
+    default List<String> getCompressionFactoriesNames() {
+        return NamedResource.Utils.getNameList(getCompressionFactories());
+    }
+
     void setCompressionFactories(List<NamedFactory<Compression>> compressionFactories);
+    default void setCompressionFactoriesNameList(String names) {
+        setCompressionFactoriesNames(GenericUtils.split(names, ','));
+    }
+    default void setCompressionFactoriesNames(String ... names) {
+        setCompressionFactoriesNames(GenericUtils.isEmpty((Object[]) names) ? Collections.<String>emptyList() : Arrays.asList(names));
+    }
+    default void setCompressionFactoriesNames(Collection<String> names) {
+        BuiltinCompressions.ParseResult result = BuiltinCompressions.parseCompressionsList(names);
+        @SuppressWarnings({ "rawtypes", "unchecked" })
+        List<NamedFactory<Compression>> factories =
+                (List) ValidateUtils.checkNotNullAndNotEmpty(result.getParsedFactories(), "No supported compression factories: %s", names);
+        Collection<String> unsupported = result.getUnsupportedFactories();
+        ValidateUtils.checkTrue(GenericUtils.isEmpty(unsupported), "Unsupported compression factories found: %s", unsupported);
+        setCompressionFactories(factories);
+    }
 
     /**
      * Retrieve the list of named factories for <code>Mac</code>.
@@ -63,5 +116,27 @@ public interface KexFactoryManager extends KeyPairProviderHolder, SignatureFacto
      * @return a list of named <code>Mac</code> factories, never {@code null}
      */
     List<NamedFactory<Mac>> getMacFactories();
+    default String getMacFactoriesNameList() {
+        return NamedResource.Utils.getNames(getMacFactories());
+    }
+    default List<String> getMacFactoriesNames() {
+        return NamedResource.Utils.getNameList(getMacFactories());
+    }
+
     void setMacFactories(List<NamedFactory<Mac>> macFactories);
+    default void setMacFactoriesNameList(String names) {
+        setMacFactoriesNames(GenericUtils.split(names, ','));
+    }
+    default void setMacFactoriesNames(String ... names) {
+        setMacFactoriesNames(GenericUtils.isEmpty((Object[]) names) ? Collections.<String>emptyList() : Arrays.asList(names));
+    }
+    default void setMacFactoriesNames(Collection<String> names) {
+        BuiltinMacs.ParseResult result = BuiltinMacs.parseMacsList(names);
+        @SuppressWarnings({ "rawtypes", "unchecked" })
+        List<NamedFactory<Mac>> factories =
+                (List) ValidateUtils.checkNotNullAndNotEmpty(result.getParsedFactories(), "No supported MAC factories: %s", names);
+        Collection<String> unsupported = result.getUnsupportedFactories();
+        ValidateUtils.checkTrue(GenericUtils.isEmpty(unsupported), "Unsupported MAC factories found: %s", unsupported);
+        setMacFactories(factories);
+    }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactoriesManager.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactoriesManager.java b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactoriesManager.java
index 696f47c..ff07743 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactoriesManager.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/signature/SignatureFactoriesManager.java
@@ -19,10 +19,15 @@
 
 package org.apache.sshd.common.signature;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.common.NamedResource;
 import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.common.util.ValidateUtils;
 
 /**
  * Manage the list of named factories for <code>Signature</code>.
@@ -34,40 +39,51 @@ public interface SignatureFactoriesManager {
      * @return The list of named <code>Signature</code> factories
      */
     List<NamedFactory<Signature>> getSignatureFactories();
+    default String getSignatureFactoriesNameList() {
+        return NamedResource.Utils.getNames(getSignatureFactories());
+    }
+    default List<String> getSignatureFactoriesNames() {
+        return NamedResource.Utils.getNameList(getSignatureFactories());
+    }
+
     void setSignatureFactories(List<NamedFactory<Signature>> factories);
+    default void setSignatureFactoriesNameList(String names) {
+        setSignatureFactoriesNames(GenericUtils.split(names, ','));
+    }
+    default void setSignatureFactoriesNames(String ... names) {
+        setSignatureFactoriesNames(GenericUtils.isEmpty((Object[]) names) ? Collections.<String>emptyList() : Arrays.asList(names));
+    }
+    default void setSignatureFactoriesNames(Collection<String> names) {
+        BuiltinSignatures.ParseResult result = BuiltinSignatures.parseSignatureList(names);
+        @SuppressWarnings({ "rawtypes", "unchecked" })
+        List<NamedFactory<Signature>> factories =
+                (List) ValidateUtils.checkNotNullAndNotEmpty(result.getParsedFactories(), "No supported signature factories: %s", names);
+        Collection<String> unsupported = result.getUnsupportedFactories();
+        ValidateUtils.checkTrue(GenericUtils.isEmpty(unsupported), "Unsupported signature factories found: %s", unsupported);
+        setSignatureFactories(factories);
+    }
 
     /**
-     * A helper class for signature factories related operations
-     * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+     * Attempts to use the primary manager's signature factories if not {@code null}/empty,
+     * otherwise uses the secondary ones (regardless of whether there are any...)
+     *
+     * @param primary The primary {@link SignatureFactoriesManager}
+     * @param secondary The secondary {@link SignatureFactoriesManager}
+     * @return The resolved signature factories - may be {@code null}/empty
+     * @see #getSignatureFactories(SignatureFactoriesManager)
      */
-    // CHECKSTYLE:OFF
-    final class Utils {
-        private Utils() {
-            throw new UnsupportedOperationException("No instance allowed");
-        }
-
-        /**
-         * @param manager The {@link SignatureFactoriesManager} instance - ignored if {@code null}
-         * @return The associated list of named <code>Signature</code> factories or {@code null} if
-         * no manager instance
-         */
-        public static List<NamedFactory<Signature>> getSignatureFactories(SignatureFactoriesManager manager) {
-            return (manager == null) ? null : manager.getSignatureFactories();
-        }
+    static List<NamedFactory<Signature>> resolveSignatureFactories(
+            SignatureFactoriesManager primary, SignatureFactoriesManager secondary) {
+        List<NamedFactory<Signature>> factories = getSignatureFactories(primary);
+        return GenericUtils.isEmpty(factories) ? getSignatureFactories(secondary) : factories;
+    }
 
-        /**
-         * Attempts to use the primary manager's signature factories if not {@code null}/empty,
-         * otherwise uses the secondary ones (regardless of whether there are any...)
-         *
-         * @param primary The primary {@link SignatureFactoriesManager}
-         * @param secondary The secondary {@link SignatureFactoriesManager}
-         * @return The resolved signature factories - may be {@code null}/empty
-         * @see #getSignatureFactories(SignatureFactoriesManager)
-         */
-        public static List<NamedFactory<Signature>> resolveSignatureFactories(
-                SignatureFactoriesManager primary, SignatureFactoriesManager secondary) {
-            List<NamedFactory<Signature>> factories = getSignatureFactories(primary);
-            return GenericUtils.isEmpty(factories) ? getSignatureFactories(secondary) : factories;
-        }
+    /**
+     * @param manager The {@link SignatureFactoriesManager} instance - ignored if {@code null}
+     * @return The associated list of named <code>Signature</code> factories or {@code null} if
+     * no manager instance
+     */
+    static List<NamedFactory<Signature>> getSignatureFactories(SignatureFactoriesManager manager) {
+        return (manager == null) ? null : manager.getSignatureFactories();
     }
 }

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
index dcdd3a9..2921437 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
@@ -140,7 +140,7 @@ public class UserAuthHostBased extends AbstractUserAuth implements SignatureFact
         // verify signature
         Collection<NamedFactory<Signature>> factories =
                 ValidateUtils.checkNotNullAndNotEmpty(
-                        SignatureFactoriesManager.Utils.resolveSignatureFactories(this, session),
+                        SignatureFactoriesManager.resolveSignatureFactories(this, session),
                         "No signature factories for session=%s",
                         session);
         Signature verifier = ValidateUtils.checkNotNull(

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/UserAuthPublicKey.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/UserAuthPublicKey.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/UserAuthPublicKey.java
index d6b0469..e52f176 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/UserAuthPublicKey.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/pubkey/UserAuthPublicKey.java
@@ -83,7 +83,7 @@ public class UserAuthPublicKey extends AbstractUserAuth implements SignatureFact
         PublicKey key = buffer.getRawPublicKey();
         Collection<NamedFactory<Signature>> factories =
                 ValidateUtils.checkNotNullAndNotEmpty(
-                        SignatureFactoriesManager.Utils.resolveSignatureFactories(this, session),
+                        SignatureFactoriesManager.resolveSignatureFactories(this, session),
                         "No signature factories for session=%s",
                         session);
         if (log.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/main/java/org/apache/sshd/server/global/OpenSshHostKeysHandler.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/OpenSshHostKeysHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/OpenSshHostKeysHandler.java
index a90ffd5..e84f82c 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/global/OpenSshHostKeysHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/global/OpenSshHostKeysHandler.java
@@ -87,7 +87,7 @@ public class OpenSshHostKeysHandler extends AbstractOpenSshHostKeysHandler imple
         ValidateUtils.checkTrue(wantReply, "No reply required for host keys of %s", session);
         Collection<? extends NamedFactory<Signature>> factories =
                 ValidateUtils.checkNotNullAndNotEmpty(
-                        SignatureFactoriesManager.Utils.resolveSignatureFactories(this, session),
+                        SignatureFactoriesManager.resolveSignatureFactories(this, session),
                         "No signature factories available for host keys of session=%s",
                         session);
         if (log.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/e9cab919/sshd-core/src/test/java/org/apache/sshd/common/kex/KexFactoryManagerTest.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/test/java/org/apache/sshd/common/kex/KexFactoryManagerTest.java b/sshd-core/src/test/java/org/apache/sshd/common/kex/KexFactoryManagerTest.java
new file mode 100644
index 0000000..ed2f9e3
--- /dev/null
+++ b/sshd-core/src/test/java/org/apache/sshd/common/kex/KexFactoryManagerTest.java
@@ -0,0 +1,188 @@
+/*
+ * 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.sshd.common.kex;
+
+import java.util.List;
+
+import org.apache.sshd.common.NamedFactory;
+import org.apache.sshd.common.NamedResource;
+import org.apache.sshd.common.cipher.BuiltinCiphers;
+import org.apache.sshd.common.cipher.Cipher;
+import org.apache.sshd.common.compression.BuiltinCompressions;
+import org.apache.sshd.common.compression.Compression;
+import org.apache.sshd.common.keyprovider.KeyPairProvider;
+import org.apache.sshd.common.mac.BuiltinMacs;
+import org.apache.sshd.common.mac.Mac;
+import org.apache.sshd.common.signature.BuiltinSignatures;
+import org.apache.sshd.common.signature.Signature;
+import org.apache.sshd.common.util.GenericUtils;
+import org.apache.sshd.util.test.BaseTestSupport;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runners.MethodSorters;
+
+/**
+ * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
+ */
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class KexFactoryManagerTest extends BaseTestSupport {
+    public KexFactoryManagerTest() {
+        super();
+    }
+
+    @Test
+    public void testDefaultCompressionFactoriesMethods() {
+        KexFactoryManager manager =  new TestKexFactoryManager();
+        assertEquals("Mismatched empty factories name list", "", manager.getCompressionFactoriesNameList());
+
+        String expected = NamedResource.Utils.getNames(BuiltinCompressions.VALUES);
+        manager.setCompressionFactoriesNameList(expected);
+        assertEquals("Mismatched updated factories name list", expected, manager.getCompressionFactoriesNameList());
+
+        List<NamedFactory<Compression>> factories = manager.getCompressionFactories();
+        assertEquals("Mismatched updated factories count", BuiltinCompressions.VALUES.size(), GenericUtils.size(factories));
+
+        for (NamedFactory<Compression> f : BuiltinCompressions.VALUES) {
+            assertTrue("Factory not set: " + f, factories.contains(f));
+        }
+    }
+
+    @Test
+    public void testDefaultCipherFactoriesMethods() {
+        KexFactoryManager manager =  new TestKexFactoryManager();
+        assertEquals("Mismatched empty factories name list", "", manager.getCipherFactoriesNameList());
+
+        String expected = NamedResource.Utils.getNames(BuiltinCiphers.VALUES);
+        manager.setCipherFactoriesNameList(expected);
+        assertEquals("Mismatched updated factories name list", expected, manager.getCipherFactoriesNameList());
+
+        List<NamedFactory<Cipher>> factories = manager.getCipherFactories();
+        assertEquals("Mismatched updated factories count", BuiltinCiphers.VALUES.size(), GenericUtils.size(factories));
+
+        for (NamedFactory<Cipher> f : BuiltinCiphers.VALUES) {
+            assertTrue("Factory not set: " + f, factories.contains(f));
+        }
+    }
+
+    @Test
+    public void testDefaultMacFactoriesMethods() {
+        KexFactoryManager manager =  new TestKexFactoryManager();
+        assertEquals("Mismatched empty factories name list", "", manager.getMacFactoriesNameList());
+
+        String expected = NamedResource.Utils.getNames(BuiltinMacs.VALUES);
+        manager.setMacFactoriesNameList(expected);
+        assertEquals("Mismatched updated factories name list", expected, manager.getMacFactoriesNameList());
+
+        List<NamedFactory<Mac>> factories = manager.getMacFactories();
+        assertEquals("Mismatched updated factories count", BuiltinMacs.VALUES.size(), GenericUtils.size(factories));
+
+        for (NamedFactory<Mac> f : BuiltinMacs.VALUES) {
+            assertTrue("Factory not set: " + f, factories.contains(f));
+        }
+    }
+
+    @Test
+    public void testDefaultSignatureFactoriesMethods() {
+        KexFactoryManager manager =  new TestKexFactoryManager();
+        assertEquals("Mismatched empty factories name list", "", manager.getSignatureFactoriesNameList());
+
+        String expected = NamedResource.Utils.getNames(BuiltinSignatures.VALUES);
+        manager.setSignatureFactoriesNameList(expected);
+        assertEquals("Mismatched updated factories name list", expected, manager.getSignatureFactoriesNameList());
+
+        List<NamedFactory<Signature>> factories = manager.getSignatureFactories();
+        assertEquals("Mismatched updated factories count", BuiltinSignatures.VALUES.size(), GenericUtils.size(factories));
+
+        for (NamedFactory<Signature> f : BuiltinSignatures.VALUES) {
+            assertTrue("Factory not set: " + f, factories.contains(f));
+        }
+    }
+
+    static class TestKexFactoryManager implements KexFactoryManager {
+        private List<NamedFactory<Compression>> compressions;
+        private List<NamedFactory<Cipher>> ciphers;
+        private List<NamedFactory<Mac>> macs;
+        private List<NamedFactory<Signature>> signatures;
+
+        TestKexFactoryManager() {
+            super();
+        }
+
+        @Override
+        public KeyPairProvider getKeyPairProvider() {
+            return null;
+        }
+
+        @Override
+        public void setKeyPairProvider(KeyPairProvider keyPairProvider) {
+            throw new UnsupportedOperationException("N/A");
+        }
+
+        @Override
+        public List<NamedFactory<Signature>> getSignatureFactories() {
+            return signatures;
+        }
+
+        @Override
+        public void setSignatureFactories(List<NamedFactory<Signature>> factories) {
+            signatures = factories;
+        }
+
+        @Override
+        public List<NamedFactory<KeyExchange>> getKeyExchangeFactories() {
+            return null;
+        }
+
+        @Override
+        public void setKeyExchangeFactories(List<NamedFactory<KeyExchange>> keyExchangeFactories) {
+            throw new UnsupportedOperationException("N/A");
+        }
+
+        @Override
+        public List<NamedFactory<Cipher>> getCipherFactories() {
+            return ciphers;
+        }
+
+        @Override
+        public void setCipherFactories(List<NamedFactory<Cipher>> cipherFactories) {
+            ciphers = cipherFactories;
+        }
+
+        @Override
+        public List<NamedFactory<Compression>> getCompressionFactories() {
+            return compressions;
+        }
+
+        @Override
+        public void setCompressionFactories(List<NamedFactory<Compression>> compressionFactories) {
+            compressions = compressionFactories;
+        }
+
+        @Override
+        public List<NamedFactory<Mac>> getMacFactories() {
+            return macs;
+        }
+
+        @Override
+        public void setMacFactories(List<NamedFactory<Mac>> macFactories) {
+            macs = macFactories;
+        }
+    }
+}