]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/test_rbd_replay.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com>
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #include "common/escape.h"
16 #include "gtest/gtest.h"
18 #include <boost/foreach.hpp>
20 #include "rbd_replay/ImageNameMap.hpp"
21 #include "rbd_replay/ios.hpp"
22 #include "rbd_replay/rbd_loc.hpp"
25 using namespace rbd_replay
;
27 std::ostream
& operator<<(std::ostream
& o
, const rbd_loc
& name
) {
28 return o
<< "('" << name
.pool
<< "', '" << name
.image
<< "', '" << name
.snap
<< "')";
31 static void add_mapping(ImageNameMap
*map
, std::string mapping_string
) {
32 ImageNameMap::Mapping mapping
;
33 if (!map
->parse_mapping(mapping_string
, &mapping
)) {
34 ASSERT_TRUE(false) << "Failed to parse mapping string '" << mapping_string
<< "'";
36 map
->add_mapping(mapping
);
39 TEST(RBDReplay
, ImageNameMap
) {
41 add_mapping(&m
, "x@y=y@x");
42 add_mapping(&m
, "a\\=b@c=h@i");
43 add_mapping(&m
, "a@b\\=c=j@k");
44 add_mapping(&m
, "a\\@b@c=d@e");
45 add_mapping(&m
, "a@b\\@c=f@g");
46 add_mapping(&m
, "image@snap_1=image_1");
47 ImageNameMap::Mapping mapping
;
48 EXPECT_FALSE(m
.parse_mapping("bad=@@@", &mapping
));
49 EXPECT_FALSE(m
.parse_mapping("bad==stuff", &mapping
));
50 EXPECT_EQ(rbd_loc("", "y", "x"), m
.map(rbd_loc("", "x", "y")));
51 EXPECT_EQ(rbd_loc("", "h", "i"), m
.map(rbd_loc("", "a=b", "c")));
52 EXPECT_EQ(rbd_loc("", "j", "k"), m
.map(rbd_loc("", "a", "b=c")));
53 EXPECT_EQ(rbd_loc("", "d", "e"), m
.map(rbd_loc("", "a@b", "c")));
54 EXPECT_EQ(rbd_loc("", "f", "g"), m
.map(rbd_loc("", "a", "b@c")));
55 EXPECT_EQ(rbd_loc("", "image_1", ""), m
.map(rbd_loc("", "image", "snap_1")));
58 TEST(RBDReplay
, rbd_loc_str
) {
59 EXPECT_EQ("", rbd_loc("", "", "").str());
60 EXPECT_EQ("a/", rbd_loc("a", "", "").str());
61 EXPECT_EQ("b", rbd_loc("", "b", "").str());
62 EXPECT_EQ("a/b", rbd_loc("a", "b", "").str());
63 EXPECT_EQ("@c", rbd_loc("", "", "c").str());
64 EXPECT_EQ("a/@c", rbd_loc("a", "", "c").str());
65 EXPECT_EQ("b@c", rbd_loc("", "b", "c").str());
66 EXPECT_EQ("a/b@c", rbd_loc("a", "b", "c").str());
67 EXPECT_EQ("a\\@x/b\\@y@c\\@z", rbd_loc("a@x", "b@y", "c@z").str());
68 EXPECT_EQ("a\\/x/b\\/y@c\\/z", rbd_loc("a/x", "b/y", "c/z").str());
69 EXPECT_EQ("a\\\\x/b\\\\y@c\\\\z", rbd_loc("a\\x", "b\\y", "c\\z").str());
72 TEST(RBDReplay
, rbd_loc_parse
) {
73 rbd_loc
m("x", "y", "z");
75 EXPECT_TRUE(m
.parse(""));
76 EXPECT_EQ("", m
.pool
);
77 EXPECT_EQ("", m
.image
);
78 EXPECT_EQ("", m
.snap
);
80 EXPECT_TRUE(m
.parse("a/"));
81 EXPECT_EQ("a", m
.pool
);
82 EXPECT_EQ("", m
.image
);
83 EXPECT_EQ("", m
.snap
);
85 EXPECT_TRUE(m
.parse("b"));
86 EXPECT_EQ("", m
.pool
);
87 EXPECT_EQ("b", m
.image
);
88 EXPECT_EQ("", m
.snap
);
90 EXPECT_TRUE(m
.parse("a/b"));
91 EXPECT_EQ("a", m
.pool
);
92 EXPECT_EQ("b", m
.image
);
93 EXPECT_EQ("", m
.snap
);
95 EXPECT_TRUE(m
.parse("@c"));
96 EXPECT_EQ("", m
.pool
);
97 EXPECT_EQ("", m
.image
);
98 EXPECT_EQ("c", m
.snap
);
100 EXPECT_TRUE(m
.parse("a/@c"));
101 EXPECT_EQ("a", m
.pool
);
102 EXPECT_EQ("", m
.image
);
103 EXPECT_EQ("c", m
.snap
);
105 EXPECT_TRUE(m
.parse("b@c"));
106 EXPECT_EQ("", m
.pool
);
107 EXPECT_EQ("b", m
.image
);
108 EXPECT_EQ("c", m
.snap
);
110 EXPECT_TRUE(m
.parse("a/b@c"));
111 EXPECT_EQ("a", m
.pool
);
112 EXPECT_EQ("b", m
.image
);
113 EXPECT_EQ("c", m
.snap
);
115 EXPECT_TRUE(m
.parse("a\\@x/b\\@y@c\\@z"));
116 EXPECT_EQ("a@x", m
.pool
);
117 EXPECT_EQ("b@y", m
.image
);
118 EXPECT_EQ("c@z", m
.snap
);
120 EXPECT_TRUE(m
.parse("a\\/x/b\\/y@c\\/z"));
121 EXPECT_EQ("a/x", m
.pool
);
122 EXPECT_EQ("b/y", m
.image
);
123 EXPECT_EQ("c/z", m
.snap
);
125 EXPECT_TRUE(m
.parse("a\\\\x/b\\\\y@c\\\\z"));
126 EXPECT_EQ("a\\x", m
.pool
);
127 EXPECT_EQ("b\\y", m
.image
);
128 EXPECT_EQ("c\\z", m
.snap
);
130 EXPECT_FALSE(m
.parse("a@b@c"));
131 EXPECT_FALSE(m
.parse("a/b/c"));
132 EXPECT_FALSE(m
.parse("a@b/c"));