1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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)
}
|