blob: d424ee8706fdcf3d32802cbe73bbc5a46cbd7043 [file] [log] [blame]
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package integration_test
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
)
func TestIntegration(t *testing.T) {
dir, err := os.Getwd()
if err != nil {
t.Fatalf("failed to read current dir: %v", err)
}
// Build docker image.
// TODO(hxjiang): use Go in PATH instead of env GOVERSION. LUCI will prepare
// the Go in different version so vscode-go test don't need to worry.
dockerBuild := exec.Command("docker", "build", "-q", "-f", "./build/Dockerfile", ".")
// The docker build must be executed at the root of the vscode-go repository
// to ensure the entire repository is copied into the image.
dockerBuild.Dir = filepath.Dir(dir)
output, err := dockerBuild.Output()
if err != nil {
t.Fatalf("failed to build docker image: %v", err)
}
imageID := strings.TrimSpace(string(output))
// Cleanup the image if built successfully.
defer func() {
dockerRmi := exec.Command("docker", "rmi", "-f", imageID)
output, err := dockerRmi.CombinedOutput()
if err != nil {
t.Errorf("failed to remove image %v", imageID)
}
t.Logf("image cleanup log:\n%s\n", output)
}()
// Run tests using previous build docker image.
//
// Coloring is disabled for integration tests but preserved for manual
// triggers.
// Use "npm config set color false" to disable npm color output globally,
// and because we cannot access the Mocha command directly in this script,
// we use env "FORCE_COLOR=0" to disable its color output.
script := `set -e;
npm config set color false;
npm ci;
echo "**** Set up virtual display ****";
/usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
trap "kill \"\$(jobs -p)\"" EXIT;
export DISPLAY=:99;
sleep 3;
echo "**** Run settings generator ****";
go run ./tools/generate.go -w=false -gopls=true;
echo "**** Test build ****";
npm run compile;
echo "**** Run Go tests ****";
go test ./...;
echo "**** Run test ****";
FORCE_COLOR=0 npm run unit-test;
FORCE_COLOR=0 npm test --silent;
echo "**** Run lint ****";
npm run lint`
// For debug tests, we need ptrace.
cmd := exec.Command("docker", "run", "--cap-add", "SYS_PTRACE", "--shm-size=8G", "--workdir=/workspace/extension", "--entrypoint", "/bin/bash", imageID, "-c", script)
output, err = cmd.CombinedOutput()
t.Logf("integration test log:\n%s\n", output)
if err != nil {
t.Errorf("failed to run integration test in docker: %v", err)
}
}