/*
 * proxy-bio-unittest.c - proxy-bio unit tests
 * Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include <alloca.h>

#include "src/proxy-bio.h"
#include "src/test-bio.h"
#include "src/test_harness.h"
#include "src/tlsdate.h"

FIXTURE (test_bio)
{
  BIO *test;
};

FIXTURE_SETUP (test_bio)
{
  self->test = BIO_new_test();
  ASSERT_NE (NULL, self->test);
}

FIXTURE_TEARDOWN (test_bio)
{
  BIO_free (self->test);
}

BIO *proxy_bio (BIO *test, const char *type)
{
  BIO *proxy = BIO_new_proxy();
  BIO_proxy_set_type (proxy, type);
  BIO_proxy_set_target_host (proxy, kTestHost);
  BIO_proxy_set_target_port (proxy, TEST_PORT);
  BIO_push (proxy, test);
  return proxy;
}

int need_out_bytes (BIO *test, const unsigned char *out, size_t sz)
{
  unsigned char *buf = malloc (sz);
  size_t i;
  int result;
  if (!buf)
    return 1;
  if (BIO_test_output_left (test) <  sz)
    {
      fprintf (TH_LOG_STREAM, "not enough output: %d < %d\n",
               (int) BIO_test_output_left (test), (int) sz);
      free (buf);
      return 2;
    }
  if (BIO_test_get_output (test, buf, sz) != sz)
    {
      free (buf);
      return 3;
    }
  if (memcmp (buf, out, sz))
    {
      for (i = 0; i < sz; i++)
        {
          if (buf[i] != out[i])
            fprintf (TH_LOG_STREAM,
                     "mismatch %d %02x %02x\n", (int) i,
                     buf[i], out[i]);
        }
    }
  result = memcmp (buf, out, sz);
  free (buf);
  return result;
}

int need_out_byte (BIO *test, unsigned char out)
{
  unsigned char c;
  if (BIO_test_output_left (test) < 1)
    return 1;
  if (BIO_test_get_output (test, &c, 1) != 1)
    return 2;
  return c != out;
}

int get_bytes (BIO *test, unsigned char *buf, size_t sz)
{
  return BIO_test_get_output (test, buf, sz);
}

void put_bytes (BIO *test, const unsigned char *buf, size_t sz)
{
  BIO_test_add_input (test, buf, sz);
}

void put_byte (BIO *test, char c)
{
  BIO_test_add_input (test, (unsigned char *) &c, 1);
}

unsigned const char kSocks4ARequest[] =
{
  0x04, /* socks4 */
  0x01, /* tcp stream */
  (TEST_PORT & 0xff00) >> 8,
  TEST_PORT & 0xff,
  0x00, 0x00, 0x00, 0x01, /* bogus IP */
  0x00, /* userid */
  TEST_HOST, 0x00 /* null-terminated host */
};

TEST_F (test_bio, socks4a_success)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  unsigned const char kReply[] =
  {
    0x00, /* null byte */
    0x5a, /* success */
    (TEST_PORT & 0xff00) >> 8,  /* port high */
    TEST_PORT & 0xff, /* port low */
    0x00, 0x00, 0x00, 0x00  /* bogus IP */
  };
  BIO *proxy = proxy_bio (self->test, "socks4a");
  put_bytes (self->test, kReply, sizeof (kReply));
  EXPECT_EQ (4, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks4ARequest,
                                sizeof (kSocks4ARequest)));
  EXPECT_EQ (0, need_out_bytes (self->test, kTestInput,
                                sizeof (kTestInput)));
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

TEST_F (test_bio, socks4a_fail)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  unsigned const char kReply[] =
  {
    0x00, /* null byte */
    0x5b, /* fail */
    (TEST_PORT & 0xff00) >> 8,  /* port high */
    TEST_PORT & 0xff, /* port low */
    0x00, 0x00, 0x00, 0x00  /* bogus IP */
  };
  BIO *proxy = proxy_bio (self->test, "socks4a");
  put_bytes (self->test, kReply, sizeof (kReply));
  EXPECT_EQ (0, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks4ARequest,
                                sizeof (kSocks4ARequest)));
  /* We shouldn't have written any payload */
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

unsigned const char kSocks5AuthRequest[] =
{
  0x05, /* socks5 */
  0x01, /* one auth method */
  0x00  /* no auth */
};

unsigned const char kSocks5AuthReply[] =
{
  0x05, /* socks5 */
  0x00, /* no auth */
};

