|
1 | 1 | """Condition model tests module.""" |
2 | 2 | import pytest |
| 3 | +import csv |
| 4 | +import os |
3 | 5 |
|
4 | 6 | from splitio.models.grammar.matchers.semver import Semver |
5 | 7 |
|
| 8 | +valid_versions = os.path.join(os.path.dirname(__file__), 'files', 'valid-semantic-versions.csv') |
| 9 | +invalid_versions = os.path.join(os.path.dirname(__file__), 'files', 'invalid-semantic-versions.csv') |
| 10 | +equalto_versions = os.path.join(os.path.dirname(__file__), 'files', 'equal-to-semver.csv') |
| 11 | +between_versions = os.path.join(os.path.dirname(__file__), 'files', 'between-semver.csv') |
| 12 | + |
6 | 13 | class SemverTests(object): |
7 | 14 | """Test the semver object model.""" |
8 | 15 |
|
9 | | - valid_versions = ["1.1.2", "1.1.1", "1.0.0", "1.0.0-rc.1", "1.0.0-beta.11", "1.0.0-beta.2", |
10 | | - "1.0.0-beta", "1.0.0-alpha.beta", "1.0.0-alpha.1", "1.0.0-alpha", "2.2.2-rc.2+metadata-lalala", "2.2.2-rc.1.2", |
11 | | - "1.2.3", "0.0.4", "1.1.2+meta", "1.1.2-prerelease+meta", "1.0.0-beta", "1.0.0-alpha", "1.0.0-alpha0.valid", |
12 | | - "1.0.0-alpha.0valid", "1.0.0-rc.1+build.1", "1.0.0-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay", |
13 | | - "10.2.3-DEV-SNAPSHOT", "1.2.3-SNAPSHOT-123", "1.1.1-rc2", "1.0.0-0A.is.legal", "1.2.3----RC-SNAPSHOT.12.9.1--.12+788", |
14 | | - "1.2.3----R-S.12.9.1--.12+meta", "1.2.3----RC-SNAPSHOT.12.9.1--.12.88", "1.2.3----RC-SNAPSHOT.12.9.1--.12", |
15 | | - "9223372036854775807.9223372036854775807.9223372036854775807", "9223372036854775807.9223372036854775807.9223372036854775806", |
16 | | - "1.1.1-alpha.beta.rc.build.java.pr.support.10", "1.1.1-alpha.beta.rc.build.java.pr.support"] |
17 | | - |
18 | 16 | def test_valid_versions(self): |
19 | | - major = [1, 1, 1, 1, 1, 1, |
20 | | - 1, 1, 1, 1, 2, 2, |
21 | | - 1, 0, 1, 1, 1, 1, 1, |
22 | | - 1, 1, 1, |
23 | | - 10, 1, 1, 1, 1, |
24 | | - 1, 1, 1, |
25 | | - 9223372036854775807, 9223372036854775807, |
26 | | - 1,1] |
27 | | - minor = [1, 1, 0, 0, 0, 0, |
28 | | - 0, 0, 0, 0, 2, 2, |
29 | | - 2, 0, 1, 1, 0, 0, 0, |
30 | | - 0, 0, 0, |
31 | | - 2, 2, 1, 0, 2, |
32 | | - 2, 2, 2, |
33 | | - 9223372036854775807, 9223372036854775807, |
34 | | - 1, 1] |
35 | | - patch = [2, 1, 0, 0, 0, 0, |
36 | | - 0, 0, 0, 0, 2, 2, |
37 | | - 3, 4, 2, 2, 0, 0, 0, |
38 | | - 0, 0, 0, |
39 | | - 3, 3, 1, 0, 3, |
40 | | - 3, 3, 3, |
41 | | - 9223372036854775807, 9223372036854775806, |
42 | | - 1, 1] |
43 | | - pre_release = [[], [], [], ["rc","1"], ["beta","11"],["beta","2"], |
44 | | - ["beta"], ["alpha","beta"], ["alpha","1"], ["alpha"], ["rc","2"], ["rc","1","2"], |
45 | | - [], [], [], ["prerelease"], ["beta"], ["alpha"], ["alpha0","valid"], |
46 | | - ["alpha","0valid"], ["rc","1"], ["alpha-a","b-c-somethinglong"], |
47 | | - ["DEV-SNAPSHOT"], ["SNAPSHOT-123"], ["rc2"], ["0A","is","legal"], ["---RC-SNAPSHOT","12","9","1--","12"], |
48 | | - ["---R-S","12","9","1--","12"], ["---RC-SNAPSHOT","12","9","1--","12","88"], ["---RC-SNAPSHOT","12","9","1--","12"], |
49 | | - [], [], |
50 | | - ["alpha","beta","rc","build","java","pr","support","10"], ["alpha","beta","rc","build","java","pr","support"]] |
51 | | - |
52 | | - for i in range(len(major)-1): |
53 | | - semver = Semver(self.valid_versions[i]) |
54 | | - self._verify_version(semver, major[i], minor[i], patch[i], pre_release[i], pre_release[i]==[]) |
| 17 | + with open(valid_versions) as csvfile: |
| 18 | + reader = csv.DictReader(csvfile) |
| 19 | + for row in reader: |
| 20 | + assert Semver.build(row['higher']) is not None |
| 21 | + assert Semver.build(row['lower']) is not None |
55 | 22 |
|
56 | 23 | def test_invalid_versions(self): |
57 | | - """Test parsing invalid versions.""" |
58 | | - invalid_versions = [ |
59 | | - "1", "1.2", "1.alpha.2", "+invalid", "-invalid", "-invalid+invalid", "+justmeta", |
60 | | - "-invalid.01", "alpha", "alpha.beta", "alpha.beta.1", "alpha.1", "alpha+beta", |
61 | | - "alpha_beta", "alpha.", "alpha..", "beta", "-alpha.", "1.2", "1.2.3.DEV", "-1.0.3-gamma+b7718", |
62 | | - "1.2-SNAPSHOT", "1.2.31.2.3----RC-SNAPSHOT.12.09.1--..12+788", "1.2-RC-SNAPSHOT"] |
63 | | -# "99999999999999999999999.999999999999999999.99999999999999999----RC-SNAPSHOT.12.09.1--------------------------------..12"] |
64 | | - |
65 | | - for version in invalid_versions: |
66 | | - with pytest.raises(RuntimeError): |
67 | | - semver = Semver(version) |
68 | | - pass |
| 24 | + with open(invalid_versions) as csvfile: |
| 25 | + reader = csv.DictReader(csvfile) |
| 26 | + for row in reader: |
| 27 | + assert Semver.build(row['invalid']) is None |
69 | 28 |
|
70 | 29 | def test_compare(self): |
71 | | - cnt = 0 |
72 | | - for i in range(int(len(self.valid_versions)/2)): |
73 | | - assert Semver(self.valid_versions[cnt]).compare(Semver(self.valid_versions[cnt+1])) == 1 |
74 | | - assert Semver(self.valid_versions[cnt+1]).compare(Semver(self.valid_versions[cnt])) == -1 |
75 | | - assert Semver(self.valid_versions[cnt]).compare(Semver(self.valid_versions[cnt])) == 0 |
76 | | - assert Semver(self.valid_versions[cnt+1]).compare(Semver(self.valid_versions[cnt+1])) == 0 |
77 | | - cnt = cnt + 2 |
78 | | - |
79 | | - assert Semver("1.1.1").compare(Semver("1.1.1")) == 0 |
80 | | - assert Semver("1.1.1").compare(Semver("1.1.1+metadata")) == 0 |
81 | | - assert Semver("1.1.1").compare(Semver("1.1.1-rc.1")) == 1 |
82 | | - assert Semver("88.88.88").compare(Semver("88.88.88")) == 0 |
83 | | - assert Semver("1.2.3----RC-SNAPSHOT.12.9.1--.12").compare(Semver("1.2.3----RC-SNAPSHOT.12.9.1--.12")) == 0 |
84 | | - assert Semver("10.2.3-DEV-SNAPSHOT").compare(Semver("10.2.3-SNAPSHOT-123")) == -1 |
85 | | - |
86 | | - def _verify_version(self, semver, major, minor, patch, pre_release="", is_stable=True): |
87 | | - assert semver._major == major |
88 | | - assert semver._minor == minor |
89 | | - assert semver._patch == patch |
90 | | - assert semver._pre_release == pre_release |
91 | | - assert semver._is_stable == is_stable |
| 30 | + with open(valid_versions) as csvfile: |
| 31 | + reader = csv.DictReader(csvfile) |
| 32 | + for row in reader: |
| 33 | + assert Semver.build(row['higher']).compare(Semver.build(row['lower'])) == 1 |
| 34 | + assert Semver.build(row['lower']).compare(Semver.build(row['higher'])) == -1 |
| 35 | + |
| 36 | + with open(equalto_versions) as csvfile: |
| 37 | + reader = csv.DictReader(csvfile) |
| 38 | + for row in reader: |
| 39 | + version1 = Semver.build(row['version1']) |
| 40 | + version2 = Semver.build(row['version2']) |
| 41 | + if row['equals'] == "true": |
| 42 | + assert version1.version == version2.version |
| 43 | + else: |
| 44 | + assert version1.version != version2.version |
| 45 | + |
| 46 | + with open(between_versions) as csvfile: |
| 47 | + reader = csv.DictReader(csvfile) |
| 48 | + for row in reader: |
| 49 | + version1 = Semver.build(row['version1']) |
| 50 | + version2 = Semver.build(row['version2']) |
| 51 | + version3 = Semver.build(row['version3']) |
| 52 | + if row['expected'] == "true": |
| 53 | + assert version2.compare(version1) >= 0 and version3.compare(version2) >= 0 |
| 54 | + else: |
| 55 | + assert version2.compare(version1) < 0 or version3.compare(version2) < 0 |
0 commit comments