acab911351
In order to extract the PNG files produced by our CanvasKit gms, we need our JS tests to POST them to a server which can write to disk. The easiest way to do this is to use the test_on_env rule defined in the Skia Infra repo for exactly this purpose. This required https://skia-review.googlesource.com/c/buildbot/+/510717 to be able to configure the binary correctly and https://skia-review.googlesource.com/c/buildbot/+/511862, for nicer debugging so the skia-infra dep was updated via the following commands: $ go get go.skia.org/infra@d8a552a29e $ go mod download $ make -C infra/bots train $ make -C bazel gazelle_update_repo This caused many automated changes to infra/bots/tasks.json The flow is: 1. User types bazelisk test :hello_world_test_with_env 2. The test_on_env rule starts gold_test_env and waits for the file defined in $ENV_READY_FILE to be created. 3. gold_test_env starts a web server on a random port. It writes this port number to $ENV_DIR/port. Then, it creates $ENV_READY_FILE to signal ready. 4. test_on_env sees the ready file and then starts the karma_test rule. (Reminder: this is a bash script which starts karma using the Bazel-bundled chromium). 5. The karma_test rule runs the karma.bazel.js file (which has been injected with some JS code to fill in Bazel paths and settings) using Bazel-bundled node. This reads in the port file and sets up a Karma proxy to redirect /gold_rpc/report to http://localhost:PORT/report 6. The JS tests run via Karma (and do assertions via Jasmine). Some tests, the gms, make POST requests to the proxy. 7. gold_test_env gets these POST requests writes the images to a special Bazel folder on disk as defined by $TEST_UNDECLARED_OUTPUTS_DIR. 8. test_on_env identifies that the tests finish (because the karma_test script returns 0). It sends SIGINT to gold_test_env. 9. gold_test_env stops the webserver. The special Bazel folder will zip up anything inside it and make it available for future rules (e.g. a rule that will upload to Gold via goldctl). Suggested Review Order: - bazel/karma_test.bzl to see the test_on_env rule bundled into the karma_test macro. I chose to put it there because it might be confusing to have to define both a karma_test and test_on_env rule in the same package but not be able to call one because it will fail to talk to the server. - gold_test_env.go to see how the appropriate files are written to signal the environment is ready and the handlers are set up. - karma.bazel.js to see how we make our own proxy given the port from the env binary. The fact that we could not create our own proxy with the existing karma_test rule was why the chain ending in https://skia-review.googlesource.com/c/skia/+/508797 had to be abandoned. - tests/*.js to see how the environment is probed via /healthz and then used to make POST requests with data. - Everything else. Change-Id: I32a90def41796ca94cf187d640cfff8e262f85f6 BUG: skia:12541 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/510737 Reviewed-by: Leandro Lovisolo <lovisolo@google.com> |
||
---|---|---|
.. | ||
BUILD.bazel | ||
SkAnnotation.h | ||
SkBBHFactory.h | ||
SkBitmap.h | ||
SkBlender.h | ||
SkBlendMode.h | ||
SkBlurTypes.h | ||
SkCanvas.h | ||
SkCanvasVirtualEnforcer.h | ||
SkClipOp.h | ||
SkColor.h | ||
SkColorFilter.h | ||
SkColorPriv.h | ||
SkColorSpace.h | ||
SkContourMeasure.h | ||
SkCoverageMode.h | ||
SkCubicMap.h | ||
SkCustomMesh.h | ||
SkData.h | ||
SkDataTable.h | ||
SkDeferredDisplayList.h | ||
SkDeferredDisplayListRecorder.h | ||
SkDocument.h | ||
SkDrawable.h | ||
SkDrawLooper.h | ||
SkEncodedImageFormat.h | ||
SkExecutor.h | ||
SkFlattenable.h | ||
SkFont.h | ||
SkFontArguments.h | ||
SkFontMetrics.h | ||
SkFontMgr.h | ||
SkFontParameters.h | ||
SkFontStyle.h | ||
SkFontTypes.h | ||
SkGraphics.h | ||
SkICC.h | ||
SkImage.h | ||
SkImageEncoder.h | ||
SkImageFilter.h | ||
SkImageGenerator.h | ||
SkImageInfo.h | ||
SkM44.h | ||
SkMallocPixelRef.h | ||
SkMaskFilter.h | ||
SkMath.h | ||
SkMatrix.h | ||
SkMilestone.h | ||
SkOverdrawCanvas.h | ||
SkPaint.h | ||
SkPath.h | ||
SkPathBuilder.h | ||
SkPathEffect.h | ||
SkPathMeasure.h | ||
SkPathTypes.h | ||
SkPicture.h | ||
SkPictureRecorder.h | ||
SkPixelRef.h | ||
SkPixmap.h | ||
SkPngChunkReader.h | ||
SkPoint3.h | ||
SkPoint.h | ||
SkPromiseImageTexture.h | ||
SkRasterHandleAllocator.h | ||
SkRect.h | ||
SkRefCnt.h | ||
SkRegion.h | ||
SkRRect.h | ||
SkRSXform.h | ||
SkSamplingOptions.h | ||
SkScalar.h | ||
SkSerialProcs.h | ||
SkShader.h | ||
SkSize.h | ||
SkSpan.h | ||
SkStream.h | ||
SkString.h | ||
SkStrokeRec.h | ||
SkSurface.h | ||
SkSurfaceCharacterization.h | ||
SkSurfaceProps.h | ||
SkSwizzle.h | ||
SkTextBlob.h | ||
SkTileMode.h | ||
SkTime.h | ||
SkTraceMemoryDump.h | ||
SkTypeface.h | ||
SkTypes.h | ||
SkUnPreMultiply.h | ||
SkVertices.h | ||
SkYUVAInfo.h | ||
SkYUVAPixmaps.h |