@@ -209,18 +209,13 @@ class VersionTests(unittest.TestCase):
209209
210210 def test_version_parsing (self ):
211211 versions = [
212- ('2.0.0' , (2 , 0 , 0 , 0 , 0 )),
213- ('3.1.0' , (3 , 1 , 0 , 0 , 0 )),
214- ('2.4.54' , (2 , 4 , 54 , 0 , 0 )),
215- ('3.1.1.12' , (3 , 1 , 1 , 12 , 0 )),
216- ('3.55.1.build12' , (3 , 55 , 1 , 'build12' , 0 )),
217- ('3.55.1.20190429-TEST' , (3 , 55 , 1 , 20190429 , 'TEST' )),
218- ('4.0-SNAPSHOT' , (4 , 0 , 0 , 0 , 'SNAPSHOT' )),
219- ('1.0.5.4.3' , (1 , 0 , 5 , 4 , 0 )),
220- ('1-SNAPSHOT' , (1 , 0 , 0 , 0 , 'SNAPSHOT' )),
221- ('4.0.1.2.3.4.5-ABC-123-SNAP-TEST.blah' , (4 , 0 , 1 , 2 , 'ABC-123-SNAP-TEST.blah' )),
222- ('2.1.hello' , (2 , 1 , 0 , 0 , 0 )),
223- ('2.test.1' , (2 , 0 , 0 , 0 , 0 )),
212+ # Test cases here adapted from the Java driver cases
213+ # (https://github.com/apache/cassandra-java-driver/blob/4.19.2/core/src/test/java/com/datastax/oss/driver/api/core/VersionTest.java)
214+ ('1.2.19' , (1 , 2 , 19 , 0 , "" )),
215+ ('1.2' , (1 , 2 , 0 , 0 , "" )),
216+ ('1.2-beta1-SNAPSHOT' , (1 , 2 , 0 , 0 , 'beta1-SNAPSHOT' )),
217+ ('1.2~beta1-SNAPSHOT' , (1 , 2 , 0 , 0 , 'beta1-SNAPSHOT' )),
218+ ('1.2.19.2-SNAPSHOT' , (1 , 2 , 19 , 2 , 'SNAPSHOT' )),
224219 ]
225220
226221 for str_version , expected_result in versions :
@@ -232,9 +227,17 @@ def test_version_parsing(self):
232227 self .assertEqual (v .build , expected_result [3 ])
233228 self .assertEqual (v .prerelease , expected_result [4 ])
234229
235- # not supported version formats
236- with self .assertRaises (ValueError ):
237- Version ('test.1.0' )
230+ # Note that a few of these formats used to be supported when this class was based on the Python versioning scheme.
231+ # This has been updated to more directly correspond to the Cassandra versioning scheme. See CASSPYTHON-10 for more
232+ # detail.
233+ unsupported_versions = [
234+ "test.1.0" ,
235+ '2.test.1'
236+ ]
237+
238+ for v in unsupported_versions :
239+ with self .assertRaises (ValueError ):
240+ Version (v )
238241
239242 def test_version_compare (self ):
240243 # just tests a bunch of versions
@@ -251,41 +254,53 @@ def test_version_compare(self):
251254
252255 # patch wins
253256 self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0' ))
254- self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0. 4post0' ))
257+ self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0- 4post0' ))
255258 self .assertTrue (Version ('2.3.1' ) > Version ('2.3.0.44' ))
256259
257260 # various
258261 self .assertTrue (Version ('2.3.0.1' ) > Version ('2.3.0.0' ))
259262 self .assertTrue (Version ('2.3.0.680' ) > Version ('2.3.0.670' ))
260263 self .assertTrue (Version ('2.3.0.681' ) > Version ('2.3.0.680' ))
261- self .assertTrue (Version ('2.3.0.1build0' ) > Version ('2.3.0.1' )) # 4th part fallback to str cmp
262- self .assertTrue (Version ('2.3.0.build0' ) > Version ('2.3.0.1' )) # 4th part fallback to str cmp
263- self .assertTrue (Version ('2.3.0' ) < Version ('2.3.0.build' ))
264-
265- self .assertTrue (Version ('4-a' ) <= Version ('4.0.0' ))
266- self .assertTrue (Version ('4-a' ) <= Version ('4.0-alpha1' ))
267- self .assertTrue (Version ('4-a' ) <= Version ('4.0-beta1' ))
268- self .assertTrue (Version ('4.0.0' ) >= Version ('4.0.0' ))
269- self .assertTrue (Version ('4.0.0.421' ) >= Version ('4.0.0' ))
270- self .assertTrue (Version ('4.0.1' ) >= Version ('4.0.0' ))
264+
265+ # If builds are equal then a prerelease always comes before
266+ self .assertTrue (Version ('2.3.0.1-SNAPSHOT' ) < Version ('2.3.0.1' ))
267+
268+ # If both have prereleases we fall back to a string compare
269+ self .assertTrue (Version ('2.3.0.1-SNAPSHOT' ) < Version ('2.3.0.1-ZNAPSHOT' ))
270+
271271 self .assertTrue (Version ('2.3.0' ) == Version ('2.3.0' ))
272272 self .assertTrue (Version ('2.3.32' ) == Version ('2.3.32' ))
273273 self .assertTrue (Version ('2.3.32' ) == Version ('2.3.32.0' ))
274- self .assertTrue (Version ('2.3.0.build ' ) == Version ('2.3.0.build ' ))
274+ self .assertTrue (Version ('2.3.0-SNAPSHOT ' ) == Version ('2.3.0-SNAPSHOT ' ))
275275
276- self .assertTrue (Version ('4' ) == Version ('4.0.0' ))
277276 self .assertTrue (Version ('4.0' ) == Version ('4.0.0.0' ))
278277 self .assertTrue (Version ('4.0' ) > Version ('3.9.3' ))
279278
280- self .assertTrue (Version ('4.0' ) > Version ('4.0-SNAPSHOT' ))
281- self .assertTrue (Version ('4.0-SNAPSHOT' ) == Version ('4.0-SNAPSHOT' ))
282- self .assertTrue (Version ('4.0.0-SNAPSHOT' ) == Version ('4.0-SNAPSHOT' ))
283- self .assertTrue (Version ('4.0.0-SNAPSHOT' ) == Version ('4.0.0-SNAPSHOT' ))
284- self .assertTrue (Version ('4.0.0.build5-SNAPSHOT' ) == Version ('4.0.0.build5-SNAPSHOT' ))
285- self .assertTrue (Version ('4.1-SNAPSHOT' ) > Version ('4.0-SNAPSHOT' ))
286- self .assertTrue (Version ('4.0.1-SNAPSHOT' ) > Version ('4.0.0-SNAPSHOT' ))
287- self .assertTrue (Version ('4.0.0.build6-SNAPSHOT' ) > Version ('4.0.0.build5-SNAPSHOT' ))
288- self .assertTrue (Version ('4.0-SNAPSHOT2' ) > Version ('4.0-SNAPSHOT1' ))
289- self .assertTrue (Version ('4.0-SNAPSHOT2' ) > Version ('4.0.0-SNAPSHOT1' ))
290-
291- self .assertTrue (Version ('4.0.0-alpha1-SNAPSHOT' ) > Version ('4.0.0-SNAPSHOT' ))
279+
280+ equal_tuples = [
281+ (Version ('4.0-SNAPSHOT' ), Version ('4.0-SNAPSHOT' )),
282+ (Version ('4.0.0-SNAPSHOT' ), Version ('4.0-SNAPSHOT' )),
283+ (Version ('4.0.0-SNAPSHOT' ), Version ('4.0.0-SNAPSHOT' )),
284+ (Version ('4.0.0.5-SNAPSHOT' ), Version ('4.0.0.5-SNAPSHOT' ))
285+ ]
286+ for (a ,b ) in equal_tuples :
287+ self .assertEqual (a , b )
288+ self .assertEqual (hash (a ), hash (b ))
289+
290+ left_greater_tuples = [
291+ (Version ('4.0' ), Version ('4.0-SNAPSHOT' )),
292+ (Version ('4.1-SNAPSHOT' ), Version ('4.0-SNAPSHOT' )),
293+ (Version ('4.0.1-SNAPSHOT' ), Version ('4.0.0-SNAPSHOT' )),
294+ (Version ('4.0.0.6-SNAPSHOT' ), Version ('4.0.0.5-SNAPSHOT' )),
295+ (Version ('4.0-SNAPSHOT2' ), Version ('4.0-SNAPSHOT1' )),
296+ (Version ('4.0-SNAPSHOT2' ), Version ('4.0.0-SNAPSHOT1' )),
297+ (Version ('4.0.0-alpha1-SNAPSHOT' ), Version ('4.0.0-SNAPSHOT' ))
298+ ]
299+ for (a ,b ) in left_greater_tuples :
300+ self .assertGreater (a , b )
301+
302+ # Test the version limit for v4 schema parsing in cassandra.metadata to make sure
303+ # all 4.0.x Cassandra servers are covered
304+ self .assertTrue (Version ('4.0-alpha' ) <= Version ('4.0.0' ))
305+ self .assertTrue (Version ('4.0-alpha' ) <= Version ('4.0-alpha1' ))
306+ self .assertTrue (Version ('4.0-alpha' ) <= Version ('4.0-beta1' ))
0 commit comments