1/* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18/** 19 * @author Boris V. Kuznetsov 20 */ 21 22package org.apache.harmony.security.tests.java.security; 23 24import java.security.MessageDigest; 25import java.security.Provider; 26import java.security.Security; 27 28import org.apache.harmony.security.tests.support.MyMessageDigest1; 29import org.apache.harmony.security.tests.support.MyMessageDigest2; 30 31import junit.framework.TestCase; 32 33/** 34 * Tests for <code>MessageDigest</code> constructor and methods 35 */ 36public class MessageDigest_Impl2Test extends TestCase { 37 38 /** 39 * Provider 40 */ 41 Provider p; 42 43 /* 44 * @see TestCase#setUp() 45 */ 46 protected void setUp() throws Exception { 47 super.setUp(); 48 p = new MyProvider(); 49 Security.insertProviderAt(p, 1); 50 } 51 52 /* 53 * @see TestCase#tearDown() 54 */ 55 protected void tearDown() throws Exception { 56 super.tearDown(); 57 Security.removeProvider(p.getName()); 58 } 59 60 /* 61 * Class under test for MessageDigest getInstance(String) 62 */ 63 public void testGetInstanceString1() throws Exception { 64 MessageDigest md1 = MessageDigest.getInstance("ABC"); 65 checkMD1(md1, p); 66 } 67 68 /* 69 * Class under test for MessageDigest getInstance(String) 70 */ 71 public void testGetInstanceString2() throws Exception { 72 MessageDigest md2 = MessageDigest.getInstance("CBA"); 73 checkMD2(md2, p); 74 } 75 76 /* 77 * Class under test for MessageDigest getInstance(String, String) 78 */ 79 public void testGetInstanceStringString1() throws Exception { 80 MessageDigest md1 = MessageDigest.getInstance("ABC", "MyProvider"); 81 checkMD1(md1, p); 82 } 83 84 /* 85 * Class under test for MessageDigest getInstance(String, String) 86 */ 87 public void testGetInstanceStringString2() throws Exception { 88 MessageDigest md2 = MessageDigest.getInstance("CBA", "MyProvider"); 89 checkMD2(md2, p); 90 } 91 92 /* 93 * Class under test for MessageDigest getInstance(String, Provider) 94 */ 95 public void testGetInstanceStringProvider1() throws Exception { 96 Provider p = new MyProvider(); 97 MessageDigest md1 = MessageDigest.getInstance("ABC", p); 98 checkMD1(md1, p); 99 } 100 101 /* 102 * Class under test for MessageDigest getInstance(String, Provider) 103 */ 104 public void testGetInstanceStringProvider2() throws Exception { 105 Provider p = new MyProvider(); 106 MessageDigest md2 = MessageDigest.getInstance("CBA", p); 107 checkMD2(md2, p); 108 } 109 110 /* 111 * Class under test for String toString() 112 */ 113 public void testToString() { 114 MyMessageDigest1 md = new MyMessageDigest1("ABC"); 115 assertEquals("incorrect result", "MESSAGE DIGEST ABC", md.toString()); 116 } 117 118 private void checkMD1(MessageDigest md1, Provider p) throws Exception { 119 byte[] b = { 1, 2, 3, 4, 5 }; 120 assertTrue("getInstance() failed", md1 instanceof MyMessageDigest1); 121 assertEquals("getProvider() failed", p, md1.getProvider()); 122 assertEquals("getAlgorithm() failed", "ABC", md1.getAlgorithm()); 123 124 md1.update((byte) 1); 125 md1.update(b, 1, 4); 126 assertTrue("update failed", ((MyMessageDigest1) md1).runEngineUpdate1); 127 assertTrue("update failed", ((MyMessageDigest1) md1).runEngineUpdate2); 128 129 assertEquals("incorrect digest result", 0, md1.digest().length); 130 assertEquals("getProvider() failed", 0, md1.digest(b, 2, 3)); 131 assertTrue("digest failed", ((MyMessageDigest1) md1).runEngineDigest); 132 133 md1.reset(); 134 assertTrue("reset failed", ((MyMessageDigest1) md1).runEngineReset); 135 136 assertEquals("getDigestLength() failed", 0, md1.getDigestLength()); 137 try { 138 md1.clone(); 139 fail("No expected CloneNotSupportedException"); 140 } catch (CloneNotSupportedException e) { 141 } 142 } 143 144 private void checkMD2(MessageDigest md2, Provider p) throws Exception { 145 byte[] b = { 1, 2, 3, 4, 5 }; 146 assertEquals("getProvider() failed", p, md2.getProvider()); 147 assertEquals("getAlgorithm() failed", "CBA", md2.getAlgorithm()); 148 149 md2.update((byte) 1); 150 md2.update(b, 1, 3); 151 assertTrue("update failed", MyMessageDigest2.runEngineUpdate1); 152 assertTrue("update failed", MyMessageDigest2.runEngineUpdate2); 153 154 assertEquals("incorrect digest result", 0, md2.digest().length); 155 assertEquals("getProvider() failed", 0, md2.digest(b, 2, 3)); 156 assertTrue("digest failed", MyMessageDigest2.runEngineDigest); 157 158 md2.reset(); 159 assertTrue("reset failed", MyMessageDigest2.runEngineReset); 160 161 assertEquals("getDigestLength() failed", 0, md2.getDigestLength()); 162 try { 163 md2.clone(); 164 fail("No expected CloneNotSupportedException"); 165 } catch (CloneNotSupportedException e) { 166 } 167 } 168 169 private class MyProvider extends Provider { 170 MyProvider() { 171 super("MyProvider", 1.0, "Provider for testing"); 172 put("MessageDigest.ABC", "org.apache.harmony.security.tests.support.MyMessageDigest1"); 173 put("MessageDigest.CBA", "org.apache.harmony.security.tests.support.MyMessageDigest2"); 174 } 175 176 MyProvider(String name, double version, String info) { 177 super(name, version, info); 178 } 179 } 180} 181