| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | // Copyright 2015 The go-ethereum Authors | 
					
						
							|  |  |  | // This file is part of the go-ethereum library. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // The go-ethereum library is free software: you can redistribute it and/or modify | 
					
						
							|  |  |  | // it under the terms of the GNU Lesser General Public License as published by | 
					
						
							|  |  |  | // the Free Software Foundation, either version 3 of the License, or | 
					
						
							|  |  |  | // (at your option) any later version. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // The go-ethereum library is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
					
						
							|  |  |  | // GNU Lesser General Public License for more details. | 
					
						
							|  |  |  | // | 
					
						
							|  |  |  | // You should have received a copy of the GNU Lesser General Public License | 
					
						
							|  |  |  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Contains a batch of utility type declarations used by the tests. As the node | 
					
						
							|  |  |  | // operates on unique types, a lot of them are needed to check various features. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package node | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/p2p" | 
					
						
							| 
									
										
										
										
											2015-12-16 10:58:01 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/rpc" | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | // NoopLifecycle is a trivial implementation of the Service interface. | 
					
						
							|  |  |  | type NoopLifecycle struct{} | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func (s *NoopLifecycle) Start() error { return nil } | 
					
						
							|  |  |  | func (s *NoopLifecycle) Stop() error  { return nil } | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func NewNoop() *Noop { | 
					
						
							|  |  |  | 	noop := new(Noop) | 
					
						
							|  |  |  | 	return noop | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | // Set of services all wrapping the base NoopLifecycle resulting in the same method | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | // signatures but different outer types. | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | type Noop struct{ NoopLifecycle } | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | // InstrumentedService is an implementation of Lifecycle for which all interface | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | // methods can be instrumented both return value as well as event hook wise. | 
					
						
							|  |  |  | type InstrumentedService struct { | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 	start error | 
					
						
							|  |  |  | 	stop  error | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 	startHook func() | 
					
						
							|  |  |  | 	stopHook  func() | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 	protocols []p2p.Protocol | 
					
						
							| 
									
										
										
										
											2015-10-15 16:07:19 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func (s *InstrumentedService) Start() error { | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 	if s.startHook != nil { | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 		s.startHook() | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return s.start | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (s *InstrumentedService) Stop() error { | 
					
						
							|  |  |  | 	if s.stopHook != nil { | 
					
						
							|  |  |  | 		s.stopHook() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return s.stop | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | type FullService struct{} | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func NewFullService(stack *Node) (*FullService, error) { | 
					
						
							|  |  |  | 	fs := new(FullService) | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | 	stack.RegisterProtocols(fs.Protocols()) | 
					
						
							|  |  |  | 	stack.RegisterAPIs(fs.APIs()) | 
					
						
							|  |  |  | 	stack.RegisterLifecycle(fs) | 
					
						
							|  |  |  | 	return fs, nil | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func (f *FullService) Start() error { return nil } | 
					
						
							| 
									
										
										
										
											2015-11-26 18:35:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func (f *FullService) Stop() error { return nil } | 
					
						
							| 
									
										
										
										
											2016-02-02 19:06:43 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func (f *FullService) Protocols() []p2p.Protocol { | 
					
						
							|  |  |  | 	return []p2p.Protocol{ | 
					
						
							|  |  |  | 		p2p.Protocol{ | 
					
						
							|  |  |  | 			Name:    "test1", | 
					
						
							|  |  |  | 			Version: uint(1), | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		p2p.Protocol{ | 
					
						
							|  |  |  | 			Name:    "test2", | 
					
						
							|  |  |  | 			Version: uint(2), | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-02 19:06:43 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-03 19:40:46 +02:00
										 |  |  | func (f *FullService) APIs() []rpc.API { | 
					
						
							|  |  |  | 	return []rpc.API{ | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			Namespace: "admin", | 
					
						
							|  |  |  | 			Version:   "1.0", | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			Namespace: "debug", | 
					
						
							|  |  |  | 			Version:   "1.0", | 
					
						
							|  |  |  | 			Public:    true, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			Namespace: "net", | 
					
						
							|  |  |  | 			Version:   "1.0", | 
					
						
							|  |  |  | 			Public:    true, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2016-02-02 19:06:43 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |