/*
  This file is part of libmicrohttpd
  Copyright (C) 2022 Karlson2k (Evgeny Grin)

  This test tool 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 2, or
  (at your option) any later version.

  This test tool 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
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

/**
 * @file microhttpd/test_auth_parse.c
 * @brief  Unit tests for request's 'Authorization" headers parsing
 * @author Karlson2k (Evgeny Grin)
 */

#include "mhd_options.h"
#include <string.h>
#include <stdio.h>
#include "gen_auth.h"
#ifdef BAUTH_SUPPORT
#include "basicauth.h"
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
#include "digestauth.h"
#endif /* DAUTH_SUPPORT */
#include "mhd_assert.h"
#include "internal.h"
#include "connection.h"


#ifndef MHD_STATICSTR_LEN_
/**
 * Determine length of static string / macro strings at compile time.
 */
#define MHD_STATICSTR_LEN_(macro) (sizeof(macro) / sizeof(char) - 1)
#endif /* ! MHD_STATICSTR_LEN_ */


#if defined(HAVE___FUNC__)
#define externalErrorExit(ignore) \
    _externalErrorExit_func(NULL, __func__, __LINE__)
#define externalErrorExitDesc(errDesc) \
    _externalErrorExit_func(errDesc, __func__, __LINE__)
#define mhdErrorExit(ignore) \
    _mhdErrorExit_func(NULL, __func__, __LINE__)
#define mhdErrorExitDesc(errDesc) \
    _mhdErrorExit_func(errDesc, __func__, __LINE__)
#elif defined(HAVE___FUNCTION__)
#define externalErrorExit(ignore) \
    _externalErrorExit_func(NULL, __FUNCTION__, __LINE__)
#define externalErrorExitDesc(errDesc) \
    _externalErrorExit_func(errDesc, __FUNCTION__, __LINE__)
#define mhdErrorExit(ignore) \
    _mhdErrorExit_func(NULL, __FUNCTION__, __LINE__)
#define mhdErrorExitDesc(errDesc) \
    _mhdErrorExit_func(errDesc, __FUNCTION__, __LINE__)
#else
#define externalErrorExit(ignore) _externalErrorExit_func(NULL, NULL, __LINE__)
#define externalErrorExitDesc(errDesc) \
  _externalErrorExit_func(errDesc, NULL, __LINE__)
#define mhdErrorExit(ignore) _mhdErrorExit_func(NULL, NULL, __LINE__)
#define mhdErrorExitDesc(errDesc) _mhdErrorExit_func(errDesc, NULL, __LINE__)
#endif


_MHD_NORETURN static void
_externalErrorExit_func (const char *errDesc, const char *funcName, int lineNum)
{
  if ((NULL != errDesc) && (0 != errDesc[0]))
    fprintf (stderr, "%s", errDesc);
  else
    fprintf (stderr, "System or external library call failed");
  if ((NULL != funcName) && (0 != funcName[0]))
    fprintf (stderr, " in %s", funcName);
  if (0 < lineNum)
    fprintf (stderr, " at line %d", lineNum);

  fprintf (stderr, ".\nLast errno value: %d (%s)\n", (int) errno,
           strerror (errno));
#ifdef MHD_WINSOCK_SOCKETS
  fprintf (stderr, "WSAGetLastError() value: %d\n", (int) WSAGetLastError ());
#endif /* MHD_WINSOCK_SOCKETS */
  fflush (stderr);
  exit (99);
}


_MHD_NORETURN static void
_mhdErrorExit_func (const char *errDesc, const char *funcName, int lineNum)
{
  if ((NULL != errDesc) && (0 != errDesc[0]))
    fprintf (stderr, "%s", errDesc);
  else
    fprintf (stderr, "MHD unexpected error");
  if ((NULL != funcName) && (0 != funcName[0]))
    fprintf (stderr, " in %s", funcName);
  if (0 < lineNum)
    fprintf (stderr, " at line %d", lineNum);

  fprintf (stderr, ".\nLast errno value: %d (%s)\n", (int) errno,
           strerror (errno));

  fflush (stderr);
  exit (8);
}


/* Declarations for local replacements of MHD functions */
/* None, headers are included */

/* Local replacements implementations */

void *
MHD_connection_alloc_memory_ (struct MHD_Connection *connection,
                              size_t size)
{
  void *ret;
  if (NULL == connection)
    mhdErrorExitDesc ("'connection' parameter is NULL");
  /* Use 'read_buffer' just as a flag */
  if (NULL != connection->read_buffer)
  {
    /* Use 'write_buffer' just as a flag */
    if (NULL != connection->write_buffer)
      mhdErrorExitDesc ("Unexpected third memory allocation, " \
                        "while previous allocations was not freed");
  }
  /* Just use simple "malloc()" here */
  ret = malloc (size);
  if (NULL == ret)
    externalErrorExit ();

  /* Track up to two allocations */
  if (NULL == connection->read_buffer)
    connection->read_buffer = (char *) ret;
  else
    connection->write_buffer = (char *) ret;
  return ret;
}


/**
 * Static variable to avoid additional malloc()/free() pairs
 */
static struct MHD_Connection conn;

void
MHD_DLOG (const struct MHD_Daemon *daemon,
          const char *format,
          ...)
{
  (void) daemon;
  if (NULL == conn.rq.last)
  {
    fprintf (stderr, "Unexpected call of 'MHD_LOG(), format is '%s'.\n",
             format);
    fprintf (stderr, "'Authorization' header value: '%s'.\n",
             (NULL == conn.rq.headers_received) ?
             "NULL" : (conn.rq.headers_received->value));
    mhdErrorExit ();
  }
  conn.rq.last = NULL; /* Clear the flag */
  return;
}


