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