Ejemplo n.º 1
0
END_TEST

START_TEST(multiple_add_test)
{
  dpl_addrlist_t *addrlist;
  dpl_status_t r;

  /* create the addrlist */
  addrlist = dpl_addrlist_create(NULL);
  dpl_assert_ptr_not_null(addrlist);

  /* add an address */
  r = dpl_addrlist_add_from_str(addrlist, "192.168.1.1:80");
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_int_eq(1, dpl_addrlist_count(addrlist));

  /* adding the same address again is a no-op (well not
   * quite but close enough). */
  r = dpl_addrlist_add_from_str(addrlist, "192.168.1.1:80");
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_int_eq(1, dpl_addrlist_count(addrlist));

  /* an address which is the same IP but a different
   * port counts as a different address */
  r = dpl_addrlist_add_from_str(addrlist, "192.168.1.1:8080");
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_int_eq(2, dpl_addrlist_count(addrlist));

  dpl_addrlist_free(addrlist);
}
Ejemplo n.º 2
0
END_TEST

START_TEST(create_from_str_1_test)
{
  dpl_addrlist_t        *addrlist;
  dpl_addr_t            *addrp = NULL;
  dpl_status_t          r;
  char                  *s, ident[INET_ADDRSTRLEN];

  /* create the addrlist */
  addrlist = dpl_addrlist_create_from_str("4244", "192.168.1.1");
  dpl_assert_ptr_not_null(addrlist);

  /* verify length */
  dpl_assert_int_eq(1, dpl_addrlist_count(addrlist));

  /* verify getting elements by index */
  r = dpl_addrlist_get_nth(addrlist, 0, &addrp);
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_ptr_not_null(addrp);
  dpl_assert_str_eq(addrp->host, "192.168.1.1");
  dpl_assert_str_eq(addrp->portstr, "4244");
  dpl_assert_ptr_not_null(addrp->h);
  dpl_assert_int_eq(addrp->h->h_addrtype, AF_INET); 
  inet_ntop(addrp->h->h_addrtype, addrp->h->h_addr, ident, sizeof(ident));
  dpl_assert_str_eq(ident, "192.168.1.1");
  dpl_assert_int_eq(addrp->port, 4244);

  /* indexes wrap modulo the count */
  r = dpl_addrlist_get_nth(addrlist, 1, &addrp);
  dpl_assert_ptr_not_null(addrp);
  dpl_assert_str_eq(addrp->host, "192.168.1.1");
  dpl_assert_str_eq(addrp->portstr, "4244");
  dpl_assert_ptr_not_null(addrp->h);
  dpl_assert_int_eq(addrp->h->h_addrtype, AF_INET); 
  inet_ntop(addrp->h->h_addrtype, addrp->h->h_addr, ident, sizeof(ident));
  dpl_assert_str_eq(ident, "192.168.1.1");
  dpl_assert_int_eq(addrp->port, 4244);

  r = dpl_addrlist_get_nth(addrlist, 347, &addrp);
  dpl_assert_ptr_not_null(addrp);
  dpl_assert_str_eq(addrp->host, "192.168.1.1");
  dpl_assert_str_eq(addrp->portstr, "4244");
  dpl_assert_ptr_not_null(addrp->h);
  dpl_assert_int_eq(addrp->h->h_addrtype, AF_INET); 
  inet_ntop(addrp->h->h_addrtype, addrp->h->h_addr, ident, sizeof(ident));
  dpl_assert_str_eq(ident, "192.168.1.1");
  dpl_assert_int_eq(addrp->port, 4244);

  /* verify the string form of the addrlist */
  s = dpl_addrlist_get(addrlist);
  dpl_assert_str_eq(s, "192.168.1.1:4244");

  free(s);
  dpl_addrlist_free(addrlist);
}
Ejemplo n.º 3
0
static char *
discover_traversible(dpl_addrlist_t *addrlist)
{
  int n;
  int i;
  int j;
  char *s;
  dpl_status_t r;
  char *addr;
#define MAXADDRS    32
  int naddrs = 0;
  char *addrs[MAXADDRS];

  n = dpl_addrlist_count(addrlist);
  for (i = 0 ; i < n ; i++)
    {
      addr = get_nth(addrlist, i);

      for (j = 0 ; j < naddrs ; j++)
	{
	  if (!strcmp(addr, addrs[j]))
	    break;
	}
      if (j == naddrs)
	{
	  dpl_assert_int_ne(naddrs, MAXADDRS);
	  addrs[naddrs++] = addr;
	}
      else
	free(addr);
    }

  /* sort the results into a predictable order */
  qsort(addrs, naddrs, sizeof(char*), compare_addrs);

  /* concatenate the strings into one big one */
  n = 0;
  for (i = 0 ; i < naddrs ; i++)
    n += strlen(addrs[i])+1;

  s = malloc(n);
  dpl_assert_ptr_not_null(s);
  s[0] = '\0';

  for (i = 0 ; i < naddrs ; i++)
    {
      if (i)
	strcat(s, ",");
      strcat(s, addrs[i]);
      free(addrs[i]);
    }

  return s;
}
Ejemplo n.º 4
0
END_TEST

