10
10
import nats
11
11
import nats .errors
12
12
import pytest
13
- from nats .aio .client import Client as NATS , __version__
13
+ from nats .aio .client import Client as NATS , ServerVersion , __version__
14
14
from nats .json_util import JsonUtil as json
15
15
from tests .utils import (
16
16
ClusteringDiscoveryAuthTestCase ,
@@ -67,6 +67,79 @@ def test_default_connect_command_with_name(self):
67
67
68
68
self .assertEqual (expected .encode (), got )
69
69
70
+ def test_semver_parsing (self ):
71
+ # Test common versions for the NATS Server.
72
+ v = ServerVersion ("2.10.26" )
73
+ self .assertEqual (2 , v .major )
74
+ self .assertEqual (10 , v .minor )
75
+ self .assertEqual (26 , v .patch )
76
+
77
+ v = ServerVersion ("2.10.26+foo" )
78
+ self .assertEqual (2 , v .major )
79
+ self .assertEqual (10 , v .minor )
80
+ self .assertEqual (26 , v .patch )
81
+ self .assertEqual ("foo" , v .build )
82
+
83
+ v = ServerVersion ("2.11.1-RC.1" )
84
+ self .assertEqual (2 , v .major )
85
+ self .assertEqual (11 , v .minor )
86
+ self .assertEqual (1 , v .patch )
87
+ self .assertEqual ("RC.1" , v .prerelease )
88
+
89
+ v = ServerVersion ("2.11.1-RC.1+syn1" )
90
+ self .assertEqual (2 , v .major )
91
+ self .assertEqual (11 , v .minor )
92
+ self .assertEqual (1 , v .patch )
93
+ self .assertEqual ("RC.1" , v .prerelease )
94
+ self .assertEqual ("syn1" , v .build )
95
+
96
+ v = ServerVersion ("2.11.1-beta+syn2" )
97
+ self .assertEqual (2 , v .major )
98
+ self .assertEqual (11 , v .minor )
99
+ self .assertEqual (1 , v .patch )
100
+ self .assertEqual ("beta" , v .prerelease )
101
+ self .assertEqual ("syn2" , v .build )
102
+ self .assertEqual ("beta+syn2" , v .dev )
103
+
104
+ v = ServerVersion ("2.11.1-dev" )
105
+ self .assertEqual (2 , v .major )
106
+ self .assertEqual (11 , v .minor )
107
+ self .assertEqual (1 , v .patch )
108
+ self .assertEqual ("dev" , v .prerelease )
109
+ self .assertEqual ("" , v .build )
110
+ self .assertEqual ("dev" , v .dev )
111
+
112
+ with self .assertRaises (ValueError ):
113
+ v = ServerVersion ("aaaaaaaaa" )
114
+ v .major
115
+
116
+ with self .assertRaises (ValueError ):
117
+ v = ServerVersion ("2.11.1!dev" )
118
+ v .major
119
+
120
+ with self .assertRaises (ValueError ):
121
+ v = ServerVersion ("" )
122
+ v .major
123
+
124
+ # Check that some common server versions do not panic.
125
+ versions = [
126
+ "2.2.2" , "2.2.2" , "2.2.2" , "2.2.2-prerelease+meta" , "2.2.2+meta" ,
127
+ "2.2.2+meta-valid" , "2.2.2-alpha" , "2.2.2-beta" ,
128
+ "2.2.2-alpha.beta" , "2.2.2-alpha.beta.1" , "2.2.2-alpha.1" ,
129
+ "2.2.2-alpha0.valid" , "2.2.2-alpha.0valid" ,
130
+ "2.2.2-alpha-a.b-c-somethinglong+build.1-aef.1-its-okay" ,
131
+ "2.2.2-rc.1+build.1" , "2.2.2-rc.1+build.123" , "2.2.2-RC.1+build.1" ,
132
+ "2.2.2-RC.1+build.123" , "2.2.2-rc.1" , "2.2.2-RC.1" ,
133
+ "2.2.2-RC.1+foo" , "2.2.2-beta" , "2.2.2-DEV-SNAPSHOT" ,
134
+ "2.2.2-SNAPSHOT-123" , "2.2.2" , "2.2.2" , "2.2.2" ,
135
+ "2.2.2+build.1848" , "2.2.2-alpha.1227" , "2.2.2-alpha+beta"
136
+ ]
137
+ for version in versions :
138
+ v = ServerVersion (version )
139
+ self .assertEqual (v .major , 2 )
140
+ self .assertEqual (v .minor , 2 )
141
+ self .assertTrue (v .patch , 2 )
142
+
70
143
71
144
class ClientTest (SingleServerTestCase ):
72
145
@@ -87,6 +160,15 @@ async def test_default_connect(self):
87
160
self .assertTrue (nc .is_closed )
88
161
self .assertFalse (nc .is_connected )
89
162
163
+ @async_test
164
+ async def test_connected_server_version (self ):
165
+ nc = await nats .connect ()
166
+ version = nc .connected_server_version
167
+ self .assertEqual (version .major , 2 )
168
+ self .assertTrue (version .minor is not None )
169
+ self .assertTrue (version .patch is not None )
170
+ await nc .close ()
171
+
90
172
@async_test
91
173
async def test_default_module_connect (self ):
92
174
nc = await nats .connect ()
0 commit comments