/* * RoleInfoTest.java * * Created on Jun 30, 2008, 2:27:39 PM * * Description: . * * Copyright (C) Apr 13, 2010 reed. * * This program 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 3 of the License, or (at your option) any later version. * * This program 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 this program; * if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.texai.ahcsSupport; import java.security.PrivateKey; import java.security.cert.CertPath; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.util.ArrayList; import java.util.List; import java.security.cert.X509Certificate; import java.util.UUID; import javax.net.ssl.X509KeyManager; import org.apache.log4j.Logger; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.openrdf.model.URI; import org.openrdf.model.impl.URIImpl; import org.texai.kb.Constants; import org.texai.x509.KeyStoreTestUtils; import org.texai.x509.X509SecurityInfo; import org.texai.x509.X509Utils; import static org.junit.Assert.*; /** * * @author reed */ public class RoleInfoTest { /** the logger */ private static final Logger LOGGER = Logger.getLogger(RoleInfoTest.class); /** the certificate chain */ private static X509Certificate[] certificateChain; /** the private key of the role */ private static PrivateKey privateKey; public RoleInfoTest() { } @BeforeClass public static void setUpClass() throws Exception { final X509SecurityInfo x509SecurityInfo = KeyStoreTestUtils.getClientX509SecurityInfo(); final X509KeyManager x509KeyManager = (X509KeyManager) x509SecurityInfo.getKeyManagers()[0]; certificateChain = x509KeyManager.getCertificateChain(X509Utils.ENTRY_ALIAS); assertNotNull(certificateChain); LOGGER.info("certificate chain length:\n" + certificateChain.length); assertEquals(2, certificateChain.length); LOGGER.info("end entity certificate: " + certificateChain[0]); LOGGER.info("trusted root certificate:\n" + certificateChain[1]); privateKey = x509KeyManager.getPrivateKey(X509Utils.ENTRY_ALIAS); assertNotNull(privateKey); LOGGER.info("private key: " + privateKey); } @AfterClass public static void tearDownClass() throws Exception { } @Before public void setUp() { } @After public void tearDown() { } /** * Test of getRoleId method, of class RoleInfo. */ @Test @SuppressWarnings("null") public void testGetRoleId() { LOGGER.info("getRoleId"); final URI roleId = new URIImpl(Constants.TEXAI_NAMESPACE + X509Utils.getUUID(certificateChain[0]).toString()); assertEquals("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977", roleId.getLocalName()); final UUID localAreaNetworkID = UUID.randomUUID(); final String externalHostName = "texai.dyndns.org"; final int externalPort = 5048; final String internalHostName = "turing"; final int internalPort = 50000; CertificateFactory certificateFactory = null; try { certificateFactory = CertificateFactory.getInstance("X.509"); } catch (CertificateException ex) { fail(ex.getMessage()); } final List<X509Certificate> x509Certificates = new ArrayList<>(); for (final X509Certificate x509Certificate : certificateChain) { x509Certificates.add(x509Certificate); } assertEquals(2, x509Certificates.size()); CertPath certPath = null; try { certPath = certificateFactory.generateCertPath(x509Certificates); assertEquals(2, certPath.getCertificates().size()); } catch (CertificateException ex) { fail(ex.getMessage()); } RoleInfo instance = new RoleInfo( roleId, certPath, privateKey, localAreaNetworkID, externalHostName, externalPort, internalHostName, internalPort); URI result = instance.getRoleId(); assertEquals("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977", result.getLocalName()); } /** * Test of getCertPath method, of class RoleInfo. */ @Test @SuppressWarnings("null") public void testGetCertPath() { LOGGER.info("getCertPath"); final URI roleId = new URIImpl(Constants.TEXAI_NAMESPACE + X509Utils.getUUID(certificateChain[0]).toString()); assertEquals("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977", roleId.getLocalName()); final UUID localAreaNetworkID = UUID.fromString("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977"); final String externalHostName = "texai.dyndns.org"; final int externalPort = 5048; final String internalHostName = "turing"; final int internalPort = 50000; CertificateFactory certificateFactory = null; try { certificateFactory = CertificateFactory.getInstance("X.509"); } catch (CertificateException ex) { fail(ex.getMessage()); } final List<X509Certificate> x509Certificates = new ArrayList<>(); for (final X509Certificate x509Certificate : certificateChain) { x509Certificates.add(x509Certificate); } CertPath certPath = null; try { certPath = certificateFactory.generateCertPath(x509Certificates); } catch (CertificateException ex) { fail(ex.getMessage()); } RoleInfo instance = new RoleInfo( roleId, certPath, privateKey, localAreaNetworkID, externalHostName, externalPort, internalHostName, internalPort); CertPath result = instance.getCertPath(); LOGGER.info("certificate path:\n" + result.toString()); assertNotNull(result); } /** * Test of toString method, of class RoleInfo. */ @Test @SuppressWarnings("null") public void testToString() { LOGGER.info("toString"); final URI roleId = new URIImpl(Constants.TEXAI_NAMESPACE + X509Utils.getUUID(certificateChain[0]).toString()); assertEquals("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977", roleId.getLocalName()); final UUID localAreaNetworkID = UUID.fromString("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977"); final String externalHostName = "texai.dyndns.org"; final int externalPort = 5048; final String internalHostName = "turing"; final int internalPort = 50000; CertificateFactory certificateFactory = null; try { certificateFactory = CertificateFactory.getInstance("X.509"); } catch (CertificateException ex) { fail(ex.getMessage()); } final List<X509Certificate> x509Certificates = new ArrayList<>(); for (final X509Certificate x509Certificate : certificateChain) { x509Certificates.add(x509Certificate); } CertPath certPath = null; try { certPath = certificateFactory.generateCertPath(x509Certificates); } catch (CertificateException ex) { fail(ex.getMessage()); } RoleInfo instance = new RoleInfo( roleId, certPath, privateKey, localAreaNetworkID, externalHostName, externalPort, internalHostName, internalPort); assertEquals("[RoleInfo http://texai.org/texai/b19d4261-3e4f-47c5-9d9b-6db6cdcfb977, lan: b19d4261-3e4f-47c5-9d9b-6db6cdcfb977, external host address: texai.dyndns.org:5048, internal host address: turing:50000]", instance.toString()); } /** * Test of verify method, of class RoleInfo. */ @Test @SuppressWarnings("null") public void testGetSignature() { LOGGER.info("getSignature"); final URI roleId = new URIImpl(Constants.TEXAI_NAMESPACE + X509Utils.getUUID(certificateChain[0]).toString()); assertEquals("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977", roleId.getLocalName()); final UUID localAreaNetworkID = UUID.fromString("b19d4261-3e4f-47c5-9d9b-6db6cdcfb977"); final String externalHostName = "texai.dyndns.org"; final int externalPort = 5048; final String internalHostName = "turing"; final int internalPort = 50000; CertificateFactory certificateFactory = null; try { certificateFactory = CertificateFactory.getInstance("X.509"); } catch (CertificateException ex) { fail(ex.getMessage()); } final List<X509Certificate> x509Certificates = new ArrayList<>(); for (final X509Certificate x509Certificate : certificateChain) { x509Certificates.add(x509Certificate); } CertPath certPath = null; try { certPath = certificateFactory.generateCertPath(x509Certificates); } catch (CertificateException ex) { fail(ex.getMessage()); } RoleInfo instance = new RoleInfo( roleId, certPath, privateKey, localAreaNetworkID, externalHostName, externalPort, internalHostName, internalPort); try { assertTrue(instance.verify()); } catch (Exception ex) { fail(ex.getMessage()); } } }