github.com/stafiprotocol/go-substrate-rpc-client@v1.4.7/pkg/rpcmocksrv/server.go (about) 1 // Go Substrate RPC Client (GSRPC) provides APIs and types around Polkadot and any Substrate-based chain RPC calls 2 // 3 // Copyright 2020 Stafi Protocol 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 17 package rpcmocksrv 18 19 import ( 20 "math/rand" 21 "strconv" 22 "time" 23 24 gethrpc "github.com/stafiprotocol/go-substrate-rpc-client/pkg/gethrpc" 25 ) 26 27 type Server struct { 28 *gethrpc.Server 29 // Host consists of hostname and port 30 Host string 31 // URL consists of protocol, hostname and port 32 URL string 33 } 34 35 // New creates a new RPC mock server with a random port that allows registration of services 36 func New() *Server { 37 port := randomPort() 38 host := "localhost:" + strconv.Itoa(port) 39 40 _, rpcServ, err := gethrpc.StartWSEndpoint(host, []gethrpc.API{}, []string{}, []string{"*"}, true) 41 if err != nil { 42 panic(err) 43 } 44 s := Server{ 45 Server: rpcServ, 46 Host: host, 47 URL: "ws://" + host, 48 } 49 return &s 50 } 51 52 func randomPort() int { 53 rand.Seed(time.Now().UnixNano()) 54 min := 10000 55 max := 30000 56 return rand.Intn(max-min+1) + min 57 }