Class KiwiServletMocks

java.lang.Object
org.kiwiproject.beta.test.servlet.KiwiServletMocks

@Beta public final class KiwiServletMocks extends Object
Static utilities to create Mockito-based mocks for servlet API code.
  • Method Details

    • mockHttpServletRequestWithCertificate

      public static jakarta.servlet.http.HttpServletRequest mockHttpServletRequestWithCertificate(String dn)
      Create a mock HttpServletRequest with the given subject distinguished name.
      Parameters:
      dn - the subject distinguished name
      Returns:
      a mocked HttpServletRequest with the given subject distinguished name
      Implementation Note:
      Don't inline the 'certificate' in the thenReturn() call on the mock request. For some reason that I have not fully investigated, Mockito gets really upset and throws a UnfinishedStubbingException.
    • mockHttpServletRequestWithNoCertificate

      public static jakarta.servlet.http.HttpServletRequest mockHttpServletRequestWithNoCertificate()
      Create a mock HttpServletRequest that contains no X509 certificate.
      Returns:
      a mocked HttpServletRequest with no X.509 certificate
      Implementation Note:
      This is not strictly necessary since Mockito will return null for methods that return a reference type if not provided any expectations. But it makes test code more explicit about the intent of the code, so that's why this exists.
    • mockX509Certificate

      public static X509Certificate mockX509Certificate(String dn)
      Create a mock X509Certificate with the given subject distinguished name.
      Parameters:
      dn - the subject distinguished name
      Returns:
      a mocked X509Certificate with the given subject distinguished name
      Implementation Note:
      Has to mock the Principal returned by X509Certificate.getSubjectDN() so this actually creates two mocks. Also, since X509Certificate.getSubjectX500Principal() returns an instance of the final class X500Principal, we can't mock it and instead a "real" instance of X500Principal having the given distinguished name is returned. Also see StackOverflow entry regarding the getSubjectDN method being "denigrated". And, Java 16 deprecated X509Certificate.getSubjectDN() though (as of this writing on Nov. 8, 2022) not for removal.
    • matchesExpectedCertArrayBySubjectDN

      public static org.mockito.ArgumentMatcher<X509Certificate[]> matchesExpectedCertArrayBySubjectDN(String subjectDn)
      Argument matcher that matches a certificate array containing exactly one X509Certificate having the given subject DN. Uses the X509Certificate.getSubjectDN() to obtain the Principal and then matches against Principal.getName().
      Parameters:
      subjectDn - the subject distinguished name
      Returns:
      a Mockito argument matcher for an array of X509Certificate objects
    • matchesExpectedCertBySubjectDN

      public static org.mockito.ArgumentMatcher<X509Certificate> matchesExpectedCertBySubjectDN(String subjectDn)
      Argument matcher that matches a certificate having the given subject DN.
      Parameters:
      subjectDn - the subject distinguished name
      Returns:
      a Mockito argument matcher for an array of X509Certificate objects
    • matchesCertArrayByX500PrincipalName

      public static org.mockito.ArgumentMatcher<X509Certificate[]> matchesCertArrayByX500PrincipalName(String name)
      Argument matcher that matches a certificate array containing exactly one X509Certificate having an X500Principal with the given name. Uses X509Certificate.getSubjectX500Principal() and to obtain the X500Principal and then matches against X500Principal.getName().
      Parameters:
      name - the name for the X500Principal
      Returns:
      a Mockito argument matcher for an array of X509Certificate objects
    • matchesExpectedCertByX500PrincipalName

      public static org.mockito.ArgumentMatcher<X509Certificate> matchesExpectedCertByX500PrincipalName(String name)
      Argument matcher that matches a certificate having an X500Principal with the given name.
      Parameters:
      name - the name for the X500Principal
      Returns:
      a Mockito argument matcher for an array of X509Certificate objects