Skip to content

Commit ba9dcdc

Browse files
thep2pgomishajordanschalmsynzhu
authored
[BFT Testing] Integrating BFT testing framework with testnet (onflow#2308)
* refactors execution node main file * fixes lint * updating verification node config (WIP) * fixes the lints * fixes the lints * fixes the lint * moves verification and execution builders into separate files * go mod tidy * moves cmd path to makefile * backports master * [BFT Testing] Overriding network component functionality (onflow#2316) * adds overridemodule * adds override component * decouples middleware and network builders * adds corrupted builder * fixes integration tests failing * makes conduit factory overridable * refactors scaffold * adds an interface * fixes imports * replaces vn * replaces scaffold * decouples conduit factory * refactors back verification node builder * cleans up and adds tests * added Makefile targets for building corrupted verfication, execution nodes * added integration-test-bft target for running BFT integration tests separately from other integration tests * renamed verifcation_build.go to verfication_builder.go * added explanation for Corrupted field in ContainerConfig Co-authored-by: Jordan Schalm <[email protected]> * removed receipts storage.ExecutionReceipts as part of state.NewExecutionState() - before merging master into branch * added clarification for why worker added when building default conduit factory * Minor comment update for cmd/scaffold.go * refactors component manager in default conduit factory Co-authored-by: Misha <[email protected]> Co-authored-by: Jordan Schalm <[email protected]> Co-authored-by: Simon Zhu <[email protected]>
1 parent 0b8d083 commit ba9dcdc

File tree

16 files changed

+1721
-1347
lines changed

16 files changed

+1721
-1347
lines changed

Makefile

Lines changed: 39 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
# The short Git commit hash
32
SHORT_COMMIT := $(shell git rev-parse --short HEAD)
43
# The Git commit hash
@@ -90,6 +89,10 @@ test: generate-mocks emulator-build unittest
9089
integration-test: docker-build-flow
9190
$(MAKE) -C integration integration-test
9291

92+
# separate integration tests for BFT because they will currently always fail if they're added to regular CI
93+
.PHONY: integration-test-bft
94+
integration-test-bft: docker-build-flow docker-build-flow-corrupted
95+
9396
.PHONY: benchmark
9497
benchmark: docker-build-flow
9598
$(MAKE) -C integration benchmark
@@ -220,82 +223,96 @@ docker-ci-integration:
220223

221224
.PHONY: docker-build-collection
222225
docker-build-collection:
223-
docker build -f cmd/Dockerfile --build-arg TARGET=collection --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
226+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
224227
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
225228
-t "$(CONTAINER_REGISTRY)/collection:latest" -t "$(CONTAINER_REGISTRY)/collection:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/collection:$(IMAGE_TAG)" .
226229

227230
.PHONY: docker-build-collection-debug
228231
docker-build-collection-debug:
229-
docker build -f cmd/Dockerfile --build-arg TARGET=collection --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
232+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/collection --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
230233
-t "$(CONTAINER_REGISTRY)/collection-debug:latest" -t "$(CONTAINER_REGISTRY)/collection-debug:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/collection-debug:$(IMAGE_TAG)" .
231234

232235
.PHONY: docker-build-consensus
233236
docker-build-consensus:
234-
docker build -f cmd/Dockerfile --build-arg TARGET=consensus --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
237+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
235238
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
236239
-t "$(CONTAINER_REGISTRY)/consensus:latest" -t "$(CONTAINER_REGISTRY)/consensus:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/consensus:$(IMAGE_TAG)" .
237240

238241
.PHONY: docker-build-consensus-debug
239242
docker-build-consensus-debug:
240-
docker build -f cmd/Dockerfile --build-arg TARGET=consensus --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
243+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/consensus --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
241244
-t "$(CONTAINER_REGISTRY)/consensus-debug:latest" -t "$(CONTAINER_REGISTRY)/consensus-debug:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/consensus-debug:$(IMAGE_TAG)" .
242245

243246
.PHONY: docker-build-execution
244247
docker-build-execution:
245-
docker build -f cmd/Dockerfile --build-arg TARGET=execution --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
248+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
246249
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
247250
-t "$(CONTAINER_REGISTRY)/execution:latest" -t "$(CONTAINER_REGISTRY)/execution:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/execution:$(IMAGE_TAG)" .
248251

249252
.PHONY: docker-build-execution-debug
250253
docker-build-execution-debug:
251-
docker build -f cmd/Dockerfile --build-arg TARGET=execution --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
254+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/execution --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
252255
-t "$(CONTAINER_REGISTRY)/execution-debug:latest" -t "$(CONTAINER_REGISTRY)/execution-debug:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/execution-debug:$(IMAGE_TAG)" .
253256

257+
# build corrupted execution node for BFT testing
258+
.PHONY: docker-build-execution-corrupted
259+
docker-build-execution-corrupted:
260+
docker build -f cmd/Dockerfile --build-arg TARGET=./insecure/cmd/execution --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
261+
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
262+
-t "$(CONTAINER_REGISTRY)/execution-corrupted:latest" -t "$(CONTAINER_REGISTRY)/execution-corrupted:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/execution-corrupted:$(IMAGE_TAG)" .
263+
254264
.PHONY: docker-build-verification
255265
docker-build-verification:
256-
docker build -f cmd/Dockerfile --build-arg TARGET=verification --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
266+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
257267
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
258268
-t "$(CONTAINER_REGISTRY)/verification:latest" -t "$(CONTAINER_REGISTRY)/verification:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/verification:$(IMAGE_TAG)" .
259269

260270
.PHONY: docker-build-verification-debug
261271
docker-build-verification-debug:
262-
docker build -f cmd/Dockerfile --build-arg TARGET=verification --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
272+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/verification --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
263273
-t "$(CONTAINER_REGISTRY)/verification-debug:latest" -t "$(CONTAINER_REGISTRY)/verification-debug:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/verification-debug:$(IMAGE_TAG)" .
264274

275+
# build corrupted verification node for BFT testing
276+
.PHONY: docker-build-verification-corrupted
277+
docker-build-verification-corrupted:
278+
docker build -f cmd/Dockerfile --build-arg TARGET=./insecure/cmd/verification --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
279+
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
280+
-t "$(CONTAINER_REGISTRY)/verification-corrupted:latest" -t "$(CONTAINER_REGISTRY)/verification-corrupted:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/verification-corrupted:$(IMAGE_TAG)" .
281+
265282
.PHONY: docker-build-access
266283
docker-build-access:
267-
docker build -f cmd/Dockerfile --build-arg TARGET=access --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
284+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
268285
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
269286
-t "$(CONTAINER_REGISTRY)/access:latest" -t "$(CONTAINER_REGISTRY)/access:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/access:$(IMAGE_TAG)" .
270287

271288
.PHONY: docker-build-access-debug
272289
docker-build-access-debug:
273-
docker build -f cmd/Dockerfile --build-arg TARGET=access --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
290+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
274291
-t "$(CONTAINER_REGISTRY)/access-debug:latest" -t "$(CONTAINER_REGISTRY)/access-debug:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/access-debug:$(IMAGE_TAG)" .
275292

276293
# Observer is currently simply access node, this target is added for compatibility with deployment pipeline
277294
# Once proper observer is separated in the code, we should just need to change TARGET parameter below
278295
.PHONY: docker-build-observer
279296
docker-build-observer:
280-
docker build -f cmd/Dockerfile --build-arg TARGET=access --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
297+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/access --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
281298
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
282299
-t "$(CONTAINER_REGISTRY)/observer:latest" -t "$(CONTAINER_REGISTRY)/observer:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/observer:$(IMAGE_TAG)" .
283300

284301

285302
.PHONY: docker-build-ghost
286303
docker-build-ghost:
287-
docker build -f cmd/Dockerfile --build-arg TARGET=ghost --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
304+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/ghost --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target production \
288305
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
289306
-t "$(CONTAINER_REGISTRY)/ghost:latest" -t "$(CONTAINER_REGISTRY)/ghost:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/ghost:$(IMAGE_TAG)" .
290307

291308
.PHONY: docker-build-ghost-debug
292309
docker-build-ghost-debug:
293-
docker build -f cmd/Dockerfile --build-arg TARGET=ghost --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
310+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/ghost --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(IMAGE_TAG) --build-arg GOARCH=$(GOARCH) --target debug \
294311
-t "$(CONTAINER_REGISTRY)/ghost-debug:latest" -t "$(CONTAINER_REGISTRY)/ghost-debug:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/ghost-debug:$(IMAGE_TAG)" .
295312

296313
PHONY: docker-build-bootstrap
297314
docker-build-bootstrap:
298-
docker build -f cmd/Dockerfile --build-arg TARGET=bootstrap --build-arg GOARCH=$(GOARCH) --target production \
315+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/bootstrap --build-arg GOARCH=$(GOARCH) --target production \
299316
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
300317
-t "$(CONTAINER_REGISTRY)/bootstrap:latest" -t "$(CONTAINER_REGISTRY)/bootstrap:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/bootstrap:$(IMAGE_TAG)" .
301318

@@ -305,7 +322,7 @@ tool-bootstrap: docker-build-bootstrap
305322

306323
.PHONY: docker-build-bootstrap-transit
307324
docker-build-bootstrap-transit:
308-
docker build -f cmd/Dockerfile --build-arg TARGET=bootstrap/transit --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(VERSION) --build-arg GOARCH=$(GOARCH) --no-cache \
325+
docker build -f cmd/Dockerfile --build-arg TARGET=./cmd/bootstrap/transit --build-arg COMMIT=$(COMMIT) --build-arg VERSION=$(VERSION) --build-arg GOARCH=$(GOARCH) --no-cache \
309326
--target production \
310327
-t "$(CONTAINER_REGISTRY)/bootstrap-transit:latest" -t "$(CONTAINER_REGISTRY)/bootstrap-transit:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/bootstrap-transit:$(IMAGE_TAG)" .
311328

@@ -315,13 +332,16 @@ tool-transit: docker-build-bootstrap-transit
315332

316333
.PHONY: docker-build-loader
317334
docker-build-loader:
318-
docker build -f ./integration/loader/Dockerfile --build-arg TARGET=loader --target production \
335+
docker build -f ./integration/loader/Dockerfile --build-arg TARGET=./cmd/loader --target production \
319336
--label "git_commit=${COMMIT}" --label "git_tag=${IMAGE_TAG}" \
320337
-t "$(CONTAINER_REGISTRY)/loader:latest" -t "$(CONTAINER_REGISTRY)/loader:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/loader:$(IMAGE_TAG)" .
321338

322339
.PHONY: docker-build-flow
323340
docker-build-flow: docker-build-collection docker-build-consensus docker-build-execution docker-build-verification docker-build-access docker-build-observer docker-build-ghost
324341

342+
.PHONY: docker-build-flow-corrupted
343+
docker-build-flow-corrupted: docker-build-execution-corrupted docker-build-verification-corrupted
344+
325345
.PHONY: docker-build-benchnet
326346
docker-build-benchnet: docker-build-flow docker-build-loader
327347

@@ -438,7 +458,7 @@ docker-all-tools: tool-util tool-remove-execution-fork
438458

439459
PHONY: docker-build-util
440460
docker-build-util:
441-
docker build -f cmd/Dockerfile --ssh default --build-arg TARGET=util --build-arg GOARCH=$(GOARCH) --target production \
461+
docker build -f cmd/Dockerfile --ssh default --build-arg TARGET=./cmd/util --build-arg GOARCH=$(GOARCH) --target production \
442462
-t "$(CONTAINER_REGISTRY)/util:latest" -t "$(CONTAINER_REGISTRY)/util:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/util:$(IMAGE_TAG)" .
443463

444464
PHONY: tool-util
@@ -447,7 +467,7 @@ tool-util: docker-build-util
447467

448468
PHONY: docker-build-remove-execution-fork
449469
docker-build-remove-execution-fork:
450-
docker build -f cmd/Dockerfile --ssh default --build-arg TARGET=util/cmd/remove-execution-fork --build-arg GOARCH=$(GOARCH) --target production \
470+
docker build -f cmd/Dockerfile --ssh default --build-arg TARGET=./cmd/util/cmd/remove-execution-fork --build-arg GOARCH=$(GOARCH) --target production \
451471
-t "$(CONTAINER_REGISTRY)/remove-execution-fork:latest" -t "$(CONTAINER_REGISTRY)/remove-execution-fork:$(SHORT_COMMIT)" -t "$(CONTAINER_REGISTRY)/remove-execution-fork:$(IMAGE_TAG)" .
452472

453473
PHONY: tool-remove-execution-fork

cmd/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
3232
--mount=type=cache,target=/root/.cache/go-build \
3333
GO111MODULE=on CGO_ENABLED=1 GOOS=linux go build --tags "relic,netgo" -ldflags "-extldflags -static \
3434
-X 'github.com/onflow/flow-go/cmd/build.commit=${COMMIT}' -X 'github.com/onflow/flow-go/cmd/build.semver=${VERSION}'" \
35-
-o ./app ./cmd/${TARGET}
35+
-o ./app ${TARGET}
3636

3737
RUN chmod a+x /app/app
3838

@@ -52,7 +52,7 @@ RUN --mount=type=ssh \
5252
--mount=type=cache,target=/root/.cache/go-build \
5353
GO111MODULE=on CGO_ENABLED=1 GOOS=linux go build --tags "relic,netgo" -ldflags "-extldflags -static \
5454
-X 'github.com/onflow/flow-go/cmd/build.commit=${COMMIT}' -X 'github.com/onflow/flow-go/cmd/build.semver=${VERSION}'" \
55-
-gcflags="all=-N -l" -o ./app ./cmd/${TARGET}
55+
-gcflags="all=-N -l" -o ./app ${TARGET}
5656

5757
RUN chmod a+x /app/app
5858

0 commit comments

Comments
 (0)