/* * 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. */ /** * @author Vladimir N. Molotkov * @version $Revision$ */ package tests.security.spec; import junit.framework.TestCase; import java.math.BigInteger; import java.security.spec.ECPoint; /** * Tests for <code>ECPoint</code> class fields and methods. * */ public class ECPointTest extends TestCase { // // Tests // /** * Test #1 for <code>ECPoint(BigInteger, BigInteger)</code> constructor<br> * Assertion: creates <code>ECPoint</code> instance<br> * Test preconditions: valid parameters passed<br> * Expected: must pass without any exceptions */ public final void testECPoint01() { new ECPoint(BigInteger.ZERO, BigInteger.ZERO); new ECPoint(BigInteger.valueOf(-23456L), BigInteger.valueOf(-23456L)); new ECPoint(BigInteger.valueOf(123456L), BigInteger.valueOf(123456L)); new ECPoint(BigInteger.valueOf(-56L), BigInteger.valueOf(234L)); new ECPoint(BigInteger.valueOf(3456L), BigInteger.valueOf(-2344L)); } /** * Test #2 for <code>ECPoint(BigInteger x, BigInteger y)</code> constructor<br> * Assertion: throws <code>NullPointerException</code> if <code>x</code>or * <code>y</code> is <code>null</code><br> * Test preconditions: pass <code>null</code> as mentioned parameters<br> * Expected: must throw <code>NullPointerException</code> */ public final void testECPoint02() { // test case 1: x is null try { new ECPoint(null, BigInteger.ZERO); fail("#1: Expected NPE not thrown"); } catch (NullPointerException ok) { } // test case 2: y is null try { new ECPoint(BigInteger.ZERO, null); fail("#2: Expected NPE not thrown"); } catch (NullPointerException ok) { } // test case 3: both : x and y are null try { new ECPoint(null, null); fail("#3: Expected NPE not thrown"); } catch (NullPointerException ok) { } } /** * Test #1 for <code>getAffineX()</code> method<br> * Assertion: returns affine <code>x</code> coordinate<br> * Test preconditions: <code>ECPoint</code> instance * created using valid parameters<br> * Expected: must return affine <code>x</code> coordinate * which is equal to the one passed to the constructor; * (both must refer the same object) */ public final void testGetAffineX01() { BigInteger x = BigInteger.valueOf(-23456L); ECPoint p = new ECPoint(x, BigInteger.valueOf(23456L)); BigInteger xRet = p.getAffineX(); assertEquals(x, xRet); assertSame(x, xRet); } /** * Test #2 for <code>getAffineX()</code> method<br> * Assertion: returns <code>null</code> for <code>ECPoint.POINT_INFINITY</code><br> * Test preconditions: none<br> * Expected: must return <code>null</code> for * <code>ECPoint.POINT_INFINITY</code> */ public final void testGetAffineX02() { assertNull(ECPoint.POINT_INFINITY.getAffineX()); } /** * Test #1 for <code>getAffineY()</code> method<br> * Assertion: returns affine <code>y</code> coordinate<br> * Test preconditions: <code>ECPoint</code> instance * created using valid parameters<br> * Expected: must return affine <code>y</code> coordinate * which is equal to the one passed to the constructor; * (both must refer the same object) */ public final void testGetAffineY01() { BigInteger y = BigInteger.valueOf(23456L); ECPoint p = new ECPoint(BigInteger.valueOf(-23456L), y); BigInteger yRet = p.getAffineY(); assertEquals(y, yRet); assertSame(y, yRet); } /** * Test #2 for <code>getAffineX()</code> method<br> * Assertion: returns <code>null</code> for <code>ECPoint.POINT_INFINITY</code><br> * Test preconditions: none<br> * Expected: must return <code>null</code> for * <code>ECPoint.POINT_INFINITY</code> */ public final void testGetAffineY02() { assertNull(ECPoint.POINT_INFINITY.getAffineY()); } /** * Test #1 for <code>equals(Object other)</code> method<br> * Assertion: return true if this and other objects are equal<br> * Test preconditions: see test comments<br> * Expected: all objects in this test must be equal */ public final void testEqualsObject01() { // test case 1: must be equal to itself ECPoint p2=null, p1 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.ONE); assertTrue(p1.equals(p1)); // test case 2: equal objects p1 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.ONE); p2 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.valueOf(1L)); assertTrue(p1.equals(p2) && p2.equals(p1)); // test case 3: equal POINT_INFINITY object(s) p1 = ECPoint.POINT_INFINITY; p2 = ECPoint.POINT_INFINITY; assertTrue(p1.equals(p2) && p2.equals(p1)); } /** * Test #2 for <code>equals(Object other)</code> method<br> * Assertion: return false if this and other objects are not equal<br> * Test preconditions: see test comments<br> * Expected: all objects in this test must be not equal */ public final void testEqualsObject02() { // test case 1: must be not equal to null ECPoint p2=null, p1 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.ONE); assertFalse(p1.equals(p2)); // test case 2: not equal objects - x p1 = new ECPoint(BigInteger.valueOf(-23457L), BigInteger.ONE); p2 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.valueOf(1L)); assertFalse(p1.equals(p2) || p2.equals(p1)); // test case 3: not equal objects - y p1 = new ECPoint(BigInteger.valueOf(-23457L), BigInteger.ONE); p2 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.ZERO); assertFalse(p1.equals(p2) || p2.equals(p1)); // test case 4: not equal - some point and POINT_INFINITY p1 = ECPoint.POINT_INFINITY; p2 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.ZERO); assertFalse(p1.equals(p2) || p2.equals(p1)); } /** * Test #1 for <code>hashCode()</code> method.<br> * * Assertion: must return the same value if invoked * repeatedly on the same object. */ public final void testHashCode01() { ECPoint f = new ECPoint(BigInteger.valueOf(-23457L), BigInteger.ONE); int hc = f.hashCode(); assertTrue(hc == f.hashCode() && hc == f.hashCode() && hc == f.hashCode() && hc == f.hashCode() && hc == f.hashCode() && hc == f.hashCode() && hc == f.hashCode() && hc == f.hashCode()); // the same for POINT_INFINITY hc = ECPoint.POINT_INFINITY.hashCode(); assertTrue(hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode() && hc == ECPoint.POINT_INFINITY.hashCode()); } /** * Test #2 for <code>hashCode()</code> method.<br> * * Assertion: must return the same value if invoked * on equal (according to the <code>equals(Object)</code> method) objects. */ public final void testHashCode02() { ECPoint p1 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.ONE); ECPoint p2 = new ECPoint(BigInteger.valueOf(-23456L), BigInteger.valueOf(1L)); assertEquals(p1.hashCode(), p2.hashCode()); } }