diff options
| author | Jeff Carr <[email protected]> | 2025-10-19 02:55:45 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-19 02:55:45 -0500 |
| commit | f9a62d1c3aeb9e99214cc16a664705d9a517fac3 (patch) | |
| tree | c0c2dc5199b9388669f6509419a0b93ae054b371 /doTest.go | |
| parent | 3a7d5a176350447cf568d9fbc7ea804895549968 (diff) | |
make doTestVersion()
Diffstat (limited to 'doTest.go')
| -rw-r--r-- | doTest.go | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/doTest.go b/doTest.go new file mode 100644 index 0000000..01f7caa --- /dev/null +++ b/doTest.go @@ -0,0 +1,115 @@ +// 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 err error + + if argv.Test.Version != nil { + var data []byte + 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 + } + var broken string + for _, line := range strings.Split(string(data), "\n") { + line := strings.TrimSpace(line) + if line == "" { + continue + } + parts := strings.Fields(line) + cmdname := parts[len(parts)-1] + log.Info("LINE=", cmdname) + r := shell.Run([]string{cmdname, "--version"}) + if r.Error != nil { + return cmdname + " version test failed", r.Error + } + if len(r.Stdout) != 1 { + for _, line := range r.Stderr { + log.Info("STDERR:", line) + } + for _, line := range r.Stdout { + log.Info("STDOUT:", line) + } + broken += cmdname + " " + } + } + if broken != "" { + return "version tests failed", errors.New(broken) + } + 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) + } + // 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) + } + // probably okay + return nil + } + return versionStderr(cmdname, &r) +} |
