You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CertificateExceptionManagerTest.java 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.dmdirc.tls;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.nio.file.Files;
  5. import java.nio.file.Path;
  6. import java.security.GeneralSecurityException;
  7. import java.security.KeyStore;
  8. import java.security.cert.X509Certificate;
  9. import java.util.Set;
  10. import org.junit.Before;
  11. import org.junit.Rule;
  12. import org.junit.Test;
  13. import org.junit.rules.TemporaryFolder;
  14. import static org.junit.Assert.assertEquals;
  15. import static org.junit.Assert.assertFalse;
  16. import static org.junit.Assert.assertTrue;
  17. /**
  18. * Tests for {@link CertificateExceptionManager}.
  19. *
  20. * <p>These test use two certificates stored in a keystore. They were generated using:
  21. *
  22. * <pre>
  23. * keytool -genkey -validity 18250 -keystore "keystore.ks" -storepass "dmdirc" -keypass "dmdirc" -alias "test1" -dname "CN=Test1, O=DMDirc, C=GB"
  24. * keytool -genkey -validity 18250 -keystore "keystore.ks" -storepass "dmdirc" -keypass "dmdirc" -alias "test2" -dname "CN=Test2, O=DMDirc, C=GB"
  25. * </pre>
  26. */
  27. public class CertificateExceptionManagerTest {
  28. @Rule
  29. public TemporaryFolder tempFolderRule = new TemporaryFolder();
  30. private Path keyStorePath;
  31. private CertificateExceptionManager manager;
  32. @Before
  33. public void setup() throws IOException {
  34. keyStorePath = tempFolderRule.newFile("certs.keystore").toPath();
  35. manager = new CertificateExceptionManager(keyStorePath);
  36. }
  37. @Test
  38. public void testGetCertsNoFile() {
  39. assertTrue(manager.getExceptedCertificates().isEmpty());
  40. }
  41. @Test
  42. public void testAddCert() throws GeneralSecurityException, IOException {
  43. final X509Certificate cert = getCertificate(1);
  44. assertTrue(manager.addExceptedCertificate(cert));
  45. assertTrue(Files.exists(keyStorePath));
  46. final Set<X509Certificate> certs = manager.getExceptedCertificates();
  47. assertEquals(1, certs.size());
  48. assertTrue(certs.contains(cert));
  49. }
  50. @Test
  51. public void testRemoveUnknownCert() throws GeneralSecurityException, IOException {
  52. final X509Certificate cert = getCertificate(1);
  53. assertFalse(manager.removeExceptedCertificate(cert));
  54. }
  55. @Test
  56. public void testRemoveCert() throws GeneralSecurityException, IOException {
  57. final X509Certificate cert = getCertificate(1);
  58. manager.addExceptedCertificate(cert);
  59. assertTrue(manager.removeExceptedCertificate(cert));
  60. assertTrue(manager.getExceptedCertificates().isEmpty());
  61. }
  62. @Test
  63. public void testRemoveCertLeavesExisting() throws GeneralSecurityException, IOException {
  64. final X509Certificate cert1 = getCertificate(1);
  65. final X509Certificate cert2 = getCertificate(2);
  66. manager.addExceptedCertificate(cert1);
  67. manager.addExceptedCertificate(cert2);
  68. assertTrue(manager.removeExceptedCertificate(cert1));
  69. final Set<X509Certificate> certs = manager.getExceptedCertificates();
  70. assertEquals(1, certs.size());
  71. assertTrue(certs.contains(cert2));
  72. }
  73. private X509Certificate getCertificate(final int num) throws GeneralSecurityException, IOException {
  74. try (InputStream is = getClass().getResourceAsStream("keystore.ks")) {
  75. final KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
  76. keyStore.load(is, "dmdirc".toCharArray());
  77. return (X509Certificate) keyStore.getCertificate("test" + num);
  78. }
  79. }
  80. }