/**
 * Static variable to avoid additional malloc()/free() pairs
 */
static struct MHD_HTTP_Req_Header req_header;

static void
test_global_init (void)
{
  memset (&conn, 0, sizeof(conn));
  memset (&req_header, 0, sizeof(req_header));
}


/**
 * Add "Authorization" client test header.
 *
 * @param hdr the pointer to the headr value, must be valid until end of
 *            checking of this header
 * @param hdr_len the length of the @a hdr
 * @note The function is NOT thread-safe
 */
static void
add_AuthHeader (const char *hdr, size_t hdr_len)
{
  if ((NULL != conn.rq.headers_received) ||
      (NULL != conn.rq.headers_received_tail))
    externalErrorExitDesc ("Connection's test headers are not empty already");
  if (NULL != hdr)
  {
    /* Skip initial whitespaces, emulate MHD's headers processing */
    while (' ' == hdr[0] || '\t' == hdr[0])
    {
      hdr++;
      hdr_len--;
    }
    req_header.header = MHD_HTTP_HEADER_AUTHORIZATION; /* Static string */
    req_header.header_size = MHD_STATICSTR_LEN_ (MHD_HTTP_HEADER_AUTHORIZATION);
    req_header.value = hdr;
    req_header.value_size = hdr_len;
    req_header.kind = MHD_HEADER_KIND;
    req_header.prev = NULL;
    req_header.next = NULL;
    conn.rq.headers_received = &req_header;
    conn.rq.headers_received_tail = &req_header;
  }
  else
  {
    conn.rq.headers_received = NULL;
    conn.rq.headers_received_tail = NULL;
  }
  conn.state = MHD_CONNECTION_FULL_REQ_RECEIVED; /* Should be a typical value */
}


#ifdef BAUTH_SUPPORT
/**
 * Parse previously added Basic Authorization client header and return
 * result of the parsing.
 *
 * Function performs basic checking of the parsing result
 * @return result of header parsing
 * @note The function is NOT thread-safe
 */
static const struct MHD_RqBAuth *
get_BAuthRqParams (void)
{
  const struct MHD_RqBAuth *res1;
  const struct MHD_RqBAuth *res2;
  /* Store pointer in some member unused in this test */
  res1 = MHD_get_rq_bauth_params_ (&conn);
  if (! conn.rq.bauth_tried)
    mhdErrorExitDesc ("'rq.bauth_tried' is not set");
  res2 = MHD_get_rq_bauth_params_ (&conn);
  if (res1 != res2)
    mhdErrorExitDesc ("MHD_get_rq_bauth_params_() returned another pointer " \
                      "when called for the second time");
  return res2;
}


#endif /* BAUTH_SUPPORT */

#ifdef DAUTH_SUPPORT
/**
 * Parse previously added Digest Authorization client header and return
 * result of the parsing.
 *
 * Function performs basic checking of the parsing result
 * @return result of header parsing
 * @note The function is NOT thread-safe
 */
static const struct MHD_RqDAuth *
get_DAuthRqParams (void)
{
  const struct MHD_RqDAuth *res1;
  const struct MHD_RqDAuth *res2;
  /* Store pointer in some member unused in this test */
  res1 = MHD_get_rq_dauth_params_ (&conn);
  if (! conn.rq.dauth_tried)
    mhdErrorExitDesc ("'rq.dauth_tried' is not set");
  res2 = MHD_get_rq_dauth_params_ (&conn);
  if (res1 != res2)
    mhdErrorExitDesc ("MHD_get_rq_bauth_params_() returned another pointer " \
                      "when called for the second time");
  return res2;
}


#endif /* DAUTH_SUPPORT */


static void
clean_AuthHeaders (void)
{
  conn.state = MHD_CONNECTION_INIT;
  free (conn.read_buffer);
  free (conn.write_buffer);

#ifdef BAUTH_SUPPORT
  conn.rq.bauth_tried = false;
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  conn.rq.dauth_tried = false;
#endif /* BAUTH_SUPPORT */

#ifdef BAUTH_SUPPORT
  if ((NULL != conn.rq.bauth) &&
      (conn.read_buffer != (const char *) conn.rq.bauth) &&
      (conn.write_buffer != (const char *) conn.rq.bauth))
    externalErrorExitDesc ("Memory allocation is not tracked as it should be");
  conn.rq.bauth = NULL;
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  if ((NULL != conn.rq.dauth) &&
      (conn.read_buffer != (const char *) conn.rq.dauth) &&
      (conn.write_buffer != (const char *) conn.rq.dauth))
    externalErrorExitDesc ("Memory allocation is not tracked as it should be");
  conn.rq.dauth = NULL;
#endif /* BAUTH_SUPPORT */

  conn.rq.headers_received = NULL;
  conn.rq.headers_received_tail = NULL;

  conn.read_buffer = NULL;
  conn.write_buffer = NULL;
  conn.rq.last = NULL;
}


enum MHD_TestAuthType
{
  MHD_TEST_AUTHTYPE_NONE,
  MHD_TEST_AUTHTYPE_BASIC,
  MHD_TEST_AUTHTYPE_DIGEST,
};


