summaryrefslogtreecommitdiff
path: root/doTest.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-10-19 02:55:45 -0500
committerJeff Carr <[email protected]>2025-10-19 02:55:45 -0500
commitf9a62d1c3aeb9e99214cc16a664705d9a517fac3 (patch)
treec0c2dc5199b9388669f6509419a0b93ae054b371 /doTest.go
parent3a7d5a176350447cf568d9fbc7ea804895549968 (diff)
make doTestVersion()
Diffstat (limited to 'doTest.go')
-rw-r--r--doTest.go115
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)
+}