@@ -8,23 +8,26 @@ package test
88
99import (
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
2630func 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
5962func 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) {
148150const networkID = "mytestnetwork"
149151
150152func 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