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.*; 25 26import java.util.Collection; 27import java.util.HashMap; 28import java.util.Iterator; 29import java.util.Set; 30import java.util.Map.Entry; 31 32import junit.framework.TestCase; 33 34 35/** 36 * Tests for <code>Provider</code> constructor and methods 37 * 38 */ 39public class ProviderTest extends TestCase { 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 } 50 51 /* 52 * Class under test for void Provider() 53 */ 54 public final void testProvider() { 55 assertEquals("Provider.id name", p.getProperty("Provider.id name"), 56 String.valueOf(p.getName())); 57 assertEquals("Provider.id version", p 58 .getProperty("Provider.id version"), String.valueOf(p 59 .getVersion())); 60 assertEquals("Provider.id info", p.getProperty("Provider.id info"), 61 String.valueOf(p.getInfo())); 62 assertEquals("Provider.id className", p 63 .getProperty("Provider.id className"), p.getClass().getName()); 64 } 65 66 public final void testClear() { 67 p.clear(); 68 assertNull(p.getProperty("MessageDigest.SHA-1")); 69 } 70 71 /* 72 * Class under test for void Provider(String, double, String) 73 */ 74 public final void testProviderStringdoubleString() { 75 Provider p = new MyProvider("Provider name", 123.456, "Provider info"); 76 77 assertEquals("Provider name", p.getName()); 78 assertEquals(123.456, p.getVersion(), 0L); 79 assertEquals("Provider info", p.getInfo()); 80 } 81 82 public final void testGetName() { 83 assertEquals("MyProvider", p.getName()); 84 } 85 86 public final void testGetVersion() { 87 assertEquals(1.0, p.getVersion(), 0L); 88 } 89 90 public final void testGetInfo() { 91 assertEquals("Provider for testing", p.getInfo()); 92 } 93 94 /* 95 * Class under test for void putAll(Map) 96 */ 97 public final void testPutAllMap() { 98 HashMap hm = new HashMap(); 99 hm.put("MessageDigest.SHA-1", "aaa.bbb.ccc.ddd"); 100 hm.put("Property 1", "value 1"); 101 hm.put("serviceName.algName attrName", "attrValue"); 102 hm.put("Alg.Alias.engineClassName.aliasName", "standardName"); 103 p.putAll(hm); 104 if (!"value 1".equals(p.getProperty("Property 1").trim()) || 105 !"attrValue".equals(p.getProperty("serviceName.algName attrName").trim()) || 106 !"standardName".equals(p.getProperty("Alg.Alias.engineClassName.aliasName").trim()) || 107 !"aaa.bbb.ccc.ddd".equals(p.getProperty("MessageDigest.SHA-1").trim()) ) { 108 fail("Incorrect property value"); 109 } 110 } 111 112 /* 113 * Class under test for Set entrySet() 114 */ 115 public final void testEntrySet() { 116 p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd"); 117 118 Set s = p.entrySet(); 119 try { 120 s.clear(); 121 fail("Must return unmodifiable set"); 122 } catch (UnsupportedOperationException e) { 123 } 124 125 assertEquals("Incorrect set size", 8, s.size()); 126 127 for (Iterator it = s.iterator(); it.hasNext();) { 128 Entry e = (Entry)it.next(); 129 String key = (String)e.getKey(); 130 String val = (String)e.getValue(); 131 if (key.equals("MessageDigest.SHA-1") && val.equals("SomeClassName")) { 132 continue; 133 } 134 if (key.equals("Alg.Alias.MessageDigest.SHA1") && val.equals("SHA-1")) { 135 continue; 136 } 137 if (key.equals("MessageDigest.abc") && val.equals("SomeClassName")) { 138 continue; 139 } 140 if (key.equals("Provider.id className") && val.equals(p.getClass().getName())) { 141 continue; 142 } 143 if (key.equals("Provider.id name") && val.equals("MyProvider")) { 144 continue; 145 } 146 if (key.equals("MessageDigest.SHA-256") && val.equals("aaa.bbb.ccc.ddd")) { 147 continue; 148 } 149 if (key.equals("Provider.id version") && val.equals("1.0")) { 150 continue; 151 } 152 if (key.equals("Provider.id info") && val.equals("Provider for testing")) { 153 continue; 154 } 155 fail("Incorrect set"); 156 } 157 } 158 159 /* 160 * Class under test for Set keySet() 161 */ 162 public final void testKeySet() { 163 p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd"); 164 165 Set s = p.keySet(); 166 try { 167 s.clear(); 168 } catch (UnsupportedOperationException e) { 169 } 170 Set s1 = p.keySet(); 171 172 assertNotSame(s, s1); 173 assertFalse(s1.isEmpty()); 174 assertEquals(8, s1.size()); 175 176 assertTrue(s1.contains("MessageDigest.SHA-256")); 177 assertTrue(s1.contains("MessageDigest.SHA-1")); 178 assertTrue(s1.contains("Alg.Alias.MessageDigest.SHA1")); 179 assertTrue(s1.contains("MessageDigest.abc")); 180 assertTrue(s1.contains("Provider.id info")); 181 assertTrue(s1.contains("Provider.id className")); 182 assertTrue(s1.contains("Provider.id version")); 183 assertTrue(s1.contains("Provider.id name")); 184 } 185 186 /* 187 * Class under test for Collection values() 188 */ 189 public final void testValues() { 190 p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd"); 191 192 Collection c = p.values(); 193 try { 194 c.clear(); 195 } catch (UnsupportedOperationException e) { 196 } 197 Collection c1 = p.values(); 198 199 assertNotSame(c, c1); 200 assertFalse(c1.isEmpty()); 201 assertEquals(8, c1.size()); 202 203 assertTrue(c1.contains("MyProvider")); 204 assertTrue(c1.contains("aaa.bbb.ccc.ddd")); 205 assertTrue(c1.contains("Provider for testing")); 206 assertTrue(c1.contains("1.0")); 207 assertTrue(c1.contains("SomeClassName")); 208 assertTrue(c1.contains("SHA-1")); 209 assertTrue(c1.contains(p.getClass().getName())); 210 } 211 212 /* 213 * Class under test for Object put(Object, Object) 214 */ 215 public final void testPutObjectObject() { 216 p.put("MessageDigest.SHA-1", "aaa.bbb.ccc.ddd"); 217 p.put("Type.Algorithm", "className"); 218 assertEquals("aaa.bbb.ccc.ddd", p.getProperty("MessageDigest.SHA-1") 219 .trim()); 220 221 Set services = p.getServices(); 222 assertEquals(3, services.size()); 223 224 for (Iterator it = services.iterator(); it.hasNext();) { 225 Provider.Service s = (Provider.Service)it.next(); 226 if ("Type".equals(s.getType()) && 227 "Algorithm".equals(s.getAlgorithm()) && 228 "className".equals(s.getClassName())) { 229 continue; 230 } 231 if ("MessageDigest".equals(s.getType()) && 232 "SHA-1".equals(s.getAlgorithm()) && 233 "aaa.bbb.ccc.ddd".equals(s.getClassName())) { 234 continue; 235 } 236 if ("MessageDigest".equals(s.getType()) && 237 "abc".equals(s.getAlgorithm()) && 238 "SomeClassName".equals(s.getClassName())) { 239 continue; 240 } 241 fail("Incorrect service"); 242 } 243 } 244 245 /* 246 * Class under test for Object remove(Object) 247 */ 248 public final void testRemoveObject() { 249 Object o = p.remove("MessageDigest.SHA-1"); 250 251 assertEquals("SomeClassName", o); 252 assertNull(p.getProperty("MessageDigest.SHA-1")); 253 assertEquals(1, p.getServices().size()); 254 } 255 256 public final void testService1() { 257 p.put("MessageDigest.SHA-1", "AnotherClassName"); 258 Provider.Service s = p.getService("MessageDigest", "SHA-1"); 259 260 assertEquals("AnotherClassName", s.getClassName()); 261 } 262 263 /* 264 public final void testService2() { 265 Provider[] pp = Security.getProviders("MessageDigest.SHA-1"); 266 if (pp == null) { 267 return; 268 } 269 Provider p2 = pp[0]; 270 String old = p2.getProperty("MessageDigest.SHA-1"); 271 try { 272 p2.put("MessageDigest.SHA-1", "AnotherClassName"); 273 Provider.Service s = p2.getService("MessageDigest", "SHA-1"); 274 if (!"AnotherClassName".equals(s.getClassName())) { 275 fail("Incorrect class name "+ s.getClassName()); 276 } 277 try { 278 s.newInstance(null); 279 fail("No expected NoSuchAlgorithmException"); 280 } catch (NoSuchAlgorithmException e) { 281 } 282 } finally { 283 p2.put("MessageDigest.SHA-1", old); 284 } 285 } 286*/ 287 //Regression for HARMONY-2760. 288 public void testConstructor() { 289 MyProvider myProvider = new MyProvider(null, 1, null); 290 assertNull(myProvider.getName()); 291 assertNull(myProvider.getInfo()); 292 assertEquals("null", myProvider.getProperty("Provider.id name")); 293 assertEquals("null", myProvider.getProperty("Provider.id info")); 294 } 295 296 class MyProvider extends Provider { 297 MyProvider() { 298 super("MyProvider", 1.0, "Provider for testing"); 299 put("MessageDigest.SHA-1", "SomeClassName"); 300 put("MessageDigest.abc", "SomeClassName"); 301 put("Alg.Alias.MessageDigest.SHA1", "SHA-1"); 302 } 303 304 MyProvider(String name, double version, String info) { 305 super(name, version, info); 306 } 307 } 308} 309