@@ -8,24 +8,33 @@ 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
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
5968func 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) {
148156const networkID = "mytestnetwork"
149157
150158func 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