/* Passing addrlist=null to various functions fails cleanly */
START_TEST(null_test)
{
  char *s;

  /* dpl_addrlist_get() has an odd return for this corner case, but whatever */
  s = dpl_addrlist_get(NULL);
  dpl_assert_str_eq(s, "");
  free(s);

  dpl_assert_int_eq(0, dpl_addrlist_count(NULL));
  dpl_addrlist_free(NULL);
  dpl_assert_int_eq(DPL_FAILURE, dpl_addrlist_blacklist(NULL, "192.168.1.32", "80", 30));
  dpl_assert_int_eq(DPL_FAILURE, dpl_addrlist_unblacklist(NULL, "192.168.1.32", "80"));
  dpl_assert_int_eq(DPL_FAILURE, dpl_addrlist_set_from_str(NULL, "192.168.1.32"));
  dpl_assert_ptr_null(dpl_addrlist_create_from_str(NULL, NULL));
  dpl_addrlist_lock(NULL);
  dpl_addrlist_unlock(NULL);
  dpl_assert_int_eq(DPL_ENOENT, dpl_addrlist_get_nth(NULL, 1, &s, &s, NULL, NULL));
  dpl_assert_int_eq(DPL_FAILURE, dpl_addrlist_add(NULL, "192.168.1.32", "80"));
}
Ejemplo n.º 5
0
END_TEST

START_TEST(default_default_port_test)
{
  dpl_addrlist_t *addrlist;
  dpl_status_t r;
  char *s;

  /* create the addrlist */
  addrlist = dpl_addrlist_create(NULL);
  dpl_assert_ptr_not_null(addrlist);

  r = dpl_addrlist_add_from_str(addrlist, "192.168.1.1");
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_int_eq(1, dpl_addrlist_count(addrlist));

  /* verify the string form of the addrlist */
  s = dpl_addrlist_get(addrlist);
  dpl_assert_str_eq(s, "192.168.1.1:80");

  free(s);
  dpl_addrlist_free(addrlist);
}
Ejemplo n.º 6
0
END_TEST

