Fix failure when student added new package with tests

This commit is contained in:
Fedor Korotkiy 2023-03-12 17:25:51 +04:00
parent 8eccf2d194
commit b39f28cd3d
2 changed files with 46 additions and 8 deletions

View file

@ -243,8 +243,18 @@ func runTests(testDir, privateRepo, problem string) error {
raceBinaries = make(map[string]string) raceBinaries = make(map[string]string)
) )
coverageReq := getCoverageRequirements(path.Join(privateRepo, problem))
if coverageReq.Enabled {
log.Printf("required coverage: %.2f%%", coverageReq.Percent)
}
testListDir := testDir
if !coverageReq.Enabled {
testListDir = privateRepo
}
//binPkgs, testPkgs := listTestsAndBinaries(filepath.Join(testDir, problem), []string{"-tags", "private", "-mod", "readonly"}) // todo return readonly //binPkgs, testPkgs := listTestsAndBinaries(filepath.Join(testDir, problem), []string{"-tags", "private", "-mod", "readonly"}) // todo return readonly
binPkgs, testPkgs := listTestsAndBinaries(filepath.Join(testDir, problem), []string{"-tags", "private"}) binPkgs, testPkgs := listTestsAndBinaries(filepath.Join(testListDir, problem), []string{"-tags", "private"})
for binaryPkg := range binPkgs { for binaryPkg := range binPkgs {
binPath := filepath.Join(binCache, randomName()) binPath := filepath.Join(binCache, randomName())
binaries[binaryPkg] = binPath binaries[binaryPkg] = binPath
@ -254,11 +264,6 @@ func runTests(testDir, privateRepo, problem string) error {
} }
} }
coverageReq := getCoverageRequirements(path.Join(privateRepo, problem))
if coverageReq.Enabled {
log.Printf("required coverage: %.2f%%", coverageReq.Percent)
}
binariesJSON, _ := json.Marshal(binaries) binariesJSON, _ := json.Marshal(binaries)
for testPkg := range testPkgs { for testPkg := range testPkgs {

View file

@ -1,8 +1,12 @@
package commands package commands
import ( import (
"bufio"
"errors" "errors"
"fmt"
"io"
"io/ioutil" "io/ioutil"
"os"
"path" "path"
"path/filepath" "path/filepath"
"testing" "testing"
@ -27,6 +31,35 @@ func listDirs(dir string) ([]string, error) {
return dirs, nil return dirs, nil
} }
func doTestSubmission(t *testing.T, studentRepo, privateRepo, problem string) error {
annotate := func(prefix string, f **os.File) func() {
pr, pw, err := os.Pipe()
require.NoError(t, err)
oldF := *f
*f = pw
go func() {
s := bufio.NewScanner(pr)
for s.Scan() {
io.WriteString(oldF, fmt.Sprintf("%s%s\n", prefix, s.Text()))
}
}()
return func() {
pw.Close()
*f = oldF
}
}
t.Logf("=== testing started ===")
defer annotate(">>> STDOUT >>>", &os.Stdout)()
defer annotate(">>> STDERR >>>", &os.Stderr)()
defer t.Logf("=== testing finished ===")
return testSubmission(studentRepo, privateRepo, problem)
}
func Test_testSubmission_correct(t *testing.T) { func Test_testSubmission_correct(t *testing.T) {
testDirs, err := listDirs("../testdata/submissions/correct") testDirs, err := listDirs("../testdata/submissions/correct")
require.NoError(t, err) require.NoError(t, err)
@ -39,7 +72,7 @@ func Test_testSubmission_correct(t *testing.T) {
studentRepo := path.Join(absDir, "student") studentRepo := path.Join(absDir, "student")
privateRepo := path.Join(absDir, "private") privateRepo := path.Join(absDir, "private")
require.NoError(t, testSubmission(studentRepo, privateRepo, problem)) require.NoError(t, doTestSubmission(t, studentRepo, privateRepo, problem))
}) })
} }
} }
@ -57,7 +90,7 @@ func Test_testSubmission_incorrect(t *testing.T) {
studentRepo := path.Join(absDir, "student") studentRepo := path.Join(absDir, "student")
privateRepo := path.Join(absDir, "private") privateRepo := path.Join(absDir, "private")
err := testSubmission(studentRepo, privateRepo, problem) err := doTestSubmission(t, studentRepo, privateRepo, problem)
require.Error(t, err) require.Error(t, err)
if problem == "brokentest" { if problem == "brokentest" {