core, container: refactor environment config with docker

This commit is contained in:
Edwin 2017-08-14 11:45:03 +08:00
parent c35fc7ccac
commit 8d872e8640
3 changed files with 23 additions and 12 deletions

View File

@ -46,14 +46,9 @@ type Ethereum interface {
Stop() error
}
func NewEthereum(options ...Option) *ethereum {
client, err := client.NewEnvClient()
if err != nil {
log.Fatalf("Cannot connect to Docker daemon, err: %v", err)
}
func NewEthereum(c *client.Client, options ...Option) *ethereum {
geth := &ethereum{
client: client,
client: c,
}
for _, opt := range options {

View File

@ -35,6 +35,7 @@ func TestEthereumContainer(t *testing.T) {
for _, env := range envs {
geth := NewEthereum(
env.Client,
ImageName("quay.io/maicoin/ottoman_geth:istanbul_develop"),
HostDataDir(env.DataDir),
DataDir("/data"),

View File

@ -23,9 +23,11 @@ import (
"io/ioutil"
"log"
"net"
"net/url"
"os"
"path/filepath"
"github.com/docker/docker/client"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/p2p/discover"
@ -44,10 +46,6 @@ const (
GenesisJson = "genesis.json"
)
var (
defaultIP = net.IPv4(127, 0, 0, 1)
)
func GenerateClusterKeys(numbers int) []*ecdsa.PrivateKey {
keys := make([]*ecdsa.PrivateKey, numbers)
for i := 0; i < len(keys); i++ {
@ -66,6 +64,7 @@ type Env struct {
RpcPort uint16
DataDir string
Key *ecdsa.PrivateKey
Client *client.Client
}
func Teardown(envs []*Env) {
@ -80,6 +79,11 @@ func SetupEnv(prvKeys []*ecdsa.PrivateKey) []*Env {
httpPort := defaultHttpPort
for i := 0; i < len(envs); i++ {
client, err := client.NewEnvClient()
if err != nil {
log.Fatalf("Cannot connect to Docker daemon, err: %v", err)
}
dataDir, err := saveNodeKey(prvKeys[i])
if err != nil {
panic("Failed to save node key")
@ -91,6 +95,7 @@ func SetupEnv(prvKeys []*ecdsa.PrivateKey) []*Env {
RpcPort: rpcPort,
DataDir: dataDir,
Key: prvKeys[i],
Client: client,
}
rpcPort = rpcPort + 1
@ -159,8 +164,18 @@ func transformToStaticNodes(envs []*Env) []string {
nodes := make([]string, len(envs))
for i, env := range envs {
daemonHost := env.Client.DaemonHost()
url, err := url.Parse(daemonHost)
if err != nil {
log.Fatalf("Failed to parse daemon host, err: %v", err)
}
host, _, err := net.SplitHostPort(url.Host)
if err != nil {
log.Fatalf("Failed to split host and port, err: %v", err)
}
nodeID := discover.PubkeyID(&env.Key.PublicKey)
nodes[i] = discover.NewNode(nodeID, defaultIP, 0, env.HttpPort).String()
nodes[i] = discover.NewNode(nodeID, net.ParseIP(host), 0, env.HttpPort).String()
}
return nodes
}