Skip to content

Commit b1f8a47

Browse files
committed
fixed tests
1 parent 531bafb commit b1f8a47

6 files changed

Lines changed: 109 additions & 48 deletions

File tree

main_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ func RemoveAll(dir string) error {
7373
}
7474

7575
func TestMain(m *testing.M) {
76-
//debugging = true
77-
//tracing = true
76+
debugging = true
77+
tracing = true
7878
wd, _ := os.Getwd()
7979
workDir, _ = filepath.Abs(wd)
8080
homeDir, _ = homedir.Dir()

ops.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,6 @@ func Ops(base string, args []string) error {
209209
// go down using args as subcommands
210210
err := os.Chdir(base)
211211
debug("Ops chdir", base)
212-
213212
if err != nil {
214213
return err
215214
}
@@ -218,6 +217,7 @@ func Ops(base string, args []string) error {
218217
isSubCmd := false
219218

220219
err = ensurePrereq(base)
220+
debug("Ops ensurePrereq", err)
221221
if err != nil {
222222
fmt.Println("ERROR: cannot ensure prerequisites: " + err.Error())
223223
os.Exit(1)

ops_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,35 @@ import (
2727
"golang.org/x/exp/slices"
2828
)
2929

30+
func Example_opsArg1() {
31+
// test
32+
_ = os.Chdir(workDir)
33+
olaris, _ := filepath.Abs(joinpath("tests", "olaris"))
34+
err := Ops(olaris, split("testcmd"))
35+
fmt.Println(err)
36+
// Output:
37+
// -
38+
39+
/*
40+
pr(2, err)
41+
err = Ops(olaris, split("testcmd arg"))
42+
pr(3, err)
43+
err = Ops(olaris, split("testcmd arg VAR=1"))
44+
pr(4, err)
45+
err = Ops(olaris, split("testcmd VAR=1 arg"))
46+
pr(5, err)
47+
// Output:
48+
// (olaris) task [-t opsfile.yml testcmd --]
49+
// 2 <nil>
50+
// (olaris) task [-t opsfile.yml testcmd -- arg]
51+
// 3 <nil>
52+
// (olaris) task [-t opsfile.yml testcmd VAR=1 -- arg]
53+
// 4 <nil>
54+
// (olaris) task [-t opsfile.yml testcmd VAR=1 -- arg]
55+
//5 <nil>
56+
*/
57+
}
58+
3059
func Example_opsArg() {
3160
// test
3261
_ = os.Chdir(workDir)

prereq.go

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,6 @@ import (
3131

3232
var PrereqSeenMap = map[string]string{}
3333

34-
// Define the Go structs
35-
type Prereq struct {
36-
Version int `yaml:"version"`
37-
Tasks map[string]PrereqTask `yaml:"tasks"`
38-
}
39-
40-
type PrereqTask struct {
41-
Description *string `yaml:"description,omitempty"` // Make description optional
42-
Vars map[string]string `yaml:"vars,omitempty"`
43-
}
44-
4534
// execute prereq task
4635
func execPrereqTask(bindir string, name string) error {
4736
me, err := os.Executable()
@@ -67,25 +56,65 @@ func execPrereqTask(bindir string, name string) error {
6756
}
6857

6958
// load prerequisites in current dir
70-
func loadPrereq(dir string) (Prereq, error) {
71-
var prereq Prereq = Prereq{}
59+
func loadPrereq(dir string) (tasks []string, versions []string, err error) {
60+
err = nil
61+
tasks = []string{}
62+
versions = []string{}
7263

7364
if !exists(dir, PREREQ) {
74-
return prereq, fmt.Errorf("not found %s", dir)
65+
return
7566
}
7667
trace("found prereq.yml in ", dir)
7768

78-
dat, err := os.ReadFile(joinpath(dir, PREREQ))
69+
data, err := os.ReadFile(joinpath(dir, PREREQ))
7970
if err != nil {
80-
return prereq, err
71+
return
8172
}
8273

83-
err = yaml.Unmarshal(dat, &prereq)
84-
if err != nil {
85-
return prereq, err
74+
/*
75+
You have tasks = []strings and versions = []strings
76+
and dat a string with a YAML in format:
77+
```yaml
78+
something:
79+
tasks:
80+
task:
81+
vars:
82+
VERSION: "123"
83+
anothertask:
84+
```
85+
I want to parse the file, find the entries under `tasks` vith a var with VERSION
86+
and append, in order, to tasks the name of the task
87+
and to version the version found
88+
I have to skip the entries without a version and everyhing not in tasks
89+
I wnato just the plain code no procedures
90+
*/
91+
var root yaml.Node
92+
if err = yaml.Unmarshal([]byte(data), &root); err != nil {
93+
return
8694
}
8795

88-
return prereq, err
96+
for i := 0; i < len(root.Content[0].Content); i += 2 {
97+
if root.Content[0].Content[i].Value == "tasks" {
98+
tasksNode := root.Content[0].Content[i+1]
99+
for j := 0; j < len(tasksNode.Content); j += 2 {
100+
taskName := tasksNode.Content[j].Value
101+
taskVars := tasksNode.Content[j+1]
102+
for k := 0; k < len(taskVars.Content); k += 2 {
103+
if taskVars.Content[k].Value == "vars" {
104+
varsNode := taskVars.Content[k+1]
105+
for l := 0; l < len(varsNode.Content); l += 2 {
106+
if varsNode.Content[l].Value == "VERSION" {
107+
version := varsNode.Content[l+1].Value
108+
tasks = append(tasks, taskName)
109+
versions = append(versions, version)
110+
}
111+
}
112+
}
113+
}
114+
}
115+
}
116+
}
117+
return
89118
}
90119

91120
func binDir() (string, error) {
@@ -158,16 +187,11 @@ func touchAndClean(dir string, name string, version string) error {
158187
}
159188

160189
// download a prerequisite
161-
func downloadPrereq(name string, task PrereqTask) error {
190+
func downloadPrereq(name string, version string) error {
162191

163192
// names and version
164193
// xname = executeable name
165194
// vname = versioned executable name
166-
version, ok := task.Vars["VERSION"]
167-
if !ok {
168-
trace("return because no version for ", name)
169-
return nil
170-
}
171195
xname := addExeExt(name)
172196
vname := xname + "-" + version
173197

@@ -233,10 +257,15 @@ func ensurePrereq(root string) error {
233257
return err
234258
}
235259
trace("ensurePrereq in", root)
236-
prereq, err := loadPrereq(root)
237-
for task := range prereq.Tasks {
238-
trace("prereq", task)
239-
err = downloadPrereq(task, prereq.Tasks[task])
260+
tasks, versions, err := loadPrereq(root)
261+
if err != nil {
262+
return err
263+
}
264+
trace(tasks, versions, err)
265+
for i, task := range tasks {
266+
version := versions[i]
267+
trace("prereq", task, version)
268+
err = downloadPrereq(task, version)
240269
if err != nil {
241270
fmt.Printf("error in prereq %s: %v\n", task, err)
242271
}

prereq_test.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,18 @@ func Example_execPrereqTask() {
3232
func Example_loadPrereq() {
3333
//downloadPrereq("")
3434
dir := joinpath(workDir, "tests")
35-
_, err := loadPrereq(dir)
36-
fmt.Println(npath(err.Error()))
37-
prq, err := loadPrereq(joinpath(dir, "prereq"))
35+
t, v, err := loadPrereq(dir)
36+
fmt.Println(err, len(t), len(v))
37+
dir = joinpath(dir, "prereq")
38+
//dir = "/home/msciab/.ops/0.1.0/olaris/"
39+
tasks, versions, err := loadPrereq(dir)
3840
//fmt.Println(prq)
39-
fmt.Println(err, *prq.Tasks["bun"].Description, prq.Tasks["bun"].Vars["VERSION"])
41+
fmt.Println(err, tasks)
42+
fmt.Println(versions)
4043
// Output:
41-
// not found /work/tests
42-
// <nil> bun v1.11.20
44+
// <nil> 0 0
45+
// <nil> [bun coreutils]
46+
// [v1.11.20 0.0.27]
4347
}
4448

4549
func Example_ensureBindir() {
@@ -74,7 +78,6 @@ func Example_touchAndClean() {
7478
if err != nil {
7579
RemoveAll(bindir)
7680
}
77-
7881
bindir, _ = EnsureBindir()
7982
touch(bindir, "hello")
8083
err = touchAndClean(bindir, "hello", "1.2.3")
@@ -94,14 +97,14 @@ func Example_downloadPrereq() {
9497
PrereqSeenMap = map[string]string{}
9598

9699
prqdir := joinpath(joinpath(workDir, "tests"), "prereq")
97-
prq, _ := loadPrereq(prqdir)
98-
fmt.Println("1", downloadPrereq("bun", prq.Tasks["bun"]))
99-
fmt.Println("2", downloadPrereq("bun", prq.Tasks["bun"]))
100+
tasks, versions, _ := loadPrereq(prqdir)
101+
fmt.Println("1", downloadPrereq(tasks[0], versions[0]))
102+
fmt.Println("2", downloadPrereq(tasks[0], versions[0]))
100103

101-
prq, _ = loadPrereq(joinpath(prqdir, "sub"))
102-
//fmt.Println(prq)
104+
tasks, versions, _ = loadPrereq(joinpath(prqdir, "sub"))
105+
//fmt.Println(tasks, versions)
103106
//fmt.Println(PrereqSeenMap)
104-
fmt.Println("3", downloadPrereq("bun", prq.Tasks["bun"]))
107+
fmt.Println("3", downloadPrereq("bun", versions[0]))
105108
// Output:
106109
// downloading bun v1.11.20
107110
// 1 <nil>

tests/prereq_yml.bats

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,15 @@ setup() {
2424
export COUNT=1
2525
}
2626

27-
@test "OS=linux ARCH=amd64" {
27+
@test "OS=linux ARCH=amd64" {
2828
OS=linux ARCH=amd64
2929
mkdir -p _bin/$OS-$ARCH
3030
run env __OS=$OS __ARCH=$ARCH task -t prereq/olaris/prereq.yml -d _bin/$OS-$ARCH all
3131
find _bin/$OS-$ARCH -type f | xargs file | grep ELF | grep x86-64 | wc -l | xargs | tee _count
3232
assert_equal "$(cat _count)" $COUNT
3333
}
3434

35-
@test "OS=linux ARCH=arm64" {
35+
@test "OS=linux ARCH=arm64" {
3636
OS=linux ARCH=arm64
3737
mkdir -p _bin/$OS-$ARCH
3838
run env __OS=$OS __ARCH=$ARCH task -t prereq/olaris/prereq.yml -d _bin/$OS-$ARCH all

0 commit comments

Comments
 (0)