1010import nats
1111import nats .errors
1212import pytest
13- from nats .aio .client import Client as NATS , __version__
13+ from nats .aio .client import Client as NATS , ServerVersion , __version__
1414from nats .json_util import JsonUtil as json
1515from tests .utils import (
1616 ClusteringDiscoveryAuthTestCase ,
@@ -67,6 +67,79 @@ def test_default_connect_command_with_name(self):
6767
6868 self .assertEqual (expected .encode (), got )
6969
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+
70143
71144class ClientTest (SingleServerTestCase ):
72145
@@ -87,6 +160,15 @@ async def test_default_connect(self):
87160 self .assertTrue (nc .is_closed )
88161 self .assertFalse (nc .is_connected )
89162
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+
90172 @async_test
91173 async def test_default_module_connect (self ):
92174 nc = await nats .connect ()
0 commit comments