Skip to content

Commit 4d695cc

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

File tree

10 files changed

+309
-398
lines changed

10 files changed

+309
-398
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: 72 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,26 @@ 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

2630
func requestAttestation() ([]byte, error) {
27-
2831
resp, err := http.Get("http://localhost:5000/attestation")
2932
if err != nil {
3033
return nil, err
@@ -57,7 +60,6 @@ func requestAttestation() ([]byte, error) {
5760
}
5861

5962
func submitEvaluationPack(pk []byte, req *pb.RegisterDataRequest) error {
60-
6163
epm := &pb.EvaluationPackMessage{}
6264
epm.RegisteredData = []*pb.RegisterDataRequest{req}
6365

@@ -134,7 +136,7 @@ func upload() (*pb.RegisterDataRequest, error) {
134136
PublicKey: []byte("some verification key"),
135137
}
136138

137-
//build request
139+
// build request
138140
registerDataRequest := &pb.RegisterDataRequest{
139141
Participant: &userIdentity,
140142
DecryptionKey: sk,
@@ -148,70 +150,77 @@ func upload() (*pb.RegisterDataRequest, error) {
148150
const networkID = "mytestnetwork"
149151

150152
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-
}
153+
ctx := context.Background()
154+
155+
// network
156+
net, err := network.New(ctx)
157+
require.NoError(t, err)
158+
defer func() {
159+
err := net.Remove(ctx)
160+
require.NoError(t, err)
161+
}()
162+
networkName := net.Name
163+
164+
// redis
165+
redisImageName := "redis"
166+
redisExportedPort := fmt.Sprintf("%d/tcp", storage.DefaultRedisPort)
167+
redis, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
168+
ContainerRequest: testcontainers.ContainerRequest{
169+
Image: redisImageName,
170+
ExposedPorts: []string{redisExportedPort},
171+
Networks: []string{networkName},
172+
// WaitingFor: wait.ForLog("* Ready to accept connections"),
173+
WaitingFor: wait.ForExposedPort(),
174+
},
175+
Started: true,
176+
})
177+
require.NoError(t, err)
178+
defer func() {
179+
err := redis.Terminate(ctx)
180+
require.NoError(t, err)
181+
}()
182+
183+
redisHost, err := redis.Host(ctx)
184+
require.NoError(t, err)
185+
redisPort, err := redis.MappedPort(ctx, nat.Port(redisExportedPort))
186+
require.NoError(t, err)
187+
t.Logf("redisHost: %s:%s", redisHost, redisPort.Port())
188+
189+
os.Setenv("REDIS_HOST", redisHost)
190+
os.Setenv("REDIS_PORT", redisPort.Port())
191+
192+
// experiment
193+
experimentImageName := "irb-experimenter-worker"
194+
experimentPort := "5000/tcp"
195+
experiment, err := testcontainers.GenericContainer(ctx, testcontainers.GenericContainerRequest{
196+
ContainerRequest: testcontainers.ContainerRequest{
197+
Image: experimentImageName,
198+
ExposedPorts: []string{experimentPort},
199+
Networks: []string{networkName},
200+
Env: map[string]string{
201+
"REDIS_HOST": redisHost,
202+
"REDIS_PORT": redisPort.Port(),
203+
},
204+
WaitingFor: wait.ForExposedPort(),
205+
},
206+
Started: true,
207+
})
208+
require.NoError(t, err)
209+
defer func() {
210+
err := experiment.Terminate(ctx)
211+
require.NoError(t, err)
212+
}()
199213

200214
req, err := upload()
201-
if err != nil {
202-
panic(err)
203-
}
215+
require.NoError(t, err)
204216

205217
fmt.Println("Testing attestation...")
206218
pk, err := requestAttestation()
207-
if err != nil {
208-
panic(err)
209-
}
219+
require.NoError(t, err)
210220

211221
fmt.Println("Testing evaluation pack...")
212-
if err := submitEvaluationPack(pk, req); err != nil {
213-
panic(err)
214-
}
222+
err = submitEvaluationPack(pk, req)
223+
require.NoError(t, err)
215224

216225
fmt.Println("Test done.")
217226
}

0 commit comments

Comments
 (0)