aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_proto_haproxy.c
blob: 040354ec1f45db7ad34452bc57d9daeaa3b0b76b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/* Copyright (c) 2019-2020, The Tor Project, Inc. */
/* See LICENSE for licensing information */

/**
 * \file test_proto_haproxy.c
 * \brief Tests for our HAProxy protocol parser code
 */

#define PROTO_HAPROXY_PRIVATE

#include "test/test.h"
#include "core/proto/proto_haproxy.h"
#include "test/log_test_helpers.h"

static void
test_format_proxy_header_line(void *arg)
{
  tor_addr_t addr;
  tor_addr_port_t *addr_port = NULL;
  char *output = NULL;

  (void) arg;

  /* IPv4 address. */
  tor_addr_parse(&addr, "192.168.1.2");
  addr_port = tor_addr_port_new(&addr, 8000);
  output = haproxy_format_proxy_header_line(addr_port);

  tt_str_op(output, OP_EQ, "PROXY TCP4 0.0.0.0 192.168.1.2 0 8000\r\n");

  tor_free(addr_port);
  tor_free(output);

  /* IPv6 address. */
  tor_addr_parse(&addr, "123:45:6789::5005:11");
  addr_port = tor_addr_port_new(&addr, 8000);
  output = haproxy_format_proxy_header_line(addr_port);

  tt_str_op(output, OP_EQ, "PROXY TCP6 :: 123:45:6789::5005:11 0 8000\r\n");

  tor_free(addr_port);
  tor_free(output);

  /* UNIX socket address. */
  memset(&addr, 0, sizeof(addr));
  addr.family = AF_UNIX;
  addr_port = tor_addr_port_new(&addr, 8000);
  output = haproxy_format_proxy_header_line(addr_port);

  /* If it's not an IPv4 or IPv6 address, haproxy_format_proxy_header_line
   * must return NULL. */
  tt_ptr_op(output, OP_EQ, NULL);

  tor_free(addr_port);
  tor_free(output);

 done:
  tor_free(addr_port);
  tor_free(output);
}

struct testcase_t proto_haproxy_tests[] = {
  { "format_proxy_header_line", test_format_proxy_header_line, 0, NULL, NULL },

  END_OF_TESTCASES
};