// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "errors" "strings" "github.com/go-cmd/cmd" "go.wit.com/lib/config" "go.wit.com/lib/gui/shell" "go.wit.com/log" ) func doTest() (string, error) { var s string var allerr error initForge() if argv.Test.Version != nil { data, err := resources.ReadFile("resources/TESTVERSION") if err != nil { s = "open repomap failed" log.Info(s, err) return s, err } if len(data) == 0 { s = "resources/repomap is empty" log.Info(s, err) return s, config.ErrEmpty } for _, line := range strings.Split(string(data), "\n") { line := strings.TrimSpace(line) if line == "" { continue } parts := strings.Fields(line) cmdname := parts[len(parts)-1] if argv.Test.Copy { // find cmdname repo for repo := range me.forge.IterByMode() { if !strings.HasPrefix(repo.Namespace, "go.wit.com") { continue } if !strings.HasSuffix(repo.Namespace, cmdname) { continue } if cmdname == "forge" { continue } if cmdname == "autogenpb" { continue } cmd := []string{"cp", "-f", "argv.template.go", repo.FullPath + "/"} shell.RunVerbose(cmd) } continue } if argv.Test.Version != nil { // log.Info("LINE=", cmdname) allerr = errors.Join(allerr, doTestVersion(cmdname)) } } if allerr != nil { log.Printf("ALLERR=(%v)\n", allerr) return "version tests failed", allerr } return "all version tests passed", nil } return "nothing tested", nil } func versionStderr(cmdname string, r *cmd.Status) error { stderr := errors.New(cmdname + " version test broken") for _, line := range r.Stderr { log.Info("STDERR:", line) } for _, line := range r.Stdout { log.Info("STDOUT:", line) } if r.Error != nil { return errors.Join(stderr, r.Error) } if r.Exit == 0 { return errors.Join(stderr, errors.New("exit -1")) } return stderr } func doTestVersion(cmdname string) error { r := shell.Run([]string{cmdname, "--version"}) if r.Exit != 0 { return versionStderr(cmdname, &r) } if r.Error != nil { return versionStderr(cmdname, &r) } if len(r.Stdout) == 0 { return versionStderr(cmdname, &r) } if len(r.Stdout) == 1 { line := r.Stdout[0] if !strings.HasPrefix(line, cmdname) { return versionStderr(cmdname, &r) } log.Info(line) // probably okay return nil } if len(r.Stdout) == 2 { line := r.Stdout[0] if !strings.HasPrefix(line, "APPNAME=") { return versionStderr(cmdname, &r) } line = r.Stdout[1] if !strings.HasPrefix(line, cmdname) { return versionStderr(cmdname, &r) } log.Info(line) // probably okay return nil } return versionStderr(cmdname, &r) }