unsigned size() const { return v.size(); }
bool empty() const { return v.empty(); }
+ bool parse(const char *s, const char **end = 0);
+
void encode(bufferlist& bl, uint64_t features) const;
void decode(bufferlist::const_iterator& bl);
void dump(Formatter *f) const;
static void generate_test_instances(list<entity_addrvec_t*>& ls);
+
+ friend ostream& operator<<(ostream& out, const entity_addrvec_t& av) {
+ if (av.v.empty()) {
+ return out;
+ } else if (av.v.size() == 1) {
+ return out << av.v[0];
+ } else {
+ return out << av.v;
+ }
+ }
};
WRITE_CLASS_ENCODER_FEATURES(entity_addrvec_t);
*/
#include "include/types.h"
+#include "include/stringify.h"
#include "msg/msg_types.h"
#include "gtest/gtest.h"
ASSERT_NE(addr, addrvec.v[0]); // it's not the first addr(which is non-legacy)
ASSERT_NE(addr, entity_addr_t(1, 0)); // it's not a blank addr either
}
+
+const char *addrvec_parse_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 1.2.3.4 foo", "[127.0.0.1:0/0,1.2.3.4:0/0]", " foo" },
+ { "127.0.0.1 :: - foo", "[127.0.0.1:0/0,[::]:0/0,-]", " foo" },
+ { NULL, NULL, NULL },
+};
+
+TEST(entity_addrvec_t, parse)
+{
+ entity_addrvec_t addrvec;
+
+ for (auto v : { addr_checks, addr_checks2, addrvec_parse_checks }) {
+ for (unsigned i = 0; v[i][0]; ++i) {
+ const char *end = "";
+ addrvec.parse(v[i][0], &end);
+ string out = stringify(addrvec);
+ string left = end;
+ cout << "'" << v[i][0] << "' -> '" << out << "' + '" << left << "'"
+ << std::endl;
+ ASSERT_EQ(out, v[i][1]);
+ ASSERT_EQ(left, v[i][2]);
+ }
+ }
+}