START_TEST(create_from_str_1_test)
{
  dpl_addrlist_t *addrlist;
  char *hoststr = NULL;
  char *portstr = NULL;
  struct in_addr ipaddr;
  u_short port;
  dpl_status_t r;
  char *s;

  /* create the addrlist */
  addrlist = dpl_addrlist_create_from_str("4244", "192.168.1.1");
  dpl_assert_ptr_not_null(addrlist);

  /* verify length */
  dpl_assert_int_eq(1, dpl_addrlist_count(addrlist));

  /* verify getting elements by index */

  hoststr = portstr = NULL;
  memset(&ipaddr, 0, sizeof(ipaddr));
  port = 0;
  r = dpl_addrlist_get_nth(addrlist, 0, &hoststr, &portstr, &ipaddr, &port);
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_str_eq(hoststr, "192.168.1.1");
  dpl_assert_str_eq(portstr, "4244");
  dpl_assert_str_eq(inet_ntoa(ipaddr), "192.168.1.1");
  dpl_assert_int_eq(port, 4244);

  /* indexes wrap modulo the count */

  hoststr = portstr = NULL;
  memset(&ipaddr, 0, sizeof(ipaddr));
  port = 0;
  r = dpl_addrlist_get_nth(addrlist, 1, &hoststr, &portstr, &ipaddr, &port);
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_str_eq(hoststr, "192.168.1.1");
  dpl_assert_str_eq(portstr, "4244");
  dpl_assert_str_eq(inet_ntoa(ipaddr), "192.168.1.1");
  dpl_assert_int_eq(port, 4244);


  hoststr = portstr = NULL;
  memset(&ipaddr, 0, sizeof(ipaddr));
  port = 0;
  r = dpl_addrlist_get_nth(addrlist, 347, &hoststr, &portstr, &ipaddr, &port);
  dpl_assert_int_eq(DPL_SUCCESS, r);
  dpl_assert_str_eq(hoststr, "192.168.1.1");
  dpl_assert_str_eq(portstr, "4244");
  dpl_assert_str_eq(inet_ntoa(ipaddr), "192.168.1.1");
  dpl_assert_int_eq(port, 4244);

  /* verify the string form of the addrlist */
  s = dpl_addrlist_get(addrlist);
  dpl_assert_str_eq(s, "192.168.1.1:4244");

  free(s);
  dpl_addrlist_free(addrlist);
}
Ejemplo n.º 7
0
END_TEST

START_TEST(create_from_str_3_test)
{
  dpl_addrlist_t *addrlist;
  char *hoststr = NULL;
  char *portstr = NULL;
  struct in_addr ipaddr;
  u_short port;
  dpl_status_t r;
  int i;
  char *s;
  int port_position[3] = { 0, 0, 0 };
  int port_counts[3] = { 0, 0, 0 };
  char expstr[256] = "";

  /* create the addrlist */
  addrlist = dpl_addrlist_create_from_str("4244",
					  "192.168.1.1:4242,192.168.1.2:4243,192.168.1.3");
  dpl_assert_ptr_not_null(addrlist);

  /* verify length */
  dpl_assert_int_eq(3, dpl_addrlist_count(addrlist));

  /* verify getting elements by index */
  /* indexes wrap modulo the count */

  for (i = 0 ; i < 12 ; i++)
    {
      hoststr = portstr = NULL;
      memset(&ipaddr, 0, sizeof(ipaddr));
      port = 0;
      r = dpl_addrlist_get_nth(addrlist, i, &hoststr, &portstr, &ipaddr, &port);
      dpl_assert_int_eq(DPL_SUCCESS, r);

      fail_unless(port >= 4242, NULL);
      fail_unless(port <= 4244, NULL);
      if (port == 4242)
	{
	  dpl_assert_str_eq(hoststr, "192.168.1.1");
	  dpl_assert_str_eq(portstr, "4242");
	  dpl_assert_str_eq(inet_ntoa(ipaddr), "192.168.1.1");
	  port_counts[0]++;
	}
      else if (port == 4243)
	{
	  dpl_assert_str_eq(hoststr, "192.168.1.2");
	  dpl_assert_str_eq(portstr, "4243");
	  dpl_assert_str_eq(inet_ntoa(ipaddr), "192.168.1.2");
	  port_counts[1]++;
	}
      else /* 4244 */
	{
	  dpl_assert_str_eq(hoststr, "192.168.1.3");
	  dpl_assert_str_eq(portstr, "4244");
	  dpl_assert_str_eq(inet_ntoa(ipaddr), "192.168.1.3");
	  port_counts[2]++;
	}

      if (port_position[i % 3])
	dpl_assert_int_eq(port_position[i % 3], port);
      else
	port_position[i % 3] = port;
    }
  dpl_assert_int_eq(port_counts[0], 4);
  dpl_assert_int_eq(port_counts[1], 4);
  dpl_assert_int_eq(port_counts[2], 4);

  /* verify the string form of the addrlist */
  /* this is tough because the list is randomised internally */

  for (i = 0 ; i < 3 ; i++)
    {
      if (i)
	strcat(expstr, ",");
      if (port_position[i] == 4242)
	strcat(expstr, "192.168.1.1:4242");
      else if (port_position[i] == 4243)
	strcat(expstr, "192.168.1.2:4243");
      else if (port_position[i] == 4244)
	strcat(expstr, "192.168.1.3:4244");
    }

  s = dpl_addrlist_get(addrlist);
  dpl_assert_str_eq(s, expstr);

  free(s);
  dpl_addrlist_free(addrlist);
}
Ejemplo n.º 8
0
END_TEST