/* return zero if succeed, non-zero otherwise */
static unsigned int
expect_result_type_n (const char *hdr, size_t hdr_len,
                      const enum MHD_TestAuthType expected_type,
                      int expect_log,
                      unsigned int line_num)
{
  static char marker1[] = "Expected log call";
  unsigned int ret;

  ret = 0;
  add_AuthHeader (hdr, hdr_len);
  if (expect_log)
    conn.rq.last = marker1; /* Use like a flag */
  else
    conn.rq.last = NULL;
#ifdef BAUTH_SUPPORT
  if (MHD_TEST_AUTHTYPE_BASIC == expected_type)
  {
    if (NULL == get_BAuthRqParams ())
    {
      fprintf (stderr,
               "'Authorization' header parsing FAILED:\n"
               "Basic Authorization was not found, while it should be.\n");
      ret++;
    }
  }
  else
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  if (MHD_TEST_AUTHTYPE_DIGEST == expected_type)
  {
    if (NULL == get_DAuthRqParams ())
    {
      fprintf (stderr,
               "'Authorization' header parsing FAILED:\n"
               "Digest Authorization was not found, while it should be.\n");
      ret++;
    }
  }
  else
#endif /* BAUTH_SUPPORT */
  {
#ifdef BAUTH_SUPPORT
    if (NULL != get_BAuthRqParams ())
    {
      fprintf (stderr,
               "'Authorization' header parsing FAILED:\n"
               "Found Basic Authorization, while it should not be.\n");
      ret++;
    }
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
    if (NULL != get_DAuthRqParams ())
    {
      fprintf (stderr,
               "'Authorization' header parsing FAILED:\n"
               "Found Digest Authorization, while it should not be.\n");
      ret++;
    }
#endif /* DAUTH_SUPPORT */
  }
#if defined(BAUTH_SUPPORT) && defined(DAUTH_SUPPORT)
  if (conn.rq.last)
  {
    fprintf (stderr,
             "'Authorization' header parsing ERROR:\n"
             "Log function must be called, but it was not.\n");
    ret++;
  }
#endif /* BAUTH_SUPPORT && DAUTH_SUPPORT */

  if (ret)
  {
    if (NULL == hdr)
      fprintf (stderr,
               "Input: Absence of 'Authorization' header.\n");
    else if (0 == hdr_len)
      fprintf (stderr,
               "Input: empty 'Authorization' header.\n");
    else
      fprintf (stderr,
               "Input Header: '%.*s'\n", (int) hdr_len, hdr);
    fprintf (stderr,
             "The check is at line: %u\n\n", line_num);
    ret = 1;
  }
  clean_AuthHeaders ();

  return ret;
}


#define expect_result_type(h,t,l) \
    expect_result_type_n(h,MHD_STATICSTR_LEN_(h),t,l,__LINE__)


