Skip to content

Commit 0d8f9de

Browse files
committed
Improves availability endpoint detection.
Improves test log output.
1 parent 4a07201 commit 0d8f9de

2 files changed

Lines changed: 39 additions & 26 deletions

File tree

cmd/test.go

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"opendeps.org/opendeps/model"
2525
"opendeps.org/opendeps/openapi"
2626
"os"
27+
"strings"
2728
)
2829

2930
var quitIfDown, stopIfDown, failOptional bool
@@ -42,30 +43,15 @@ marked as required.`,
4243
logrus.Fatal(err)
4344
}
4445

45-
logrus.Info("testing dependencies")
46-
spec := model.Parse(specFile)
47-
48-
unavailable := false
49-
for _, dep := range spec.Dependencies {
50-
err := testDependency(specFile, dep)
51-
if err != nil {
52-
if dep.Required || failOptional {
53-
logrus.Warnf("\u274C unavailable: %v: %v", dep.Summary, err)
54-
unavailable = true
55-
if stopIfDown {
56-
break
57-
}
58-
} else {
59-
logrus.Warnf("\u26A0 unavailable: %v: %v", dep.Summary, err)
60-
}
61-
} else {
62-
logrus.Infof("\u2705 available: %v", dep.Summary)
63-
}
64-
}
46+
successful, tested := testDependencies(specFile)
6547

66-
// at least one dependency failed
67-
if unavailable && quitIfDown {
68-
os.Exit(1)
48+
if successful == tested {
49+
logrus.Infof("all %d dependencies are available", tested)
50+
} else {
51+
// at least one dependency failed
52+
if quitIfDown {
53+
os.Exit(1)
54+
}
6955
}
7056
},
7157
}
@@ -78,6 +64,31 @@ func init() {
7864
testCmd.Flags().BoolVarP(&failOptional, "fail-optional", "o", false, "Fail if optional dependencies are down (default false)")
7965
}
8066

67+
func testDependencies(specFile string) (successful int, tested int) {
68+
logrus.Debugf("reading opendeps manifest: %v", specFile)
69+
spec := model.Parse(specFile)
70+
71+
logrus.Infof("testing %d dependencies", len(spec.Dependencies))
72+
available := 0
73+
for _, dep := range spec.Dependencies {
74+
err := testDependency(specFile, dep)
75+
if err != nil {
76+
if dep.Required || failOptional {
77+
logrus.Warnf("\u274C unavailable: %v: %v", dep.Summary, err)
78+
if stopIfDown {
79+
break
80+
}
81+
} else {
82+
logrus.Warnf("\u26A0 unavailable: %v: %v", dep.Summary, err)
83+
}
84+
} else {
85+
logrus.Infof("\u2705 available: %v", dep.Summary)
86+
available++
87+
}
88+
}
89+
return available, len(spec.Dependencies)
90+
}
91+
8192
func testDependency(specFile string, dep model.Dependency) error {
8293
if "" != dep.Availability.Security {
8394
logrus.Warnf("security configuration for availability endpoints is not supported\n")
@@ -94,7 +105,9 @@ func testDependency(specFile string, dep model.Dependency) error {
94105
if err != nil {
95106
return err
96107
}
97-
url = fmt.Sprintf("%v/%v", basePath, dep.Availability.Path)
108+
trimmedBasePath := strings.TrimSuffix(basePath, "/")
109+
trimmedPath := strings.TrimPrefix(dep.Availability.Path, "/")
110+
url = fmt.Sprintf("%v/%v", trimmedBasePath, trimmedPath)
98111

99112
} else {
100113
panic(fmt.Errorf("No availability URL or path for %v\n", dep.Summary))
@@ -104,7 +117,7 @@ func testDependency(specFile string, dep model.Dependency) error {
104117
if err != nil {
105118
return fmt.Errorf("failed to reach availability URL [%v]: %v\n", url, err)
106119
} else {
107-
logrus.Debugf("%v availability: %s\n", dep.Summary, resp.Status)
120+
logrus.Debugf("checked availability [%v]: %s\n", dep.Summary, resp.Status)
108121
if resp.StatusCode < 200 || resp.StatusCode > 299 {
109122
return fmt.Errorf("failed to reach availability URL [%v]: %s\n", url, resp.Status)
110123
}

cmd/validate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ var validateCmd = &cobra.Command{
3838
if err != nil {
3939
logrus.Fatal(err)
4040
}
41-
logrus.Infof("validating opendeps manifest %v\n", specFile)
41+
logrus.Infof("validating opendeps manifest: %v\n", specFile)
4242

4343
json, err := loadSpecAsJson(specFile)
4444
if err != nil {

0 commit comments

Comments
 (0)