Skip to content
This repository was archived by the owner on Aug 2, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
087b238
simv2: wip
skylenet Jul 2, 2019
cac6243
Merge branch 'master' of github.com:ethersphere/swarm into network-si…
skylenet Jul 4, 2019
04dd442
simulation: exec adapter start/stop
skylenet Jul 4, 2019
0dbc0ef
simulation: add node status to exec adapter
skylenet Jul 4, 2019
93cd38b
simulation: initial simulation code
skylenet Jul 4, 2019
2223822
simulation: exec adapter, configure path to executable
skylenet Jul 5, 2019
f17339f
simulation: initial docker adapter
skylenet Jul 8, 2019
391596d
simulation: wip kubernetes adapter
skylenet Jul 8, 2019
36fd9f5
simulation: kubernetes adapter proxy
skylenet Jul 9, 2019
68614a4
simulation: implement GetAll/StartAll/StopAll
skylenet Jul 11, 2019
870b2ae
simulation: kuberentes adapter - set env vars and resource limits
skylenet Jul 11, 2019
ea80683
simulation: discovery test
skylenet Jul 11, 2019
27afe4d
simulation: remove port definitions within docker adapter
skylenet Jul 11, 2019
0e1ea4c
simulation: simplify wait for healthy loop
skylenet Jul 11, 2019
c2cfe8f
simulation: get nat ip addr from interface
skylenet Jul 11, 2019
fd8a6a3
simulation: pull docker images automatically
skylenet Jul 11, 2019
83af63a
simulation: NodeStatus -> NodeInfo
skylenet Jul 16, 2019
37eef85
simulation: move discovery test to example dir
skylenet Jul 16, 2019
2c08f33
simulation: example snapshot usage
skylenet Jul 17, 2019
71bddc4
simulation: add goclient specific simulation
skylenet Jul 17, 2019
73e520e
simulation: add peer connections to snapshot
skylenet Jul 18, 2019
71fd388
simulation: close rpc client
skylenet Jul 19, 2019
1b98cd3
simulation: don't export kubernetes proxy server
skylenet Jul 19, 2019
3dc2fdc
simulation: merge simulation code
skylenet Jul 19, 2019
8bf5e8d
simulation: don't export nodemap
skylenet Jul 19, 2019
6632ddf
simulation: rename SimulationSnapshot -> Snapshot
skylenet Jul 19, 2019
edfadfa
Merge branch 'master' of github.com:ethersphere/swarm into network-si…
skylenet Jul 19, 2019
c0ad41b
simulation: linting fixes
skylenet Jul 23, 2019
5f50450
simulation: add k8s available helper func
skylenet Jul 23, 2019
dd88454
simulation: vendor
skylenet Jul 23, 2019
114248d
simulation: fix 'no non-test Go files' when building
skylenet Jul 23, 2019
4dcc6be
simulation: remove errors from interface methods where non were returned
skylenet Jul 23, 2019
438f518
simulation: run getHealthInfo check in parallel
skylenet Jul 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
416 changes: 416 additions & 0 deletions simulation/docker.go

Large diffs are not rendered by default.

53 changes: 53 additions & 0 deletions simulation/docker_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package simulation

import (
"context"
"testing"

"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)

func TestDockerAdapterBuild(t *testing.T) {
if !IsDockerAvailable(client.DefaultDockerHost) {
t.Skip("could not connect to the docker daemon")
}

// Create a docker client
c, err := dockerClient()
if err != nil {
t.Fatalf("could not create docker client: %v", err)
}
defer c.Close()

imageTag := "test-docker-adapter-build:latest"

config := DefaultDockerAdapterConfig()

// Build based on a Dockerfile
config.BuildContext = &DockerBuildContext{
Directory: "../",
Dockerfile: "Dockerfile",
Tag: imageTag,
}

// Create docker adapter: This will build the image
_, err = NewDockerAdapter(config)
if err != nil {
t.Fatalf("could not create docker adapter: %v", err)
}

// Cleanup image
_, err = c.ImageRemove(context.Background(), imageTag, types.ImageRemoveOptions{})
if err != nil {
t.Fatalf("could not delete docker image: %v", err)
}
}

// Create docker client
func dockerClient() (*client.Client, error) {
return client.NewClientWithOpts(
client.WithHost(client.DefaultDockerHost),
client.WithAPIVersionNegotiation(),
)
}
1 change: 1 addition & 0 deletions simulation/examples/cluster/cluster.go
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
package cluster
132 changes: 132 additions & 0 deletions simulation/examples/cluster/cluster_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
package cluster

import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"os"
"testing"

"github.com/ethereum/go-ethereum/log"
"github.com/ethersphere/swarm/simulation"
colorable "github.com/mattn/go-colorable"
)

