Skip to content

Commit 06c494e

Browse files
committed
Added unit tests from library-registry repo
1 parent 84583e5 commit 06c494e

9 files changed

+77
-16
lines changed
+17-16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package checkregistry
22

33
import (
4+
"errors"
45
"fmt"
56
"os"
67
"reflect"
@@ -10,32 +11,34 @@ import (
1011

1112
// CheckRegistry runs the check-registry action
1213
func CheckRegistry(reposFile string) {
14+
if err := runcheck(reposFile); err != nil {
15+
fmt.Fprintf(os.Stderr, "Error: %s\n", err.Error())
16+
os.Exit(1)
17+
}
18+
}
19+
20+
func runcheck(reposFile string) error {
1321
info, err := os.Stat(reposFile)
1422
if err != nil {
15-
fmt.Fprintf(os.Stderr, "error: While loading registry data file: %s\n", err)
16-
os.Exit(1)
23+
return fmt.Errorf("while loading registry data file: %w", err)
1724
}
1825

1926
if info.IsDir() {
20-
fmt.Fprintf(os.Stderr, "error: Registry data file argument %s is a folder, not a file\n", reposFile)
21-
os.Exit(1)
27+
return fmt.Errorf("registry data file argument %s is a folder, not a file", reposFile)
2228
}
2329

2430
rawRepos, err := libraries.LoadRepoListFromFile(reposFile)
2531
if err != nil {
26-
fmt.Fprintf(os.Stderr, "error: While loading registry data file: %s\n", err)
27-
os.Exit(1)
32+
return fmt.Errorf("while loading registry data file: %w", err)
2833
}
2934

3035
filteredRepos, err := libraries.ListRepos(reposFile)
3136
if err != nil {
32-
fmt.Fprintf(os.Stderr, "error: While filtering registry data file: %s\n", err)
33-
os.Exit(1)
37+
return fmt.Errorf("while filtering registry data file: %w", err)
3438
}
3539

3640
if !reflect.DeepEqual(rawRepos, filteredRepos) {
37-
fmt.Fprintln(os.Stderr, "error: Registry data file contains duplicate URLs")
38-
os.Exit(1)
41+
return errors.New("registry data file contains duplicate URLs")
3942
}
4043

4144
validTypes := map[string]bool{
@@ -50,21 +53,19 @@ func CheckRegistry(reposFile string) {
5053
for _, entry := range rawRepos {
5154
// Check entry types
5255
if len(entry.Types) == 0 {
53-
fmt.Fprintf(os.Stderr, "error: Type not specified for library '%s'\n", entry.LibraryName)
54-
os.Exit(1)
56+
return fmt.Errorf("type not specified for library '%s'", entry.LibraryName)
5557
}
5658
for _, entryType := range entry.Types {
5759
if _, valid := validTypes[entryType]; !valid {
58-
fmt.Fprintf(os.Stderr, "error: Invalid type '%s' used by library '%s'\n", entryType, entry.LibraryName)
59-
os.Exit(1)
60+
return fmt.Errorf("invalid type '%s' used by library '%s'", entryType, entry.LibraryName)
6061
}
6162
}
6263

6364
// Check library name of the entry
6465
if _, found := nameMap[entry.LibraryName]; found {
65-
fmt.Fprintf(os.Stderr, "error: Registry data file contains duplicates of name '%s'\n", entry.LibraryName)
66-
os.Exit(1)
66+
return fmt.Errorf("registry data file contains duplicates of name '%s'", entry.LibraryName)
6767
}
6868
nameMap[entry.LibraryName] = true
6969
}
70+
return nil
7071
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package checkregistry
2+
3+
import (
4+
"path/filepath"
5+
"testing"
6+
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestRegistryValidation(t *testing.T) {
11+
type testcase struct {
12+
Name string
13+
TestFile string
14+
ExpectedResult string
15+
}
16+
tests := []testcase{
17+
{"EmptyArg", "", "registry data file argument testdata is a folder, not a file"},
18+
{"NonExistentFile", "nonexistent.txt", "while loading registry data file: stat testdata/nonexistent.txt: no such file or directory"},
19+
//{"InvalidDataFormat", "invalid-data-format.txt", "while loading registry data file: invalid line format (3 fields are required): https://github.com/arduino-libraries/SD.git|Partner;SD"},
20+
{"InvalidUrlFormat", "invalid-url-format.txt", "while filtering registry data file: Following URL are unknown or unsupported git repos:\nhttps://github.com/arduino-libraries/SD\n"},
21+
{"MissingType", "no-type.txt", "invalid type '' used by library 'SD'"},
22+
{"InvalidType", "invalid-type.txt", "invalid type 'foo' used by library 'SD'"},
23+
{"DuplicateRepoURL", "duplicate-url.txt", "registry data file contains duplicate URLs"},
24+
{"DuplicateLibName", "duplicate-name.txt", "registry data file contains duplicates of name 'SD'"},
25+
{"ValidList", "valid.txt", ""},
26+
}
27+
for _, test := range tests {
28+
t.Run(test.Name, func(t *testing.T) {
29+
err := runcheck(filepath.Join("testdata", test.TestFile))
30+
if test.ExpectedResult == "" {
31+
require.NoError(t, err)
32+
} else {
33+
require.EqualError(t, err, test.ExpectedResult)
34+
}
35+
})
36+
}
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD.git|Partner|SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo
4+
https://github.com/arduino-libraries/Foo.git|Contributed|SD
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD.git|Partner|SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo
4+
https://github.com/arduino-libraries/SD.git|Contributed|Foo
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD.git|Partner;SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD.git|foo|SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD|Partner|SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD.git||SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
https://github.com/arduino-libraries/Scheduler.git|Arduino|Scheduler
2+
https://github.com/arduino-libraries/SD.git|Partner|SD
3+
https://github.com/arduino-libraries/Servo.git|Recommended|Servo

0 commit comments

Comments
 (0)