Skip to content

Commit 110c928

Browse files
Fix IRB container package
- implement docker API changes Signed-off-by: Marcus Brandenburger <bur@zurich.ibm.com>
1 parent d8e108e commit 110c928

File tree

10 files changed

+693
-409
lines changed

10 files changed

+693
-409
lines changed

samples/demos/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ include $(TOP)/build.mk
88

99
DEMOS = irb
1010

11-
build clean:
11+
build test clean:
1212
$(foreach DIR, $(DEMOS), $(MAKE) -C $(DIR) $@ || exit;)
1313

samples/demos/irb/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
cmd/**
1+
cmd/
22
users/**
33
pkg/protos/**

samples/demos/irb/Makefile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ include $(TOP)/build.mk
77

88
COMPONENTS = protos chaincode experimenter
99

10-
all: pull-images ercc build test
10+
all: ercc build test
1111

1212
pull-images:
1313
$(DOCKER) pull redis:latest
@@ -23,11 +23,11 @@ ercc:
2323
build: ercc
2424
$(foreach DIR, $(COMPONENTS), $(MAKE) -C $(DIR) $@ || exit;)
2525

26-
test:
27-
$(GO) test -v ./...
26+
test: pull-images
27+
$(GO) test -v -failfast ./...
2828

2929
run:
30-
$(GO) test -v .
30+
$(GO) test -v -failfast .
3131

3232
clean:
3333
$(GO) clean

samples/demos/irb/experimenter/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ run: build
1717
$(MAKE) -C worker stop-docker run-docker
1818

1919
test:
20-
$(GO) test -v ./...
20+
$(GO) test -v -failfast ./...

samples/demos/irb/experimenter/test/worker_test.go

Lines changed: 88 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,33 @@ package test
88

99
import (
1010
"bytes"
11+
"context"
1112
"fmt"
1213
"io"
1314
"net/http"
15+
"os"
1416
"testing"
15-
"time"
1617

17-
"github.com/hyperledger/fabric-private-chaincode/samples/demos/irb/pkg/container"
18+
"github.com/docker/go-connections/nat"
1819
"github.com/hyperledger/fabric-private-chaincode/samples/demos/irb/pkg/crypto"
1920
pb "github.com/hyperledger/fabric-private-chaincode/samples/demos/irb/pkg/protos"
2021
"github.com/hyperledger/fabric-private-chaincode/samples/demos/irb/pkg/storage"
21-
"github.com/hyperledger/fabric-private-chaincode/samples/demos/irb/pkg/utils"
2222
"github.com/pkg/errors"
23+
"github.com/stretchr/testify/require"
24+
"github.com/testcontainers/testcontainers-go"
25+
"github.com/testcontainers/testcontainers-go/network"
26+
"github.com/testcontainers/testcontainers-go/wait"
2327
"google.golang.org/protobuf/proto"
2428
)
2529

26-
func requestAttestation() ([]byte, error) {
30+
func experimentEndpoint(ep string) string {
31+
host := os.Getenv("EXPERIMENT_HOST")
32+
port := os.Getenv("EXPERIMENT_PORT")
33+
return fmt.Sprintf("http://%s:%s/%s", host, port, ep)
34+
}
2735

28-
resp, err := http.Get("http://localhost:5000/attestation")
36+
func requestAttestation() ([]byte, error) {
37+
resp, err := http.Get(experimentEndpoint("attestation"))
2938
if err != nil {
3039
return nil, err
3140
}
@@ -57,7 +66,6 @@ func requestAttestation() ([]byte, error) {
5766
}
5867

5968
func submitEvaluationPack(pk []byte, req *pb.RegisterDataRequest) error {
60-
6169
epm := &pb.EvaluationPackMessage{}
6270
epm.RegisteredData = []*pb.RegisterDataRequest{req}
6371

@@ -92,7 +100,7 @@ func submitEvaluationPack(pk []byte, req *pb.RegisterDataRequest) error {
92100
return err
93101
}
94102

95-
resp, err := http.Post("http://localhost:5000/execute-evaluationpack", "", bytes.NewBuffer(evalPackBytes))
103+
resp, err := http.Post(experimentEndpoint("execute-evaluationpack"), "", bytes.NewBuffer(evalPackBytes))
96104
if err != nil {
97105
return err
98106
}
@@ -134,7 +142,7 @@ func upload() (*pb.RegisterDataRequest, error) {
134142
PublicKey: []byte("some verification key"),
135143
}
136144

137-
//build request
145+
// build request
138146
registerDataRequest := &pb.RegisterDataRequest{
139147
Participant: &userIdentity,
140148
DecryptionKey: sk,
@@ -148,70 +156,85 @@ func upload() (*pb.RegisterDataRequest, error) {
148156
const networkID = "mytestnetwork"
149157

150158
func TestWorker(t *testing.T) {
151-
152-
network := &container.Network{Name: networkID}
153-
err := network.Create()
154-
defer network.Remove()
155-
if err != nil {
156-
panic(err)
157-
}
158-
159-
// setup redis
160-
redis := &container.Container{
161-
Image: "redis",
162-
Name: "redis-container",
163-
HostIP: "localhost",
164-
HostPort: "6379",
165-
Network: networkID,
166-
}
167-
err = redis.Start()
168-
defer redis.Stop()
169-
if err != nil {
170-
panic(err)
171-
}
172-
173-
// setup experiment container
174-
experiment := &container.Container{
175-
Image: "irb-experimenter-worker",
176-
Name: "experiment-container",
177-
HostIP: "localhost",
178-
HostPort: "5000",
179-
Env: []string{"REDIS_HOST=redis-container"},
180-
Network: networkID,
181-
}
182-
err = experiment.Start()
183-
defer experiment.Stop()
184-
if err != nil {
185-
panic(err)
186-
}
187-
188-
// let's wait until experiment service is up an running
189-
err = utils.Retry(func() bool {
190-
resp, err := http.Get("http://localhost:5000/info")
191-
if err != nil {
192-
return false
193-
}
194-
return resp.StatusCode == 200
195-
}, 5, 60*time.Second, 2*time.Second)
196-
if err != nil {
197-
panic(err)
198-
}
159+
ctx := context.Background()
160+
161+
// network
162+
net, err := network.New(ctx)
163+
require.NoError(t, err)
164+
defer func() {
165+
err := net.Remove(ctx)
166+
require.NoError(t, err)
167+
}()
168+
networkName := net.Name
169+
170+
// redis
171+
redisImageName := "redis"
172+
redisExportedPort := fmt.Sprintf("%d/tcp", storage.DefaultRedisPort)
173+
redis, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
174+
ContainerRequest: testcontainers.ContainerRequest{
175+
Image: redisImageName,
176+
ExposedPorts: []string{redisExportedPort},
177+
Networks: []string{networkName},
178+
// WaitingFor: wait.ForLog("* Ready to accept connections"),
179+
WaitingFor: wait.ForExposedPort(),
180+
},
181+
Started: true,
182+
})
183+
require.NoError(t, err)
184+
defer func() {
185+
err := redis.Terminate(ctx)
186+
require.NoError(t, err)
187+
}()
188+
189+
redisHost, err := redis.Host(ctx)
190+
require.NoError(t, err)
191+
redisPort, err := redis.MappedPort(ctx, nat.Port(redisExportedPort))
192+
require.NoError(t, err)
193+
t.Logf("redisHost: %s:%s", redisHost, redisPort.Port())
194+
195+
os.Setenv("REDIS_HOST", redisHost)
196+
os.Setenv("REDIS_PORT", redisPort.Port())
197+
198+
// experiment
199+
experimentImageName := "irb-experimenter-worker"
200+
experiment, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
201+
ContainerRequest: testcontainers.ContainerRequest{
202+
Image: experimentImageName,
203+
ExposedPorts: []string{"5000/tcp"},
204+
Networks: []string{networkName},
205+
Env: map[string]string{
206+
"REDIS_HOST": redisHost,
207+
"REDIS_PORT": redisPort.Port(),
208+
},
209+
WaitingFor: wait.ForExposedPort(),
210+
},
211+
Started: true,
212+
})
213+
require.NoError(t, err)
214+
defer func() {
215+
err := experiment.Terminate(ctx)
216+
require.NoError(t, err)
217+
}()
218+
219+
experimentHost, err := experiment.Host(ctx)
220+
require.NoError(t, err)
221+
experimentPort, err := experiment.MappedPort(ctx, "5000/tcp")
222+
require.NoError(t, err)
223+
t.Logf("experimentHost: %s:%s", experimentHost, experimentPort.Port())
224+
225+
os.Setenv("EXPERIMENT_HOST", experimentHost)
226+
os.Setenv("EXPERIMENT_PORT", experimentPort.Port())
199227

200228
req, err := upload()
201-
if err != nil {
202-
panic(err)
203-
}
229+
require.NoError(t, err)
204230

205231
fmt.Println("Testing attestation...")
206232
pk, err := requestAttestation()
207-
if err != nil {
208-
panic(err)
209-
}
233+
require.NoError(t, err)
210234

211235
fmt.Println("Testing evaluation pack...")
212-
if err := submitEvaluationPack(pk, req); err != nil {
213-
panic(err)
214-
}
236+
err = submitEvaluationPack(pk, req)
237+
require.NoError(t, err)
215238

216239
fmt.Println("Test done.")
217240
}

0 commit comments

Comments
 (0)