var (
nodes = flag.Int("nodes", 20, "number of nodes to create")
loglevel = flag.Int("loglevel", 3, "verbosity of logs")
rawlog = flag.Bool("rawlog", false, "remove terminal formatting from logs")
)

func init() {
flag.Parse()
log.PrintOrigins(true)
log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(*loglevel), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(!*rawlog))))
}

func TestCluster(t *testing.T) {
nodeCount := *nodes

// Test exec adapter
t.Run("exec", func(t *testing.T) {
execPath := "../../../build/bin/swarm"

if _, err := os.Stat(execPath); err != nil {
if os.IsNotExist(err) {
t.Skip("swarm binary not found. build it before running the test")
}
}

tmpdir, err := ioutil.TempDir("", "test-sim-exec")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(tmpdir)
adapter, err := simulation.NewExecAdapter(simulation.ExecAdapterConfig{
ExecutablePath: execPath,
BaseDataDirectory: tmpdir,
})
if err != nil {
t.Fatalf("could not create exec adapter: %v", err)
}
startSimulation(t, adapter, nodeCount)
})

// Test docker adapter
t.Run("docker", func(t *testing.T) {
config := simulation.DefaultDockerAdapterConfig()
if !simulation.IsDockerAvailable(config.DaemonAddr) {
t.Skip("docker is not available, skipping test")
}
config.DockerImage = "ethersphere/swarm:edge"
adapter, err := simulation.NewDockerAdapter(config)
if err != nil {
t.Fatalf("could not create docker adapter: %v", err)
}
startSimulation(t, adapter, nodeCount)
})

// Test kubernetes adapter
t.Run("kubernetes", func(t *testing.T) {
config := simulation.DefaultKubernetesAdapterConfig()
if !simulation.IsKubernetesAvailable(config.KubeConfigPath) {
t.Skip("kubernetes is not available, skipping test")
}
config.Namespace = "simulation-test"
config.DockerImage = "ethersphere/swarm:edge"
adapter, err := simulation.NewKubernetesAdapter(config)
if err != nil {
t.Fatalf("could not create kubernetes adapter: %v", err)
}
startSimulation(t, adapter, nodeCount)
})
}

func startSimulation(t *testing.T, adapter simulation.Adapter, count int) {
sim := simulation.NewSimulation(adapter)

defer sim.StopAll()

// Common args used by all nodes
commonArgs := []string{
"--bzznetworkid", "599",
}

// Start a cluster with 'count' nodes and a bootnode
nodes, err := sim.CreateClusterWithBootnode("test", count, commonArgs)
if err != nil {
t.Fatal(err)
}

// Wait for all nodes to be considered healthy
err = sim.WaitForHealthyNetwork()
if err != nil {
t.Errorf("Failed to get healthy network: %v", err)
}

// Check hive output on the first node
client, err := sim.RPCClient(nodes[0].Info().ID)
if err != nil {
t.Errorf("Failed to get rpc client: %v", err)
}

var hive string
err = client.Call(&hive, "bzz_hive")
if err != nil {
t.Errorf("could not get hive info: %v", err)
}

snap, err := sim.Snapshot()
if err != nil {
t.Error(err)
}

b, err := json.Marshal(snap)
if err != nil {
t.Error(err)
}
fmt.Println(string(b))

fmt.Println(hive)
}
Loading