]> git.proxmox.com Git - ceph.git/blame - ceph/src/test/test_rbd_replay.cc
bump version to 18.2.4-pve3
[ceph.git] / ceph / src / test / test_rbd_replay.cc
CommitLineData
7c673cae
FG
1// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2// vim: ts=8 sw=2 smarttab
3/*
4 * Ceph - scalable distributed file system
5 *
6 * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com>
7 *
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.
12 *
13 */
14
15#include "common/escape.h"
16#include "gtest/gtest.h"
17#include <stdint.h>
18#include <boost/foreach.hpp>
19#include <cstdarg>
20#include "rbd_replay/ImageNameMap.hpp"
21#include "rbd_replay/ios.hpp"
22#include "rbd_replay/rbd_loc.hpp"
23
24
f67539c2 25namespace rbd_replay {
7c673cae
FG
26std::ostream& operator<<(std::ostream& o, const rbd_loc& name) {
27 return o << "('" << name.pool << "', '" << name.image << "', '" << name.snap << "')";
28}
f67539c2
TL
29}
30
31using namespace rbd_replay;
7c673cae
FG
32
33static void add_mapping(ImageNameMap *map, std::string mapping_string) {
34 ImageNameMap::Mapping mapping;
35 if (!map->parse_mapping(mapping_string, &mapping)) {
36 ASSERT_TRUE(false) << "Failed to parse mapping string '" << mapping_string << "'";
37 }
38 map->add_mapping(mapping);
39}
40
41TEST(RBDReplay, ImageNameMap) {
42 ImageNameMap m;
43 add_mapping(&m, "x@y=y@x");
44 add_mapping(&m, "a\\=b@c=h@i");
45 add_mapping(&m, "a@b\\=c=j@k");
46 add_mapping(&m, "a\\@b@c=d@e");
47 add_mapping(&m, "a@b\\@c=f@g");
48 add_mapping(&m, "image@snap_1=image_1");
49 ImageNameMap::Mapping mapping;
50 EXPECT_FALSE(m.parse_mapping("bad=@@@", &mapping));
51 EXPECT_FALSE(m.parse_mapping("bad==stuff", &mapping));
52 EXPECT_EQ(rbd_loc("", "y", "x"), m.map(rbd_loc("", "x", "y")));
53 EXPECT_EQ(rbd_loc("", "h", "i"), m.map(rbd_loc("", "a=b", "c")));
54 EXPECT_EQ(rbd_loc("", "j", "k"), m.map(rbd_loc("", "a", "b=c")));
55 EXPECT_EQ(rbd_loc("", "d", "e"), m.map(rbd_loc("", "a@b", "c")));
56 EXPECT_EQ(rbd_loc("", "f", "g"), m.map(rbd_loc("", "a", "b@c")));
57 EXPECT_EQ(rbd_loc("", "image_1", ""), m.map(rbd_loc("", "image", "snap_1")));
58}
59
60TEST(RBDReplay, rbd_loc_str) {
61 EXPECT_EQ("", rbd_loc("", "", "").str());
62 EXPECT_EQ("a/", rbd_loc("a", "", "").str());
63 EXPECT_EQ("b", rbd_loc("", "b", "").str());
64 EXPECT_EQ("a/b", rbd_loc("a", "b", "").str());
65 EXPECT_EQ("@c", rbd_loc("", "", "c").str());
66 EXPECT_EQ("a/@c", rbd_loc("a", "", "c").str());
67 EXPECT_EQ("b@c", rbd_loc("", "b", "c").str());
68 EXPECT_EQ("a/b@c", rbd_loc("a", "b", "c").str());
69 EXPECT_EQ("a\\@x/b\\@y@c\\@z", rbd_loc("a@x", "b@y", "c@z").str());
70 EXPECT_EQ("a\\/x/b\\/y@c\\/z", rbd_loc("a/x", "b/y", "c/z").str());
71 EXPECT_EQ("a\\\\x/b\\\\y@c\\\\z", rbd_loc("a\\x", "b\\y", "c\\z").str());
72}
73
74TEST(RBDReplay, rbd_loc_parse) {
75 rbd_loc m("x", "y", "z");
76
77 EXPECT_TRUE(m.parse(""));
78 EXPECT_EQ("", m.pool);
79 EXPECT_EQ("", m.image);
80 EXPECT_EQ("", m.snap);
81
82 EXPECT_TRUE(m.parse("a/"));
83 EXPECT_EQ("a", m.pool);
84 EXPECT_EQ("", m.image);
85 EXPECT_EQ("", m.snap);
86
87 EXPECT_TRUE(m.parse("b"));
88 EXPECT_EQ("", m.pool);
89 EXPECT_EQ("b", m.image);
90 EXPECT_EQ("", m.snap);
91
92 EXPECT_TRUE(m.parse("a/b"));
93 EXPECT_EQ("a", m.pool);
94 EXPECT_EQ("b", m.image);
95 EXPECT_EQ("", m.snap);
96
97 EXPECT_TRUE(m.parse("@c"));
98 EXPECT_EQ("", m.pool);
99 EXPECT_EQ("", m.image);
100 EXPECT_EQ("c", m.snap);
101
102 EXPECT_TRUE(m.parse("a/@c"));
103 EXPECT_EQ("a", m.pool);
104 EXPECT_EQ("", m.image);
105 EXPECT_EQ("c", m.snap);
106
107 EXPECT_TRUE(m.parse("b@c"));
108 EXPECT_EQ("", m.pool);
109 EXPECT_EQ("b", m.image);
110 EXPECT_EQ("c", m.snap);
111
112 EXPECT_TRUE(m.parse("a/b@c"));
113 EXPECT_EQ("a", m.pool);
114 EXPECT_EQ("b", m.image);
115 EXPECT_EQ("c", m.snap);
116
117 EXPECT_TRUE(m.parse("a\\@x/b\\@y@c\\@z"));
118 EXPECT_EQ("a@x", m.pool);
119 EXPECT_EQ("b@y", m.image);
120 EXPECT_EQ("c@z", m.snap);
121
122 EXPECT_TRUE(m.parse("a\\/x/b\\/y@c\\/z"));
123 EXPECT_EQ("a/x", m.pool);
124 EXPECT_EQ("b/y", m.image);
125 EXPECT_EQ("c/z", m.snap);
126
127 EXPECT_TRUE(m.parse("a\\\\x/b\\\\y@c\\\\z"));
128 EXPECT_EQ("a\\x", m.pool);
129 EXPECT_EQ("b\\y", m.image);
130 EXPECT_EQ("c\\z", m.snap);
131
132 EXPECT_FALSE(m.parse("a@b@c"));
133 EXPECT_FALSE(m.parse("a/b/c"));
134 EXPECT_FALSE(m.parse("a@b/c"));
135}
136