test coverage before: 78.5% test coverage after: 78.7% Signed-off-by: Leo Chen <leo@harmony.one>pull/689/head
parent
d2db9f493a
commit
875d5f02f9
@ -0,0 +1,66 @@ |
||||
package utils |
||||
|
||||
// this module in utils handles the ini file read/write
|
||||
import ( |
||||
"fmt" |
||||
"strings" |
||||
|
||||
"github.com/harmony-one/harmony/p2p" |
||||
ini "gopkg.in/ini.v1" |
||||
) |
||||
|
||||
// WalletProfile contains a section and key value pair map
|
||||
type WalletProfile struct { |
||||
Profile string |
||||
Bootnodes []string |
||||
Shards int |
||||
RPCServer [][]p2p.Peer |
||||
} |
||||
|
||||
// ReadWalletProfile reads an ini file and return WalletProfile
|
||||
func ReadWalletProfile(fn string, profile string) (*WalletProfile, error) { |
||||
cfg, err := ini.ShadowLoad(fn) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
config := new(WalletProfile) |
||||
config.Profile = profile |
||||
|
||||
// get the profile section
|
||||
sec, err := cfg.GetSection(profile) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
if sec.HasKey("bootnode") { |
||||
config.Bootnodes = sec.Key("bootnode").ValueWithShadows() |
||||
} else { |
||||
return nil, fmt.Errorf("can't find bootnode key") |
||||
} |
||||
|
||||
if sec.HasKey("shards") { |
||||
config.Shards = sec.Key("shards").MustInt() |
||||
config.RPCServer = make([][]p2p.Peer, config.Shards) |
||||
} else { |
||||
return nil, fmt.Errorf("can't find shards key") |
||||
} |
||||
|
||||
for i := 0; i < config.Shards; i++ { |
||||
rpcSec, err := cfg.GetSection(fmt.Sprintf("%s.shard%v.rpc", profile, i)) |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
rpcKey := rpcSec.Key("rpc").ValueWithShadows() |
||||
for _, key := range rpcKey { |
||||
v := strings.Split(key, ":") |
||||
rpc := p2p.Peer{ |
||||
IP: v[0], |
||||
Port: v[1], |
||||
} |
||||
config.RPCServer[i] = append(config.RPCServer[i], rpc) |
||||
} |
||||
} |
||||
|
||||
return config, nil |
||||
|
||||
} |
@ -0,0 +1,112 @@ |
||||
package utils |
||||
|
||||
import ( |
||||
"reflect" |
||||
"testing" |
||||
|
||||
"github.com/harmony-one/harmony/p2p" |
||||
) |
||||
|
||||
func TestReadWalletProfile(t *testing.T) { |
||||
config := []*WalletProfile{ |
||||
&WalletProfile{ |
||||
Profile: "default", |
||||
Bootnodes: []string{"127.0.0.1:9000/abcd", "127.0.0.1:9999/daeg"}, |
||||
Shards: 4, |
||||
RPCServer: [][]p2p.Peer{ |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "127.0.0.4", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.0.4", |
||||
Port: "9876", |
||||
}, |
||||
}, |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "127.0.0.1", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.0.1", |
||||
Port: "9876", |
||||
}, |
||||
}, |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "127.0.0.2", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.0.2", |
||||
Port: "9876", |
||||
}, |
||||
}, |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "127.0.0.3", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.0.3", |
||||
Port: "9876", |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
&WalletProfile{ |
||||
Profile: "testnet", |
||||
Bootnodes: []string{"192.168.0.1:9990/abcd", "127.0.0.1:8888/daeg"}, |
||||
Shards: 3, |
||||
RPCServer: [][]p2p.Peer{ |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "192.168.2.3", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.192.3", |
||||
Port: "9877", |
||||
}, |
||||
}, |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "192.168.2.1", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.192.1", |
||||
Port: "9877", |
||||
}, |
||||
}, |
||||
[]p2p.Peer{ |
||||
p2p.Peer{ |
||||
IP: "192.168.2.2", |
||||
Port: "8888", |
||||
}, |
||||
p2p.Peer{ |
||||
IP: "192.168.192.2", |
||||
Port: "9877", |
||||
}, |
||||
}, |
||||
}, |
||||
}, |
||||
} |
||||
|
||||
config1, err := ReadWalletProfile("test.ini", "default") |
||||
if err != nil { |
||||
t.Fatalf("ReadWalletProfile Error: %v", err) |
||||
} |
||||
if !reflect.DeepEqual(config[0], config1) { |
||||
t.Errorf("Got: %v\nExpect: %v\n", config1, config[0]) |
||||
} |
||||
config2, err := ReadWalletProfile("test.ini", "testnet") |
||||
if err != nil { |
||||
t.Fatalf("ReadWalletProfile Error: %v", err) |
||||
} |
||||
if !reflect.DeepEqual(config[1], config2) { |
||||
t.Errorf("Got: %v\nExpect: %v\n", config2, config[1]) |
||||
} |
||||
} |
@ -0,0 +1,37 @@ |
||||
[default] |
||||
bootnode = 127.0.0.1:9000/abcd |
||||
bootnode = 127.0.0.1:9999/daeg |
||||
shards = 4 |
||||
|
||||
[default.shard0.rpc] |
||||
rpc = 127.0.0.4:8888 |
||||
rpc = 192.168.0.4:9876 |
||||
|
||||
[default.shard1.rpc] |
||||
rpc = 127.0.0.1:8888 |
||||
rpc = 192.168.0.1:9876 |
||||
|
||||
[default.shard2.rpc] |
||||
rpc = 127.0.0.2:8888 |
||||
rpc = 192.168.0.2:9876 |
||||
|
||||
[default.shard3.rpc] |
||||
rpc = 127.0.0.3:8888 |
||||
rpc = 192.168.0.3:9876 |
||||
|
||||
[testnet] |
||||
bootnode = 192.168.0.1:9990/abcd |
||||
bootnode = 127.0.0.1:8888/daeg |
||||
shards = 3 |
||||
|
||||
[testnet.shard0.rpc] |
||||
rpc = 192.168.2.3:8888 |
||||
rpc = 192.168.192.3:9877 |
||||
|
||||
[testnet.shard1.rpc] |
||||
rpc = 192.168.2.1:8888 |
||||
rpc = 192.168.192.1:9877 |
||||
|
||||
[testnet.shard2.rpc] |
||||
rpc = 192.168.2.2:8888 |
||||
rpc = 192.168.192.2:9877 |
Loading…
Reference in new issue