From 7c5a2168566da53361e8c537721f90e021166e4a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 17 Sep 2011 15:19:40 -0700 Subject: [PATCH] test/test_addrs: unit tests for addr parsing Signed-off-by: Sage Weil --- src/Makefile.am | 5 ++++ src/test/test_addrs.cc | 63 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/test/test_addrs.cc diff --git a/src/Makefile.am b/src/Makefile.am index e1a7400566892..0bdb12e4e3b75 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -153,6 +153,11 @@ psim_SOURCES = psim.cc psim_LDADD = $(LIBGLOBAL_LDA) bin_DEBUGPROGRAMS += psim +test_addrs_SOURCES = test/test_addrs.cc +test_addrs_CXXFLAGS = ${AM_CXXFLAGS} ${UNITTEST_CXXFLAGS} +test_addrs_LDADD = libglobal.la -lpthread -lm ${UNITTEST_LDADD} $(CRYPTO_LIBS) $(EXTRALIBS) +bin_DEBUGPROGRAMS += test_addrs + test_mutate_SOURCES = test/test_mutate.cc test_mutate_LDADD = libglobal.la librados.la -lpthread -lm $(CRYPTO_LIBS) $(EXTRALIBS) bin_DEBUGPROGRAMS += test_mutate diff --git a/src/test/test_addrs.cc b/src/test/test_addrs.cc new file mode 100644 index 0000000000000..d7a693255c369 --- /dev/null +++ b/src/test/test_addrs.cc @@ -0,0 +1,63 @@ +// -*- mode:C; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2011 New Dream Network + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License version 2, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#include "include/types.h" +#include "msg/msg_types.h" +#include "gtest/gtest.h" + +#include + +// input, parsed+printed addr output, leftover +// if the parse fails, output + leftover should both be blank. +const char *addr_checks[][3] = { + { "127.0.0.1", "127.0.0.1:0/0", "" }, + { "127.0.0.1 foo", "127.0.0.1:0/0", " foo" }, + { "127.0.0.1:1234 foo", "127.0.0.1:1234/0", " foo" }, + { "127.0.0.1:1234/5678 foo", "127.0.0.1:1234/5678", " foo" }, + { "1.2.3:4 a", "", "" }, + { "2607:f298:4:2243::5522", "[2607:f298:4:2243::5522]:0/0", "" }, + { "[2607:f298:4:2243::5522]", "[2607:f298:4:2243::5522]:0/0", "" }, + { "2607:f298:4:2243::5522a", "", "" }, + { "[2607:f298:4:2243::5522]a", "[2607:f298:4:2243::5522]:0/0", "a" }, + { "[2607:f298:4:2243::5522]:1234a", "[2607:f298:4:2243::5522]:1234/0", "a" }, + { "2001:0db8:85a3:0000:0000:8a2e:0370:7334", "[2001:db8:85a3::8a2e:370:7334]:0/0", "" }, + { "::", "[::]:0/0", "" }, + { "::zz", "[::]:0/0", "zz" }, + { ":: 12:34", "[::]:0/0", " 12:34" }, + { NULL, NULL, NULL }, +}; + + +TEST(Msgr, TestAddrParsing) +{ + + for (unsigned i = 0; addr_checks[i][0]; ++i) { + entity_addr_t a; + const char *end = ""; + bool ok = a.parse(addr_checks[i][0], &end); + string in = addr_checks[i][0]; + string out; + if (ok) { + stringstream ss; + ss << a; + getline(ss, out); + } + string left = end; + + cout << "'" << addr_checks[i][0] << "' -> '" << out << "' + '" << left << "'" << std::endl; + + ASSERT_EQ(out, addr_checks[i][1]); + ASSERT_EQ(left, addr_checks[i][2]); + } +} -- 2.39.5