aboutsummaryrefslogtreecommitdiff
path: root/gnu/testlet/java/security/Engine/getInstance.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/testlet/java/security/Engine/getInstance.java')
-rw-r--r--gnu/testlet/java/security/Engine/getInstance.java330
1 files changed, 330 insertions, 0 deletions
diff --git a/gnu/testlet/java/security/Engine/getInstance.java b/gnu/testlet/java/security/Engine/getInstance.java
new file mode 100644
index 00000000..d58cb7c9
--- /dev/null
+++ b/gnu/testlet/java/security/Engine/getInstance.java
@@ -0,0 +1,330 @@
+/* getInstance.java -- Ensure names with extra spaces are recognized
+ Copyright (C) 2006 Free Software Foundation, Inc.
+This file is part of Mauve.
+
+Mauve is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+Mauve is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mauve; see the file COPYING. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA.
+
+*/
+
+// Tags: JDK1.4
+// Uses: ../MessageDigest/MauveDigest
+
+package gnu.testlet.java.security.Engine;
+
+import gnu.java.security.Engine;
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+
+import java.security.NoSuchAlgorithmException;
+import java.security.Provider;
+import java.security.Security;
+
+public class getInstance extends Provider implements Testlet
+{
+
+ private Provider provider;
+
+ public getInstance()
+ {
+ super("FakeProvider", 1.0, "A Fake Provider Used Within the Mauve Test Suite");
+
+ put("MessageDigest.foo",
+ "gnu.testlet.java.security.MessageDigest.MauveDigest");
+ put("Alg.Alias.MessageDigest.bar", "foo");
+ }
+
+
+ // Test case for the behaviour of
+ // Engine.getInstance (service, algorithm, provider).
+ // White space should be ignored.
+ // The algorithm names should be case insensitive.
+ public void test (TestHarness harness){
+ setUp (harness);
+ testWhiteSpace(harness);
+ testAlgorithmCase (harness);
+ testNameRedundancy(harness);
+ }
+
+ private void setUp (TestHarness harness){
+ provider = this;
+ Security.addProvider(provider);
+ }
+
+ // Tests the behaviour of
+ // Engine.getInstance (service, algorithm, provider).
+ // The algorithms and service names should ignore any white space.
+ private void testWhiteSpace (TestHarness harness)
+ {
+ harness.checkPoint ("Engine");
+ String signature;
+
+ signature = "getInstance(\"MessageDigest\", \"foo\", provider)";
+ try
+ {
+ harness.check(
+ Engine.getInstance("MessageDigest", "foo", provider) != null,
+ signature);
+ }
+ catch (Exception x)
+ {
+ harness.fail(signature);
+ harness.debug(x);
+ }
+
+ signature = "getInstance(\" MessageDigest \", \"foo\", provider)";
+ try
+ {
+ harness.check(
+ Engine.getInstance(" MessageDigest ", "foo", provider) != null,
+ signature);
+ }
+ catch (Exception x)
+ {
+ harness.fail(signature);
+ harness.debug(x);
+ }
+
+ signature = "getInstance(\"MessageDigest\", \" foo \", provider)";
+ try
+ {
+ harness.check(
+ Engine.getInstance("MessageDigest", " foo ", provider) != null,
+ signature);
+ }
+ catch (Exception x)
+ {
+ harness.fail(signature);
+ harness.debug(x);
+ }
+
+ signature = "getInstance(\" MessageDigest \", \" foo \", provider)";
+ try
+ {
+ harness.check(
+ Engine.getInstance(" MessageDigest ", " foo ", provider) != null,
+ signature);
+ }
+ catch (Exception x)
+ {
+ harness.fail(signature);
+ harness.debug(x);
+ }
+ }
+
+ // Tests the behaviour of
+ // Engine.getInstance (service, algorithm, provider).
+ // The algorithm names should be case insensitive.
+ private void testAlgorithmCase(TestHarness harness)
+ {
+ try
+ {
+
+ // test to make sure the engine can be found using all lowercase
+ // characters.
+
+ try
+ {
+ Engine.getInstance("MessageDigest", "foo", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine when using all lowercase characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found using all uppercase
+ // characters
+ try
+ {
+ Engine.getInstance("MessageDigest", "FOO", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine when using all uppercase characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found using a random case for the
+ // characters
+ try
+ {
+ Engine.getInstance("MessageDigest", "FoO", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine when using random case characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found using the exact same case
+ // specified in the Provider
+ try
+ {
+ Engine.getInstance("MessageDigest", "foo", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine using exact case characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found usinga all lowercase
+ // characters using the alias
+ try
+ {
+ Engine.getInstance("MessageDigest", "bar", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine using alias and all lowercase characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found using all uppercase
+ // characters using the alias
+ try
+ {
+ Engine.getInstance("MessageDigest", "BAR", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine using alias and all uppercase characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found using a random case for the
+ // characters using the alias
+ try
+ {
+ Engine.getInstance("MessageDigest", "bAr", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine using alias and random case characters");
+ harness.debug(e);
+ }
+
+ // test to make sure the engine can be found using the exact same case
+ // specified in the Provider using the alias
+ try
+ {
+ Engine.getInstance("MessageDigest", "bar", provider);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ harness.fail("Could not find engine using alias and exact case characters");
+ harness.debug(e);
+ }
+ }
+
+ catch (Exception e)
+ {
+ harness.debug(e);
+ harness.fail(String.valueOf(e));
+ }
+
+ }
+
+ /**
+ * Tests that the Provider class is immune against adding/removing the same
+ * algorithm with different case names.
+ *
+ * @param harness the test harness.
+ */
+ private void testNameRedundancy(TestHarness harness)
+ {
+ harness.checkPoint("Engine.testNameRedundancy()");
+ try
+ {
+ mustFindName(harness, "foo");
+ mustFindName(harness, "FOO");
+
+ // add a new spelling of 'foo'
+ provider.put("MessageDigest.Foo",
+ "gnu.testlet.java.security.MessageDigest.MauveDigest");
+ harness.verbose("*** Added 'Foo'");
+
+ mustFindName(harness, "Foo");
+
+ // now remove 'foo'. all 'foo' spellings should not be found
+ provider.remove("MessageDigest.foo");
+ harness.verbose("*** Removed 'foo'");
+
+ mustNotFindName(harness, "foo");
+ mustNotFindName(harness, "FOO");
+ mustNotFindName(harness, "Foo");
+
+ // put 'foo' back
+ put("MessageDigest.foo",
+ "gnu.testlet.java.security.MessageDigest.MauveDigest");
+ harness.verbose("*** Re-added 'foo'");
+ // add a new spelling of 'bar'
+ put("Alg.Alias.MessageDigest.Bar", "Foo");
+ harness.verbose("*** Added alias 'Bar'");
+
+ mustFindName(harness, "bar");
+ mustFindName(harness, "BAR");
+ mustFindName(harness, "Bar");
+
+ // now remove 'bar'. all 'bar' spellings should not be found
+ provider.remove("Alg.Alias.MessageDigest.bar");
+ harness.verbose("*** Removed alias 'bar'");
+
+ mustNotFindName(harness, "bar");
+ mustNotFindName(harness, "BAR");
+ mustNotFindName(harness, "Bar");
+ }
+ catch (Exception x)
+ {
+ harness.debug(x);
+ harness.fail("Engine.testNameRedundancy(): " + x);
+ }
+ }
+
+ private void mustFindName(TestHarness harness, String name)
+ {
+ String msg = "MUST find " + name;
+ try
+ {
+ Object obj = Engine.getInstance("MessageDigest", name, provider);
+ harness.check(obj != null, msg);
+ }
+ catch (Exception x)
+ {
+ harness.fail(msg);
+ harness.debug(x);
+ }
+ }
+
+ private void mustNotFindName(TestHarness harness, String name)
+ {
+ String msg = "MUST NOT find " + name;
+ try
+ {
+ Object obj = Engine.getInstance("MessageDigest", name, provider);
+ harness.check(obj == null, msg);
+ }
+ catch (NoSuchAlgorithmException x)
+ {
+ harness.check(true, msg);
+ }
+ catch (Exception x)
+ {
+ harness.fail(msg);
+ harness.debug(x);
+ }
+ }
+}