1 /*
2 Copyright (c) DataStax, Inc.
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15 */
16
17 #include <gtest/gtest.h>
18
19 #include "unit.hpp"
20
21 #include "cassandra.h"
22 #include "protocol.hpp"
23
24 using datastax::internal::core::ProtocolVersion;
25
26 class ProtocolVersionUnitTest : public Unit {};
27
TEST_F(ProtocolVersionUnitTest,LowestSupported)28 TEST_F(ProtocolVersionUnitTest, LowestSupported) {
29 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_V3), ProtocolVersion::lowest_supported());
30 }
31
TEST_F(ProtocolVersionUnitTest,HighestSupported)32 TEST_F(ProtocolVersionUnitTest, HighestSupported) {
33 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_DSEV2), ProtocolVersion::highest_supported());
34 }
35
TEST_F(ProtocolVersionUnitTest,NewestBeta)36 TEST_F(ProtocolVersionUnitTest, NewestBeta) {
37 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_V5), ProtocolVersion::newest_beta());
38 }
39
TEST_F(ProtocolVersionUnitTest,IsValid)40 TEST_F(ProtocolVersionUnitTest, IsValid) {
41 { // Invalid
42 ProtocolVersion invalid;
43 EXPECT_FALSE(invalid.is_valid());
44 }
45
46 { // Invalid
47 ProtocolVersion zero(0);
48 EXPECT_FALSE(zero.is_valid());
49 }
50
51 { // Invalid (no longer supported)
52 ProtocolVersion v1(CASS_PROTOCOL_VERSION_V1);
53 EXPECT_FALSE(v1.is_valid());
54 }
55
56 { // Invalid (no longer supported)
57 ProtocolVersion v2(CASS_PROTOCOL_VERSION_V2);
58 EXPECT_FALSE(v2.is_valid());
59 }
60
61 { // Valid
62 ProtocolVersion v3(CASS_PROTOCOL_VERSION_V3);
63 EXPECT_TRUE(v3.is_valid());
64 }
65
66 { // Valid
67 ProtocolVersion v4(CASS_PROTOCOL_VERSION_V4);
68 EXPECT_TRUE(v4.is_valid());
69 }
70
71 { // Invalid (Cassandra beta version)
72 ProtocolVersion v5(CASS_PROTOCOL_VERSION_V5);
73 EXPECT_FALSE(v5.is_valid());
74 }
75
76 { // Valid
77 ProtocolVersion vDSE1(CASS_PROTOCOL_VERSION_DSEV1);
78 EXPECT_TRUE(vDSE1.is_valid());
79 }
80
81 { // Valid (Latest DSE protocol version)
82 ProtocolVersion vDSE2(CASS_PROTOCOL_VERSION_DSEV2);
83 EXPECT_TRUE(vDSE2.is_valid());
84 }
85 }
86
TEST_F(ProtocolVersionUnitTest,IsBeta)87 TEST_F(ProtocolVersionUnitTest, IsBeta) {
88 { // Not valid beta
89 ProtocolVersion invalid;
90 EXPECT_FALSE(invalid.is_beta());
91 }
92
93 { // Invalid beta (Latest DSE protocol version)
94 ProtocolVersion vDSE2(CASS_PROTOCOL_VERSION_DSEV2);
95 EXPECT_FALSE(vDSE2.is_beta());
96 }
97
98 { // Valid beta
99 ProtocolVersion v5(CASS_PROTOCOL_VERSION_V5);
100 EXPECT_TRUE(v5.is_beta());
101 }
102 }
103
TEST_F(ProtocolVersionUnitTest,ToString)104 TEST_F(ProtocolVersionUnitTest, ToString) {
105 {
106 ProtocolVersion invalid;
107 EXPECT_EQ(invalid.to_string(), "<invalid>");
108 }
109
110 {
111 ProtocolVersion v4(CASS_PROTOCOL_VERSION_V4);
112 EXPECT_EQ(v4.to_string(), "v4");
113 }
114
115 {
116 ProtocolVersion v5(CASS_PROTOCOL_VERSION_V5);
117 EXPECT_EQ(v5.to_string(), "v5");
118 }
119
120 {
121 ProtocolVersion DSEv1(CASS_PROTOCOL_VERSION_DSEV1);
122 EXPECT_EQ(DSEv1.to_string(), "DSEv1");
123 }
124 }
125
TEST_F(ProtocolVersionUnitTest,AttemptLowerSupported)126 TEST_F(ProtocolVersionUnitTest, AttemptLowerSupported) {
127 ProtocolVersion version(CASS_PROTOCOL_VERSION_DSEV2);
128 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_DSEV2), version);
129
130 EXPECT_TRUE((version = version.previous()).is_valid());
131 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_DSEV1), version);
132
133 EXPECT_TRUE((version = version.previous()).is_valid());
134 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_V4), version);
135
136 EXPECT_TRUE((version = version.previous()).is_valid());
137 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_V3), version);
138
139 EXPECT_FALSE(version.previous().is_valid()); // Can't go any lower
140 EXPECT_EQ(ProtocolVersion(CASS_PROTOCOL_VERSION_V3), version);
141 }
142
TEST_F(ProtocolVersionUnitTest,SupportsSetKeyspace)143 TEST_F(ProtocolVersionUnitTest, SupportsSetKeyspace) {
144 { // Supported
145 ProtocolVersion v5(CASS_PROTOCOL_VERSION_V5);
146 EXPECT_TRUE(v5.supports_set_keyspace());
147 }
148
149 { // Supported
150 ProtocolVersion DSEv2(CASS_PROTOCOL_VERSION_DSEV2);
151 EXPECT_TRUE(DSEv2.supports_set_keyspace());
152 }
153
154 { // Not supported
155 ProtocolVersion DSEv1(CASS_PROTOCOL_VERSION_DSEV1);
156 EXPECT_FALSE(DSEv1.supports_set_keyspace());
157
158 for (int i = CASS_PROTOCOL_VERSION_V1; i <= CASS_PROTOCOL_VERSION_V4; ++i) {
159 ProtocolVersion version(i);
160 EXPECT_FALSE(version.supports_set_keyspace());
161 }
162 }
163 }
164
TEST_F(ProtocolVersionUnitTest,SupportsResultMetadataId)165 TEST_F(ProtocolVersionUnitTest, SupportsResultMetadataId) {
166 { // Supported
167 ProtocolVersion v5(CASS_PROTOCOL_VERSION_V5);
168 EXPECT_TRUE(v5.supports_result_metadata_id());
169 }
170
171 { // Supported
172 ProtocolVersion DSEv2(CASS_PROTOCOL_VERSION_DSEV2);
173 EXPECT_TRUE(DSEv2.supports_result_metadata_id());
174 }
175
176 { // Not supported
177 ProtocolVersion DSEv1(CASS_PROTOCOL_VERSION_DSEV1);
178 EXPECT_FALSE(DSEv1.supports_result_metadata_id());
179
180 for (int i = CASS_PROTOCOL_VERSION_V1; i <= CASS_PROTOCOL_VERSION_V4; ++i) {
181 ProtocolVersion version(i);
182 EXPECT_FALSE(version.supports_result_metadata_id());
183 }
184 }
185 }
186