The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
import unittest, os, setup_path, sys

from svn import core

class SubversionAuthTestCase(unittest.TestCase):
  """Test cases for the Subversion auth."""

  def test_open(self):
    baton = core.svn_auth_open([])
    self.assert_(baton is not None)

  def test_set_parameter(self):
    baton = core.svn_auth_open([])
    core.svn_auth_set_parameter(baton, "name", "somedata")
    core.svn_auth_set_parameter(baton, "name", None)
    core.svn_auth_set_parameter(baton, "name", 2)
    core.svn_auth_set_parameter(baton, "name",
                                core.svn_auth_ssl_server_cert_info_t())

  def test_invalid_cred_kind(self):
    baton = core.svn_auth_open([])
    self.assertRaises(core.SubversionException,
            lambda: core.svn_auth_first_credentials(
                "unknown", "somerealm", baton))

  def test_credentials_get_username(self):
    def myfunc(realm, maysave, pool):
      self.assertEquals("somerealm", realm)
      username_cred = core.svn_auth_cred_username_t()
      username_cred.username = "bar"
      username_cred.may_save = False
      return username_cred
    baton = core.svn_auth_open([core.svn_auth_get_username_prompt_provider(myfunc, 1)])
    creds = core.svn_auth_first_credentials(
                core.SVN_AUTH_CRED_USERNAME, "somerealm", baton)
    self.assert_(creds is not None)

  def test_credentials_get_simple(self):
    def myfunc(realm, username, may_save, pool):
      self.assertEquals("somerealm", realm)
      simple_cred = core.svn_auth_cred_simple_t()
      simple_cred.username = "mijnnaam"
      simple_cred.password = "geheim"
      simple_cred.may_save = False
      return simple_cred
    baton = core.svn_auth_open([core.svn_auth_get_simple_prompt_provider(myfunc, 1)])
    creds = core.svn_auth_first_credentials(
                core.SVN_AUTH_CRED_SIMPLE, "somerealm", baton)
    self.assert_(creds is not None)

  def test_credentials_get_ssl_client_cert(self):
    def myfunc(realm, may_save, pool):
      self.assertEquals("somerealm", realm)
      ssl_cred = core.svn_auth_cred_ssl_client_cert_t()
      ssl_cred.cert_file = "my-certs-file"
      ssl_cred.may_save = False
      return ssl_cred
    baton = core.svn_auth_open([core.svn_auth_get_ssl_client_cert_prompt_provider(myfunc, 1)])
    creds = core.svn_auth_first_credentials(
                core.SVN_AUTH_CRED_SSL_CLIENT_CERT, "somerealm", baton)
    self.assert_(creds is not None)

  def test_credentials_get_ssl_client_cert_pw(self):
    def myfunc(realm, may_save, pool):
      self.assertEquals("somerealm", realm)
      ssl_cred_pw = core.svn_auth_cred_ssl_client_cert_pw_t()
      ssl_cred_pw.password = "supergeheim"
      ssl_cred_pw.may_save = False
      return ssl_cred_pw
    baton = core.svn_auth_open([core.svn_auth_get_ssl_client_cert_pw_prompt_provider(myfunc, 1)])
    creds = core.svn_auth_first_credentials(
                core.SVN_AUTH_CRED_SSL_CLIENT_CERT_PW, "somerealm", baton)
    self.assert_(creds is not None)

  def test_credentials_get_ssl_server_trust(self):
    def myfunc(realm, failures, cert_info, may_save, pool):
      self.assertEquals("somerealm", realm)
      ssl_trust = core.svn_auth_cred_ssl_server_trust_t()
      ssl_trust.accepted_failures = 0
      ssl_trust.may_save = False
      return ssl_trust
    baton = core.svn_auth_open([core.svn_auth_get_ssl_server_trust_prompt_provider(myfunc)])
    core.svn_auth_set_parameter(baton, core.SVN_AUTH_PARAM_SSL_SERVER_FAILURES,
                                "2")
    cert_info = core.svn_auth_ssl_server_cert_info_t()
    core.svn_auth_set_parameter(baton, core.SVN_AUTH_PARAM_SSL_SERVER_CERT_INFO,
                cert_info)
    creds = core.svn_auth_first_credentials(
                core.SVN_AUTH_CRED_SSL_SERVER_TRUST, "somerealm", baton)
    self.assert_(creds is not None)

def suite():
    return unittest.makeSuite(SubversionAuthTestCase, 'test')

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(suite())