START_TEST(create_from_str_3_test)
{
  dpl_addrlist_t        *addrlist;
  dpl_addr_t            *addrp = NULL;
  dpl_status_t          r;
  int                   i;
  char                  *s, ident[INET_ADDRSTRLEN];
  int                   port_position[3] = { 0, 0, 0 };
  int                   port_counts[3] = { 0, 0, 0 };
  char                  expstr[256] = "";

  /* create the addrlist */
  addrlist = dpl_addrlist_create_from_str("4244",
					  "192.168.1.1:4242,192.168.1.2:4243,192.168.1.3");
  dpl_assert_ptr_not_null(addrlist);

  /* verify length */
  dpl_assert_int_eq(3, dpl_addrlist_count(addrlist));

  /* verify getting elements by index */
  /* indexes wrap modulo the count */

  for (i = 0; i < 12; i++)
    {
      r = dpl_addrlist_get_nth(addrlist, i, &addrp);
      dpl_assert_int_eq(DPL_SUCCESS, r);
      dpl_assert_ptr_not_null(addrp);
      dpl_assert_ptr_not_null(addrp->h);

      fail_unless(addrp->port >= 4242, NULL);
      fail_unless(addrp->port <= 4244, NULL);

      inet_ntop(addrp->h->h_addrtype, addrp->h->h_addr, ident, sizeof(ident));

      if (addrp->port == 4242)
	{
	  dpl_assert_str_eq(addrp->host, "192.168.1.1");
	  dpl_assert_str_eq(addrp->portstr, "4242");
	  dpl_assert_str_eq(ident, "192.168.1.1");
	  port_counts[0]++;
	}
      else if (addrp->port == 4243)
	{
	  dpl_assert_str_eq(addrp->host, "192.168.1.2");
	  dpl_assert_str_eq(addrp->portstr, "4243");
	  dpl_assert_str_eq(ident, "192.168.1.2");
	  port_counts[1]++;
	}
      else /* 4244 */
	{
	  dpl_assert_str_eq(addrp->host, "192.168.1.3");
	  dpl_assert_str_eq(addrp->portstr, "4244");
	  dpl_assert_str_eq(ident, "192.168.1.3");
	  port_counts[2]++;
	}

      if (port_position[i % 3])
	dpl_assert_int_eq(port_position[i % 3], addrp->port);
      else
	port_position[i % 3] = addrp->port;
    }
  dpl_assert_int_eq(port_counts[0], 4);
  dpl_assert_int_eq(port_counts[1], 4);
  dpl_assert_int_eq(port_counts[2], 4);

  /* verify the string form of the addrlist */
  /* this is tough because the list is randomised internally */

  for (i = 0 ; i < 3 ; i++)
    {
      if (i)
	strcat(expstr, ",");
      if (port_position[i] == 4242)
	strcat(expstr, "192.168.1.1:4242");
      else if (port_position[i] == 4243)
	strcat(expstr, "192.168.1.2:4243");
      else if (port_position[i] == 4244)
	strcat(expstr, "192.168.1.3:4244");
    }

  s = dpl_addrlist_get(addrlist);
  dpl_assert_str_eq(s, expstr);

  free(s);
  dpl_addrlist_free(addrlist);
}