static unsigned int
check_type (void)
{
  unsigned int r = 0; /**< The number of errors */

  r += expect_result_type_n (NULL, 0, MHD_TEST_AUTHTYPE_NONE, 0, __LINE__);

  r += expect_result_type ("", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("    ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" \t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t \t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" \t ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" \t \t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t \t ", MHD_TEST_AUTHTYPE_NONE, 0);

  r += expect_result_type ("Basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" Basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\tBasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t Basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" \tBasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("    Basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t\tBasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \tBasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \t Basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("Basic ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("Basic \t", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("Basic \t ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("Basic 123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("Basic \t123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("Basic  abc ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" bAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\tbAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t bAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" \tbAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("    bAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t\tbAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \tbAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \t bAsIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC \t", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC \t ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC 123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC \t123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("bAsIC  abc ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\tbasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" \tbasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("    basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t\tbasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \tbasic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \t basic", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic \t", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic \t ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic 123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic \t123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("basic  abc ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" BASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\tBASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t BASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type (" \tBASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("    BASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t\tBASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \tBASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("\t\t  \t BASIC", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC \t", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC \t ", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC 123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC \t123", MHD_TEST_AUTHTYPE_BASIC, 0);
  r += expect_result_type ("BASIC  abc ", MHD_TEST_AUTHTYPE_BASIC, 0);
  /* Only single token is allowed for 'Basic' Authorization */
  r += expect_result_type ("Basic a b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic a\tb", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic a\tb", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic abc1 b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic c abc1", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic c abc1 ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic c abc1\t", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic c\tabc1\t", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic c abc1 b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic zyx, b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic zyx,b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic zyx ,b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic zyx;b", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Basic zyx; b", MHD_TEST_AUTHTYPE_NONE, 1);

  r += expect_result_type ("Basic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" Basic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" Basic2 ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\tBasic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t Basic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" \tBasic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("    Basic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t\t\tBasic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t\t  \tBasic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t\t  \t Basic2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic2 ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic2 \t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic2 \t ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic2 123", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic2 \t123", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic2  abc ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("BasicBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" BasicBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\tBasicBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\t BasicBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" \tBasicBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("BasicBasic ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("BasicBasic \t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("BasicBasic \t\t", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("BasicDigest", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" BasicDigest", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("BasicDigest ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Basic\0", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\0" "Basic", MHD_TEST_AUTHTYPE_NONE, 0);

  r += expect_result_type ("Digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" Digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tDigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t Digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" \tDigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("    Digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t\tDigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \tDigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \t Digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tDigest ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("  Digest \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t \tDigest \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);

  r += expect_result_type ("digEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" digEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tdigEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t digEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" \tdigEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("    digEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t\tdigEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \tdigEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \t digEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digEST ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digEST \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digEST \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tdigEST ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("  digEST \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t \tdigEST \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tdigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" \tdigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("    digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t\tdigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \tdigest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \t digest", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digest ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digest \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("digest \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tdigest ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("  digest \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t \tdigest \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("DIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" DIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tDIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t DIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type (" \tDIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("    DIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t\tDIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \tDIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t\t  \t DIGEST", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("DIGEST ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("DIGEST \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("DIGEST \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\tDIGEST ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("  DIGEST \t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("\t \tDIGEST \t ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,\t", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,  ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest   ,  ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,\t, ,\t, ,\t, ,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,\t,\t,\t,\t,\t,\t,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a=b", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a=\"b\"", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc=1", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc=\"1\"", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a=b ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a=\"b\" ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc=1 ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc=\"1\" ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a = b", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a\t=\t\"b\"", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc =1", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc= \"1\"", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a=\tb ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest a = \"b\" ", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc\t\t\t= 1 ", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc   =\t\t\t\"1\" ", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc =1,,,,", MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest nc =1  ,,,,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,,nc= \"1 \"", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,,  nc= \" 1\"", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,, nc= \"1\",,,,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,, nc= \"1\"  ,,,,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,, nc= \"1\"  ,,,,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,, nc= \"1\"  ,,,,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);
  r += expect_result_type ("Digest ,,,, nc= \"1\"  ,,,,,", \
                           MHD_TEST_AUTHTYPE_DIGEST, 0);

  r += expect_result_type ("Digest nc", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest   nc", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc  ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc  ,", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc  , ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest \tnc\t  ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest \tnc\t  ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc,", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc,uri", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1,uri", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1,uri   ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1,uri,", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1, uri,", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1,uri   ,", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1,uri   , ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  /* Binary zero */
  r += expect_result_type ("Digest nc=1\0", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1\0" " ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1\t\0", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\0" "1", MHD_TEST_AUTHTYPE_NONE, 1);
  /* Semicolon */
  r += expect_result_type ("Digest nc=1;", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1; ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=;1", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc;=1", MHD_TEST_AUTHTYPE_NONE, 1);
  /* The equal sign alone */
  r += expect_result_type ("Digest =", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest   =", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest   =  ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest ,=", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest , =", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest ,= ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest , = ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1,=", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=1, =", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=bar,=", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=bar, =", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  /* Unclosed quotation */
  r += expect_result_type ("Digest nc=\"", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"abc", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"   ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"abc   ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"   abc", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"   abc", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"\\", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"\\\"", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"  \\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"\\\"  ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"  \\\"  ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc=\"\\\"\\\"\\\"\\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"abc", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"   ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"abc   ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"   abc", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"   abc", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"\\", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"\\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"  \\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"\\\"  ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"  \\\"  ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest nc= \"\\\"\\\"\\\"\\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"bar", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"   ", MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"bar   ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"   bar", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"   bar", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo= \"   bar", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\",   bar", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"   bar,", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"\\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"  \\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"\\\"  ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"  \\\"  ", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest foo=\"\\\"\\\"\\\"\\\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  /* Full set of parameters with semicolon inside */
  r += expect_result_type ("Digest username=\"test@example.com\", " \
                           "realm=\"users@example.com\", nonce=\"32141232413abcde\", " \
                           "uri=\"/example\", qop=auth, nc=00000001; cnonce=\"0a4f113b\", " \
                           "response=\"6629fae49393a05397450978507c4ef1\", " \
                           "opaque=\"sadfljk32sdaf\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest username=\"test@example.com\", " \
                           "realm=\"users@example.com\", nonce=\"32141232413abcde\", " \
                           "uri=\"/example\", qop=auth, nc=00000001;cnonce=\"0a4f113b\", " \
                           "response=\"6629fae49393a05397450978507c4ef1\", " \
                           "opaque=\"sadfljk32sdaf\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);
  r += expect_result_type ("Digest username;=\"test@example.com\", " \
                           "realm=\"users@example.com\", nonce=\"32141232413abcde\", " \
                           "uri=\"/example\", qop=auth, nc=00000001, cnonce=\"0a4f113b\", " \
                           "response=\"6629fae49393a05397450978507c4ef1\", " \
                           "opaque=\"sadfljk32sdaf\"", \
                           MHD_TEST_AUTHTYPE_NONE, 1);

  r += expect_result_type ("Digest2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("2Digest", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Digest" "a", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("a" "Digest", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" Digest2", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" 2Digest", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" Digest" "a", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" a" "Digest", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Digest2 ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("2Digest ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Digest" "a", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("a" "Digest ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("DigestBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("DigestBasic ", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type (" DigestBasic", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("DigestBasic" "a", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("Digest" "\0", MHD_TEST_AUTHTYPE_NONE, 0);
  r += expect_result_type ("\0" "Digest", MHD_TEST_AUTHTYPE_NONE, 0);
  return r;
}


#ifdef BAUTH_SUPPORT

/* return zero if succeed, 1 otherwise */
static unsigned int
expect_basic_n (const char *hdr, size_t hdr_len,
                const char *tkn, size_t tkn_len,
                unsigned int line_num)
{
  const struct MHD_RqBAuth *h;
  unsigned int ret;

  mhd_assert (NULL != hdr);
  mhd_assert (0 != hdr_len);

  add_AuthHeader (hdr, hdr_len);
  h = get_BAuthRqParams ();
  if (NULL == h)
    mhdErrorExitDesc ("'MHD_get_rq_bauth_params_()' returned NULL");
  ret = 1;
  if (tkn_len != h->token68.len)
    fprintf (stderr,
             "'Authorization' header parsing FAILED:\n"
             "Wrong token length:\tRESULT[%u]: %.*s\tEXPECTED[%u]: %.*s\n",
             (unsigned) h->token68.len,
             (int) h->token68.len,
             h->token68.str ?
             h->token68.str : "(NULL)",
             (unsigned) tkn_len, (int) tkn_len, tkn ? tkn : "(NULL)");
  else if ( ((NULL == tkn) != (NULL == h->token68.str)) ||
            ((NULL != tkn) &&
             (0 != memcmp (tkn, h->token68.str, tkn_len))) )
    fprintf (stderr,
             "'Authorization' header parsing FAILED:\n"
             "Wrong token string:\tRESULT[%u]: %.*s\tEXPECTED[%u]: %.*s\n",
             (unsigned) h->token68.len,
             (int) h->token68.len,
             h->token68.str ?
             h->token68.str : "(NULL)",
             (unsigned) tkn_len, (int) tkn_len, tkn ? tkn : "(NULL)");
  else
    ret = 0;
  if (0 != ret)
  {
    fprintf (stderr,
             "Input Header: '%.*s'\n", (int) hdr_len, hdr);
    fprintf (stderr,
             "The check is at line: %u\n\n", line_num);
  }
  clean_AuthHeaders ();

  return ret;
}


#define expect_basic(h,t) \
    expect_basic_n(h,MHD_STATICSTR_LEN_(h),t,MHD_STATICSTR_LEN_(t),__LINE__)

static unsigned int
check_basic (void)
{
  unsigned int r = 0; /**< The number of errors */

  r += expect_basic ("Basic a", "a");
  r += expect_basic ("Basic    a", "a");
  r += expect_basic ("Basic \ta", "a");
  r += expect_basic ("Basic \ta\t", "a");
  r += expect_basic ("Basic \ta ", "a");
  r += expect_basic ("Basic  a ", "a");
  r += expect_basic ("Basic \t a\t ", "a");
  r += expect_basic ("Basic \t abc\t ", "abc");
  r += expect_basic ("Basic 2143sdfa4325sdfgfdab354354314SDSDFc", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("Basic 2143sdfa4325sdfgfdab354354314SDSDFc  ", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("Basic   2143sdfa4325sdfgfdab354354314SDSDFc", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("Basic   2143sdfa4325sdfgfdab354354314SDSDFc  ", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("  Basic 2143sdfa4325sdfgfdab354354314SDSDFc", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("  Basic  2143sdfa4325sdfgfdab354354314SDSDFc", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("  Basic 2143sdfa4325sdfgfdab354354314SDSDFc ", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("  Basic  2143sdfa4325sdfgfdab354354314SDSDFc ", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("  Basic  2143sdfa4325sdfgfdab354354314SDSDFc  ", \
                     "2143sdfa4325sdfgfdab354354314SDSDFc");
  r += expect_basic ("Basic -A.1-z~9+/=====", "-A.1-z~9+/=====");
  r += expect_basic ("  Basic   -A.1-z~9+/===== ", "-A.1-z~9+/=====");

  r += expect_basic_n ("Basic", MHD_STATICSTR_LEN_ ("Basic"), NULL, 0,__LINE__);
  r += expect_basic_n ("   Basic", MHD_STATICSTR_LEN_ ("   Basic"), NULL, 0,
                       __LINE__);
  r += expect_basic_n ("Basic   ", MHD_STATICSTR_LEN_ ("Basic   "), NULL, 0,
                       __LINE__);
  r += expect_basic_n ("Basic \t\t", MHD_STATICSTR_LEN_ ("Basic \t\t"), NULL, 0,
                       __LINE__);

  return r;
}


#endif /* BAUTH_SUPPORT */


#ifdef DAUTH_SUPPORT

/* return zero if succeed, 1 otherwise */
static unsigned int
cmp_dauth_param (const char *pname, const struct MHD_RqDAuthParam *param,
                 const char *expected_value)
{
  unsigned int ret;
  size_t expected_len;
  bool expected_quoted;
  mhd_assert (NULL != param);
  mhd_assert (NULL != pname);
  ret = 0;

  if (NULL == expected_value)
  {
    expected_len = 0;
    expected_quoted = false;
    if (NULL != param->value.str)
      ret = 1;
    else if (param->value.len != expected_len)
      ret = 1;
    else if (param->quoted != expected_quoted)
      ret = 1;
  }
  else
  {
    expected_len = strlen (expected_value);
    expected_quoted = (NULL != memchr (expected_value, '\\', expected_len));
    if (NULL == param->value.str)
      ret = 1;
    else if (param->value.len != expected_len)
      ret = 1;
    else if (param->quoted != expected_quoted)
      ret = 1;
    else if (0 != memcmp (param->value.str, expected_value, expected_len))
      ret = 1;
  }
  if (0 != ret)
  {
    fprintf (stderr, "Parameter '%s' parsed incorrectly:\n", pname);
    fprintf (stderr, "\tRESULT  :\tvalue.str: %.*s",
             (int) (param->value.str ? param->value.len : 6),
             param->value.str ? param->value.str : "(NULL)");
    fprintf (stderr, "\tvalue.len: %u",
             (unsigned) param->value.len);
    fprintf (stderr, "\tquoted: %s\n",
             (unsigned) param->quoted ? "true" : "false");
    fprintf (stderr, "\tEXPECTED:\tvalue.str: %.*s",
             (int) (expected_value ? expected_len : 6),
             expected_value ? expected_value : "(NULL)");
    fprintf (stderr, "\tvalue.len: %u",
             (unsigned) expected_len);
    fprintf (stderr, "\tquoted: %s\n",
             (unsigned) expected_quoted ? "true" : "false");
  }
  return ret;
}


/* return zero if succeed, 1 otherwise */
static unsigned int
expect_digest_n (const char *hdr, size_t hdr_len,
                 const char *nonce,
                 enum MHD_DigestAuthAlgo3 algo3,
                 const char *response,
                 const char *username,
                 const char *username_ext,
                 const char *realm,
                 const char *uri,
                 const char *qop_raw,
                 enum MHD_DigestAuthQOP qop,
                 const char *cnonce,
                 const char *nc,
                 int userhash,
                 unsigned int line_num)
{
  const struct MHD_RqDAuth *h;
  unsigned int ret;

  mhd_assert (NULL != hdr);
  mhd_assert (0 != hdr_len);

  add_AuthHeader (hdr, hdr_len);

  h = get_DAuthRqParams ();
  if (NULL == h)
    mhdErrorExitDesc ("'MHD_get_rq_dauth_params_()' returned NULL");
  ret = 0;

  ret += cmp_dauth_param ("nonce", &h->nonce, nonce);
  if (h->algo3 != algo3)
  {
    ret += 1;
    fprintf (stderr, "Parameter 'algorithm' detected incorrectly:\n");
    fprintf (stderr, "\tRESULT  :\t%u\n",
             (unsigned) h->algo3);
    fprintf (stderr, "\tEXPECTED:\t%u\n",
             (unsigned) algo3);
  }
  ret += cmp_dauth_param ("response", &h->response, response);
  ret += cmp_dauth_param ("username", &h->username, username);
  ret += cmp_dauth_param ("username_ext", &h->username_ext,
                          username_ext);
  ret += cmp_dauth_param ("realm", &h->realm, realm);
  ret += cmp_dauth_param ("uri", &h->uri, uri);
  ret += cmp_dauth_param ("qop", &h->qop_raw, qop_raw);
  if (h->qop != qop)
  {
    ret += 1;
    fprintf (stderr, "Parameter 'qop' detected incorrectly:\n");
    fprintf (stderr, "\tRESULT  :\t%u\n",
             (unsigned) h->qop);
    fprintf (stderr, "\tEXPECTED:\t%u\n",
             (unsigned) qop);
  }
  ret += cmp_dauth_param ("cnonce", &h->cnonce, cnonce);
  ret += cmp_dauth_param ("nc", &h->nc, nc);
  if (h->userhash != ! (! userhash))
  {
    ret += 1;
    fprintf (stderr, "Parameter 'userhash' parsed incorrectly:\n");
    fprintf (stderr, "\tRESULT  :\t%s\n",
             h->userhash ? "true" : "false");
    fprintf (stderr, "\tEXPECTED:\t%s\n",
             userhash ? "true" : "false");
  }
  if (0 != ret)
  {
    fprintf (stderr,
             "Input Header: '%.*s'\n", (int) hdr_len, hdr);
    fprintf (stderr,
             "The check is at line: %u\n\n", line_num);
  }
  clean_AuthHeaders ();

  return ret;
}


#define expect_digest(h,no,a,rs,un,ux,rm,ur,qr,qe,c,nc,uh) \
    expect_digest_n(h,MHD_STATICSTR_LEN_(h),\
                    no,a,rs,un,ux,rm,ur,qr,qe,c,nc,uh,__LINE__)

static unsigned int
check_digest (void)
{
  unsigned int r = 0; /**< The number of errors */

  r += expect_digest ("Digest", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest nc=1", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, NULL, \
                      MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest nc=\"1\"", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest nc=\"1\"   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest ,nc=\"1\"   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest nc=\"1\",   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest nc=\"1\" ,   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest nc=1,   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest nc=1 ,   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest ,,,nc=1,   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest ,,,nc=1 ,   ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1", 0);
  r += expect_digest ("Digest ,,,nc=\"1 \",   ", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1 ", 0);
  r += expect_digest ("Digest nc=\"1 \"", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1 ", 0);
  r += expect_digest ("Digest nc=\"1 \" ,", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1 ", 0);
  r += expect_digest ("Digest nc=\"1 \", ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1 ", 0);
  r += expect_digest ("Digest nc=\"1;\", ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1;", 0);
  r += expect_digest ("Digest nc=\"1\\;\", ", NULL, MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, "1\\;", 0);

  r += expect_digest ("Digest userhash=false", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest userhash=\"false\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest userhash=foo", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest userhash=true", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 1);
  r += expect_digest ("Digest userhash=\"true\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 1);
  r += expect_digest ("Digest userhash=\"\\t\\r\\u\\e\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 1);
  r += expect_digest ("Digest userhash=TRUE", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 1);
  r += expect_digest ("Digest userhash=True", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 1);
  r += expect_digest ("Digest userhash = true", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL,  NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 1);
  r += expect_digest ("Digest userhash=True2", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest userhash=\" true\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL,  NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);

  r += expect_digest ("Digest algorithm=MD5", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=md5", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=Md5", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=mD5", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=\"MD5\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=\"\\M\\D\\5\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=\"\\m\\d\\5\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=SHA-256", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=sha-256", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=Sha-256", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=\"SHA-256\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=\"SHA\\-25\\6\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=\"shA-256\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=MD5-sess", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5_SESSION, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=MD5-SESS", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5_SESSION, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=md5-Sess", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5_SESSION, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=SHA-256-seSS", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA256_SESSION, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=SHA-512-256", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA512_256, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=SHA-512-256-sess", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_SHA512_256_SESSION, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=MD5-2", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_INVALID, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=MD5-sess2", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_INVALID, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=SHA-256-512", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_INVALID, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);
  r += expect_digest ("Digest algorithm=", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_INVALID, \
                      NULL, NULL, NULL, NULL, NULL, \
                      NULL, MHD_DIGEST_AUTH_QOP_NONE, NULL, NULL, 0);

  r += expect_digest ("Digest qop=auth", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, NULL, NULL, 0);
  r += expect_digest ("Digest qop=\"auth\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, NULL, NULL, 0);
  r += expect_digest ("Digest qop=Auth", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "Auth", MHD_DIGEST_AUTH_QOP_AUTH, NULL, NULL, 0);
  r += expect_digest ("Digest qop=AUTH", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "AUTH", MHD_DIGEST_AUTH_QOP_AUTH, NULL, NULL, 0);
  r += expect_digest ("Digest qop=\"\\A\\ut\\H\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "\\A\\ut\\H", MHD_DIGEST_AUTH_QOP_AUTH, NULL, NULL, 0);
  r += expect_digest ("Digest qop=\"auth \"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auth ", MHD_DIGEST_AUTH_QOP_INVALID, NULL, NULL, 0);
  r += expect_digest ("Digest qop=auth-int", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auth-int", MHD_DIGEST_AUTH_QOP_AUTH_INT, NULL, NULL, 0);
  r += expect_digest ("Digest qop=\"auth-int\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auth-int", MHD_DIGEST_AUTH_QOP_AUTH_INT, NULL, NULL, 0);
  r += expect_digest ("Digest qop=\"auTh-iNt\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auTh-iNt", MHD_DIGEST_AUTH_QOP_AUTH_INT, NULL, NULL, 0);
  r += expect_digest ("Digest qop=\"auTh-iNt2\"", NULL, \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      NULL, NULL, NULL, NULL, NULL, \
                      "auTh-iNt2", MHD_DIGEST_AUTH_QOP_INVALID, NULL, NULL, 0);

  r += expect_digest ("Digest username=\"test@example.com\", " \
                      "realm=\"users@example.com\", " \
                      "nonce=\"32141232413abcde\", " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\"", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_MD5, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      NULL, "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, \
                      "0a4f113b", "00000001", 0);
  r += expect_digest ("Digest username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\"", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest username=test@example.com, " \
                      "realm=users@example.com, algorithm=\"SHA-256-sess\", " \
                      "nonce=32141232413abcde, " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=/example, qop=\"auth\", nc=\"00000001\", " \
                      "cnonce=0a4f113b, " \
                      "response=6629fae49393a05397450978507c4ef1, " \
                      "opaque=sadfljk32sdaf", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256_SESSION, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest username = \"test@example.com\", " \
                      "realm\t=\t\"users@example.com\", algorithm\t= SHA-256, " \
                      "nonce\t= \"32141232413abcde\", " \
                      "username*\t=\tUTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri = \"/example\", qop = auth, nc\t=\t00000001, " \
                      "cnonce\t\t\t=   \"0a4f113b\", " \
                      "response  =\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\t\t\"sadfljk32sdaf\"", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest username=\"test@example.com\"," \
                      "realm=\"users@example.com\",algorithm=SHA-512-256," \
                      "nonce=\"32141232413abcde\"," \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates," \
                      "uri=\"/example\",qop=auth,nc=00000001," \
                      "cnonce=\"0a4f113b\"," \
                      "response=\"6629fae49393a05397450978507c4ef1\"," \
                      "opaque=\"sadfljk32sdaf\"", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA512_256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest username=\"test@example.com\"," \
                      "realm=\"users@example.com\",algorithm=SHA-256," \
                      "nonce=\"32141232413abcde\",asdf=asdffdsaf," \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates," \
                      "uri=\"/example\",qop=auth,nc=00000001,cnonce=\"0a4f113b\"," \
                      "response=\"6629fae49393a05397450978507c4ef1\"," \
                      "opaque=\"sadfljk32sdaf\"", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=zyx, username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\"", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=zyx,,,,,,,username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\"", "32141232413abcde",
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=zyx,,,,,,,username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, "
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\",,,,,", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=zyx,,,,,,,username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\",foo=bar", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=\"zyx\", username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, "
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\",foo=bar", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=\"zyx, abc\", " \
                      "username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, "
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\",foo=bar", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=\"zyx, abc=cde\", " \
                      "username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\",foo=bar", "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=\"zyx, abc=cde\", " \
                      "username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, " \
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\", foo=\"bar1, bar2\"", \
                      "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=\"zyx, \\\\\"abc=cde\\\\\"\", " \
                      "username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\", foo=\"bar1, bar2\"", \
                      "32141232413abcde",
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);
  r += expect_digest ("Digest abc=\"zyx, \\\\\"abc=cde\\\\\"\", " \
                      "username=\"test@example.com\", " \
                      "realm=\"users@example.com\", algorithm=SHA-256, " \
                      "nonce=\"32141232413abcde\", " \
                      "username*=UTF-8''%c2%a3%20and%20%e2%82%ac%20rates, " \
                      "uri=\"/example\", qop=auth, nc=00000001, "
                      "cnonce=\"0a4f113b\", " \
                      "response=\"6629fae49393a05397450978507c4ef1\", " \
                      "opaque=\"sadfljk32sdaf\", foo=\",nc=02\"",
                      "32141232413abcde", \
                      MHD_DIGEST_AUTH_ALGO3_SHA256, \
                      "6629fae49393a05397450978507c4ef1", "test@example.com", \
                      "UTF-8''%c2%a3%20and%20%e2%82%ac%20rates", \
                      "users@example.com", "/example", \
                      "auth", MHD_DIGEST_AUTH_QOP_AUTH, "0a4f113b", \
                      "00000001", 0);

  return r;
}


#endif /* DAUTH_SUPPORT */

#define TEST_AUTH_STR "dXNlcjpwYXNz"

static unsigned int
check_two_auths (void)
{
  unsigned int ret;
  static struct MHD_HTTP_Req_Header h1;
  static struct MHD_HTTP_Req_Header h2;
  static struct MHD_HTTP_Req_Header h3;
#ifdef BAUTH_SUPPORT
  const struct MHD_RqBAuth *bauth;
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  const struct MHD_RqDAuth *dauth;
#endif /* DAUTH_SUPPORT */

  if ((NULL != conn.rq.headers_received) ||
      (NULL != conn.rq.headers_received_tail))
    externalErrorExitDesc ("Connection's test headers are not empty already");

  /* Init and use both Basic and Digest Auth headers */
  memset (&h1, 0, sizeof(h1));
  memset (&h2, 0, sizeof(h2));
  memset (&h3, 0, sizeof(h3));

  h1.kind = MHD_HEADER_KIND;
  h1.header = MHD_HTTP_HEADER_HOST; /* Just some random header */
  h1.header_size = MHD_STATICSTR_LEN_ (MHD_HTTP_HEADER_HOST);
  h1.value = "localhost";
  h1.value_size = strlen (h1.value);

  h2.kind = MHD_HEADER_KIND;
  h2.header = MHD_HTTP_HEADER_AUTHORIZATION;
  h2.header_size = MHD_STATICSTR_LEN_ (MHD_HTTP_HEADER_AUTHORIZATION);
  h2.value = "Basic " TEST_AUTH_STR;
  h2.value_size = strlen (h2.value);

  h3.kind = MHD_HEADER_KIND;
  h3.header = MHD_HTTP_HEADER_AUTHORIZATION;
  h3.header_size = MHD_STATICSTR_LEN_ (MHD_HTTP_HEADER_AUTHORIZATION);
  h3.value = "Digest cnonce=" TEST_AUTH_STR;
  h3.value_size = strlen (h3.value);

  conn.rq.headers_received = &h1;
  h1.next = &h2;
  h2.prev = &h1;
  h2.next = &h3;
  h3.prev = &h2;
  conn.rq.headers_received_tail = &h3;

  conn.state = MHD_CONNECTION_FULL_REQ_RECEIVED; /* Should be a typical value */

  ret = 0;
#ifdef BAUTH_SUPPORT
  bauth = get_BAuthRqParams ();
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  dauth = get_DAuthRqParams ();
#endif /* DAUTH_SUPPORT */
#ifdef BAUTH_SUPPORT
  if (NULL == bauth)
  {
    fprintf (stderr, "No Basic Authorization header detected. Line: %u\n",
             (unsigned int) __LINE__);
    ret++;
  }
  else if ((MHD_STATICSTR_LEN_ (TEST_AUTH_STR) != bauth->token68.len) ||
           (0 != memcmp (bauth->token68.str, TEST_AUTH_STR,
                         bauth->token68.len)))
  {
    fprintf (stderr, "Basic Authorization token does not match. Line: %u\n",
             (unsigned int) __LINE__);
    ret++;
  }
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  if (NULL == dauth)
  {
    fprintf (stderr, "No Digest Authorization header detected. Line: %u\n",
             (unsigned int) __LINE__);
    ret++;
  }
  else if ((MHD_STATICSTR_LEN_ (TEST_AUTH_STR) != dauth->cnonce.value.len) ||
           (0 != memcmp (dauth->cnonce.value.str, TEST_AUTH_STR,
                         dauth->cnonce.value.len)))
  {
    fprintf (stderr, "Digest Authorization 'cnonce' does not match. Line: %u\n",
             (unsigned int) __LINE__);
    ret++;
  }
#endif /* DAUTH_SUPPORT */

  /* Cleanup */
  conn.rq.headers_received = NULL;
  conn.rq.headers_received_tail = NULL;
  conn.state = MHD_CONNECTION_INIT;

  return ret;
}


int
main (int argc, char *argv[])
{
  unsigned int errcount = 0;
  (void) argc; (void) argv; /* Unused. Silent compiler warning. */
  test_global_init ();

  errcount += check_type ();
#ifdef BAUTH_SUPPORT
  errcount += check_basic ();
#endif /* BAUTH_SUPPORT */
#ifdef DAUTH_SUPPORT
  errcount += check_digest ();
#endif /* DAUTH_SUPPORT */
  errcount += check_two_auths ();
  if (0 == errcount)
    printf ("All tests were passed without errors.\n");
  return errcount == 0 ? 0 : 1;
}
