Skip to content
Snippets Groups Projects
Unverified Commit fbe68776 authored by jonastheis's avatar jonastheis
Browse files

Add possibility to retrieve logs from a peer via Docker logs

parent 5b2a4330
No related branches found
No related tags found
No related merge requests found
......@@ -4,17 +4,32 @@ import (
"fmt"
"math/rand"
"time"
"github.com/docker/docker/client"
)
type Framework struct {
peers []*Peer
dockerCli *client.Client
}
func New() *Framework {
fmt.Printf("Finding available peers...\n")
cli, err := client.NewClient(
"unix:///var/run/docker.sock",
"",
nil,
nil,
)
if err != nil {
fmt.Println("Could not create docker CLI client.")
panic(err)
}
f := &Framework{
peers: getAvailablePeers(),
dockerCli: cli,
peers: getAvailablePeers(cli),
}
if len(f.peers) == 0 {
......
......@@ -2,10 +2,15 @@ package framework
import (
"fmt"
"io"
"net"
"net/http"
"time"
"github.com/docker/distribution/context"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/iotaledger/goshimmer/tools/integration-tests/tester/api"
)
......@@ -13,15 +18,17 @@ type Peer struct {
name string
ip net.IP
*api.Api
dockerCli *client.Client
chosen []api.Neighbor
accepted []api.Neighbor
}
func NewPeer(name string, ip net.IP) *Peer {
func NewPeer(name string, ip net.IP, dockerCli *client.Client) *Peer {
return &Peer{
name: name,
ip: ip,
Api: api.New(getWebApiBaseUrl(ip), http.Client{Timeout: 30 * time.Second}),
dockerCli: dockerCli,
}
}
......@@ -41,12 +48,27 @@ func (p *Peer) SetNeighbors(chosen, accepted []api.Neighbor) {
copy(p.accepted, accepted)
}
func getAvailablePeers() (peers []*Peer) {
func (p *Peer) Logs() (io.ReadCloser, error) {
return p.dockerCli.ContainerLogs(
context.Background(),
p.name,
types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: false,
Since: "",
Timestamps: false,
Follow: false,
Tail: "",
Details: false,
})
}
func getAvailablePeers(dockerCli *client.Client) (peers []*Peer) {
// get peer master
if addr, err := net.LookupIP(hostnamePeerMaster); err != nil {
fmt.Printf("Could not resolve %s\n", hostnamePeerMaster)
} else {
p := NewPeer(hostnamePeerMaster, addr[0])
p := NewPeer(hostnamePeerMaster, addr[0], dockerCli)
peers = append(peers, p)
}
......@@ -57,7 +79,7 @@ func getAvailablePeers() (peers []*Peer) {
//fmt.Printf("Could not resolve %s\n", peerName)
break
} else {
p := NewPeer(peerName, addr[0])
p := NewPeer(peerName, addr[0], dockerCli)
peers = append(peers, p)
}
}
......
package tests
import (
"bufio"
"regexp"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
// TestDockerLogs simply verifies that a peer's log message contains "GoShimmer".
// Using the combination of logs and regular expressions can be useful to test a certain peer's behavior.
func TestDockerLogs(t *testing.T) {
for _, p := range f.Peers() {
log, err := p.Logs()
require.NoError(t, err)
r := regexp.MustCompile("GoShimmer")
assert.True(t, r.MatchReader(bufio.NewReader(log)))
}
}
package tests
import (
"os"
"testing"
"github.com/iotaledger/goshimmer/tools/integration-tests/tester/framework"
)
var f *framework.Framework
func TestMain(m *testing.M) {
f = framework.New()
// call the tests
os.Exit(m.Run())
}
package tests
import (
"context"
"fmt"
"io"
"os"
"testing"
"time"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/iotaledger/goshimmer/tools/integration-tests/tester/framework"
)
var f *framework.Framework
func TestMain(m *testing.M) {
f = framework.New()
cli, err := client.NewClient(
"unix:///var/run/docker.sock",
"",
nil,
nil,
)
if err != nil {
fmt.Println("CLI error")
panic(err)
}
containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{All: true})
if err != nil {
fmt.Println("containers error")
panic(err)
}
reader, err := cli.ContainerLogs(
context.Background(),
"peer_master",
types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: false,
Since: "",
Timestamps: false,
Follow: false,
Tail: "",
Details: false,
})
if err != nil {
fmt.Println("logs error")
panic(err)
}
_, err = io.Copy(os.Stdout, reader)
if err != nil && err != io.EOF {
panic(err)
}
for _, container := range containers {
fmt.Printf("%s %s\n", container.ID, container.Names)
}
// call the tests
os.Exit(m.Run())
}
func TestRelayMessages(t *testing.T) {
numMessages := 100
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment