Browse Source

proto.xmr: disable version check for restricted (public) nodes

The MMGen Project 2 years ago
parent
commit
f62a4ce5a9
4 changed files with 36 additions and 17 deletions
  1. 1 1
      mmgen/data/version
  2. 6 1
      mmgen/proto/xmr/daemon.py
  3. 14 9
      mmgen/proto/xmr/rpc.py
  4. 15 6
      test/test_py_d/ts_xmrwallet.py

+ 1 - 1
mmgen/data/version

@@ -1 +1 @@
-13.3.dev38
+13.3.dev39

+ 6 - 1
mmgen/proto/xmr/daemon.py

@@ -72,7 +72,12 @@ class monero_daemon(CoinDaemon):
 
 	@property
 	def stop_cmd(self):
-		return ['kill','-Wf',self.pid] if self.platform == 'win' else [self.exec_fn] + self.shared_args + ['exit']
+		if self.platform == 'win':
+			return ['kill','-Wf',self.pid]
+		elif '--restricted-rpc' in self.start_cmd or '--public-node' in self.start_cmd:
+			return ['kill',self.pid]
+		else:
+			return [self.exec_fn] + self.shared_args + ['exit']
 
 class MoneroWalletDaemon(RPCDaemon):
 

+ 14 - 9
mmgen/proto/xmr/rpc.py

@@ -59,15 +59,20 @@ class MoneroRPCClient(RPCClient):
 
 		if test_connection:
 			# https://github.com/monero-project/monero src/rpc/rpc_version_str.cpp
-			self.daemon_version_str = self.call_raw('getinfo')['version']
-			self.daemon_version = sum(
-				int(m) * (1000 ** n) for n,m in
-					enumerate(reversed(re.match(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',self.daemon_version_str).groups()))
-			)
-			if self.daemon and self.daemon_version > self.daemon.coind_version:
-				self.handle_unsupported_daemon_version(
-					proto.name,
-					ignore_daemon_version or proto.ignore_daemon_version or g.ignore_daemon_version )
+			ver_str = self.call_raw('getinfo')['version']
+			if ver_str:
+				self.daemon_version_str = ver_str
+				self.daemon_version = sum(
+					int(m) * (1000 ** n) for n,m in
+						enumerate(reversed(re.match(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',ver_str).groups()))
+				)
+				if self.daemon and self.daemon_version > self.daemon.coind_version:
+					self.handle_unsupported_daemon_version(
+						proto.name,
+						ignore_daemon_version or proto.ignore_daemon_version or g.ignore_daemon_version )
+			else: # restricted (public) node:
+				self.daemon_version_str = None
+				self.daemon_version = None
 
 	def call(self,method,*params,**kwargs):
 		assert params == (), f'{type(self).__name__}.call() accepts keyword arguments only'

+ 15 - 6
test/test_py_d/ts_xmrwallet.py

@@ -208,11 +208,13 @@ class TestSuiteXMRWallet(TestSuiteBase):
 			'md_rpc',
 			'wd',
 			'wd_rpc',
+			'add_coind_args',
 		])
-		for user,sid,shift,kal_range in ( # kal_range must be None, a single digit, or a single hyphenated range
-				('miner', '98831F3A', 130,  '1-2'),
-				('bob',   '1378FC64', 140, None),
-				('alice', 'FE3C6545', 150, '1-4'),
+		# kal_range must be None, a single digit, or a single hyphenated range
+		for user,sid,shift,kal_range,add_coind_args in (
+				('miner', '98831F3A', 130, '1-2', []),
+				('bob',   '1378FC64', 140, None,  ['--restricted-rpc']),
+				('alice', 'FE3C6545', 150, '1-4', []),
 			):
 			udir = os.path.join('test',f'tmp{n}',user)
 			datadir = os.path.join(self.datadir_base,user)
@@ -256,6 +258,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
 				md_rpc        = md_rpc,
 				wd            = wd,
 				wd_rpc        = wd_rpc,
+				add_coind_args = add_coind_args,
 			)
 
 	def init_daemon_args(self):
@@ -263,7 +266,10 @@ class TestSuiteXMRWallet(TestSuiteBase):
 		for u in self.users:
 			other_ports = [self.users[u2].md.p2p_port for u2 in self.users if u2 != u]
 			node_args = [f'--add-exclusive-node=127.0.0.1:{p}' for p in other_ports]
-			self.users[u].md.usr_coind_args = common_args + node_args
+			self.users[u].md.usr_coind_args = (
+				common_args +
+				node_args +
+				self.users[u].add_coind_args )
 
 	# cmd_group methods
 
@@ -707,7 +713,10 @@ class TestSuiteXMRWallet(TestSuiteBase):
 
 	def stop_daemons(self):
 		for v in self.users.values():
-			async_run(v.md_rpc.stop_daemon())
+			if '--restricted-rpc' in v.md.start_cmd:
+				v.md.stop()
+			else:
+				async_run(v.md_rpc.stop_daemon())
 
 	def stop_miner_wallet_daemon(self):
 		async_run(self.users['miner'].wd_rpc.stop_daemon())