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;
+ }
+ }
+}