# Test that the go command does not panic if it tries to read
# a file from the cache that has an index entry, but is missing
# an entry for the output. This test creates that situation by
# running a go list (creating index and output cache entries for
# the module index) and then removing just the output entries.

[short] skip 'runs go build'

go build -o roe$GOEXE ./remove_output_entries.go

# populate new cache
env GOCACHE=$WORK/newcache
go list runtime

# remove output entries and check the panic doesn't happen
exec ./roe$GOEXE $WORK/newcache
go list runtime

-- remove_output_entries.go --
package main

import (
	"io/fs"
	"log"
	"os"
	"path/filepath"
	"strings"
)

func main() {
	cachedir := os.Args[1]
	err := filepath.WalkDir(cachedir, func(path string, d fs.DirEntry, err error) error {
		if strings.HasSuffix(path, "-d") { // output entries end in "-d"
			if err := os.RemoveAll(path); err != nil {
				return err
			}
		}
		return nil
	})
	if err != nil {
		log.Fatal(err)
	}
}