1 // Copyright 2017 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 #include "google/cloud/bigtable/table_config.h"
16 #include <google/protobuf/text_format.h>
17 #include <google/protobuf/util/message_differencer.h>
18 #include <gmock/gmock.h>
19
20 namespace btadmin = ::google::bigtable::admin::v2;
21 namespace bigtable = google::cloud::bigtable;
22
TEST(TableConfig,Simple)23 TEST(TableConfig, Simple) {
24 bigtable::TableConfig config;
25 EXPECT_TRUE(config.column_families().empty());
26 EXPECT_TRUE(config.initial_splits().empty());
27 EXPECT_EQ(bigtable::TableConfig::TIMESTAMP_GRANULARITY_UNSPECIFIED,
28 config.timestamp_granularity());
29
30 config.add_column_family("fam", bigtable::GcRule::MaxNumVersions(2));
31 config.add_initial_split("foo");
32 config.add_initial_split("qux");
33 config.set_timestamp_granularity(bigtable::TableConfig::MILLIS);
34
35 auto const& families = config.column_families();
36 auto it = families.find("fam");
37 ASSERT_NE(families.end(), it);
38 EXPECT_EQ(2, it->second.as_proto().max_num_versions());
39 auto const& splits = config.initial_splits();
40 ASSERT_EQ(2UL, splits.size());
41 EXPECT_EQ("foo", splits[0]);
42 EXPECT_EQ("qux", splits[1]);
43
44 std::string expected_text = R"""(
45 table {
46 column_families {
47 key: 'fam'
48 value { gc_rule { max_num_versions: 2 }}
49 }
50 granularity: MILLIS
51 }
52 initial_splits { key: 'foo' }
53 initial_splits { key: 'qux' }
54 )""";
55 btadmin::CreateTableRequest expected;
56 ASSERT_TRUE(
57 google::protobuf::TextFormat::ParseFromString(expected_text, &expected));
58
59 auto request = std::move(config).as_proto();
60
61 std::string delta;
62 google::protobuf::util::MessageDifferencer differencer;
63 differencer.ReportDifferencesToString(&delta);
64 EXPECT_TRUE(differencer.Compare(expected, request)) << delta;
65 }
66
TEST(TableConfig,ComplexConstructor)67 TEST(TableConfig, ComplexConstructor) {
68 bigtable::TableConfig config({{"fam", bigtable::GcRule::MaxNumVersions(3)}},
69 {"foo", "qux"});
70
71 auto const& families = config.column_families();
72 auto it = families.find("fam");
73 ASSERT_NE(families.end(), it);
74 EXPECT_EQ(3, it->second.as_proto().max_num_versions());
75 auto const& splits = config.initial_splits();
76 ASSERT_EQ(2UL, splits.size());
77 EXPECT_EQ("foo", splits[0]);
78 EXPECT_EQ("qux", splits[1]);
79 }
80