unsigned const char kSocks5ConnectRequest[] =
{
  0x05, /* socks5 */
  0x01, /* tcp stream */
  0x00, /* reserved 0x00 */
  0x03, /* domain name */
  TEST_HOST_SIZE, /* hostname with length prefix */
  TEST_HOST,
  (TEST_PORT & 0xff00) >> 8,
  TEST_PORT & 0xff
};

unsigned const char kSocks5ConnectReply[] =
{
  0x05, /* socks5 */
  0x00, /* success */
  0x00, /* reserved 0x00 */
  0x03, /* domain name */
  TEST_HOST_SIZE, /* hostname with length prefix */
  TEST_HOST,
  (TEST_PORT & 0xff00) >> 8,
  TEST_PORT & 0xff
};

TEST_F (test_bio, socks5_success)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  BIO *proxy = proxy_bio (self->test, "socks5");
  put_bytes (self->test, kSocks5AuthReply, sizeof (kSocks5AuthReply));
  put_bytes (self->test, kSocks5ConnectReply, sizeof (kSocks5ConnectReply));
  EXPECT_EQ (4, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks5AuthRequest,
                                sizeof (kSocks5AuthRequest)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks5ConnectRequest,
                                sizeof (kSocks5ConnectRequest)));
  EXPECT_EQ (0, need_out_bytes (self->test, kTestInput,
                                sizeof (kTestInput)));
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

TEST_F (test_bio, socks5_auth_fail)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  unsigned const char kAuthFail[] =
  {
    0x05,
    0xff,
  };
  BIO *proxy = proxy_bio (self->test, "socks5");
  put_bytes (self->test, kAuthFail, sizeof (kAuthFail));
  EXPECT_EQ (0, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks5AuthRequest,
                                sizeof (kSocks5AuthRequest)));
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

TEST_F (test_bio, socks5_connect_fail)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  unsigned const char kConnectFail[] =
  {
    0x05,
    0x01,
    0x00,
    0x03,
    TEST_HOST_SIZE,
    TEST_HOST,
    (TEST_PORT & 0xff00) >> 8,
    TEST_PORT & 0xff
  };
  BIO *proxy = proxy_bio (self->test, "socks5");
  put_bytes (self->test, kSocks5AuthReply, sizeof (kSocks5AuthReply));
  put_bytes (self->test, kConnectFail, sizeof (kConnectFail));
  EXPECT_EQ (0, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks5AuthRequest,
                                sizeof (kSocks5AuthRequest)));
  EXPECT_EQ (0, need_out_bytes (self->test, kSocks5ConnectRequest,
                                sizeof (kSocks5ConnectRequest)));
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

TEST_F (test_bio, http_success)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  BIO *proxy = proxy_bio (self->test, "http");
  char kConnectRequest[1024];
  char kConnectResponse[] = "HTTP/1.0 200 OK\r\n"
                            "Uninteresting-Header: foobar\r\n"
                            "Another-Header: lol\r\n"
                            "\r\n";
  snprintf (kConnectRequest, sizeof (kConnectRequest),
            "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n\r\n",
            kTestHost, TEST_PORT, kTestHost, TEST_PORT);
  put_bytes (self->test, (unsigned char *) kConnectResponse,
             strlen (kConnectResponse));
  EXPECT_EQ (4, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test,
                                (unsigned char *) kConnectRequest,
                                strlen (kConnectRequest)));
  EXPECT_EQ (0, need_out_bytes (self->test, kTestInput,
                                sizeof (kTestInput)));
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

TEST_F (test_bio, http_error)
{
  unsigned const char kTestInput[] = { 0xde, 0xad, 0xbe, 0xef };
  BIO *proxy = proxy_bio (self->test, "http");
  char kConnectRequest[1024];
  char kConnectResponse[] = "HTTP/1.0 403 NO U\r\n"
                            "Uninteresting-Header: foobar\r\n"
                            "Another-Header: lol\r\n"
                            "\r\n";
  snprintf (kConnectRequest, sizeof (kConnectRequest),
            "CONNECT %s:%d HTTP/1.1\r\nHost: %s:%d\r\n\r\n",
            kTestHost, TEST_PORT, kTestHost, TEST_PORT);
  put_bytes (self->test, (unsigned char *) kConnectResponse,
             strlen (kConnectResponse));
  EXPECT_EQ (0, BIO_write (proxy, kTestInput, sizeof (kTestInput)));
  EXPECT_EQ (0, need_out_bytes (self->test,
                                (unsigned char *) kConnectRequest,
                                strlen (kConnectRequest)));
  EXPECT_EQ (0, BIO_test_output_left (self->test));
}

TEST_HARNESS_MAIN
