# Generally, JUNIT_FILE is set in CI but may be specified to an arbitrary file location to emulate CI locally
# If JUNIT_FILE is set, JSON_LOG_FILE should also be set
ifdef JUNIT_FILE
	go_test = OP_TESTLOG_DISABLE_COLOR=true OP_E2E_DISABLE_PARALLEL=false gotestsum --format=testname --junitfile=$(JUNIT_FILE) --jsonfile=$(JSON_LOG_FILE) -- -failfast
  # Note: -parallel must be set to match the number of cores in the resource class
	go_test_flags = -timeout=60m -parallel=8
else
	go_test = go test
	go_test_flags = -v
endif

test: pre-test test-ws
.PHONY: test

test-external-%: pre-test
	make -C ./external_$*/
	$(go_test) $(go_test_flags) --externalL2 ./external_$*/

test-ws: pre-test
	$(go_test) $(go_test_flags) . ./e2eutils/...
.PHONY: test-ws

test-actions: pre-test
	$(go_test) $(go_test_flags) ./actions
.PHONY: test-actions

test-http: pre-test
	OP_E2E_USE_HTTP=true $(go_test) $(go_test_flags) . ./e2eutils/...
.PHONY: test-http

test-cannon: pre-test
	OP_E2E_CANNON_ENABLED=true $(go_test) $(go_test_flags) ./faultproofs
.PHONY: test-cannon

test-fault-proofs: pre-test
	$(go_test) $(go_test_flags) ./faultproofs
.PHONY: test-faultproofs

test-devnet: pre-test
	$(go_test) $(go_test_flags) ./devnet
.PHONY: test-devnet

cannon-prestate:
	make -C .. cannon-prestate
.PHONY: cannon-prestate

# We depend on the absolute pre-state generated by cannon to deploy the dispute game contracts.
devnet-allocs: pre-test-cannon
	make -C .. devnet-allocs
.PHONY: devnet-allocs

pre-test: pre-test-cannon pre-test-allocs
.PHONY: pre-test

pre-test-cannon:
	@if [ ! -e ../op-program/bin ]; then \
		make cannon-prestate; \
	fi
.PHONY: pre-test-cannon

pre-test-allocs:
	@if [ ! -e ../.devnet ]; then \
		make devnet-allocs; \
	fi
.PHONY: pre-test-allocs

clean:
	rm -r ../.devnet
	rm -r ../op-program/bin
.PHONY: clean

fuzz:
	go test -run NOTAREALTEST -v -fuzztime 10s -fuzz FuzzFjordCostFunction ./
	go test -run NOTAREALTEST -v -fuzztime 10s -fuzz FuzzFastLzGethSolidity ./
	go test -run NOTAREALTEST -v -fuzztime 10s -fuzz FuzzFastLzCgo ./

