Skip to content

Commit 2ea05a8

Browse files
authored
Merge pull request #7 from open-edge-platform/reslv-gotests
added common test data for deb and rpm resolvers
2 parents 27d1dfd + 1b1487a commit 2ea05a8

3 files changed

Lines changed: 132 additions & 75 deletions

File tree

internal/debutils/resolver_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package debutils_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/debutils"
7+
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/resolvertest"
8+
)
9+
10+
func TestDEBResolver(t *testing.T) {
11+
resolvertest.RunResolverTestsFunc(
12+
t,
13+
"debutils",
14+
debutils.ResolvePackageInfos, // directly passing your function
15+
)
16+
}

internal/resolvertest/run_tests.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package resolvertest
2+
3+
import (
4+
"reflect"
5+
"sort"
6+
"testing"
7+
8+
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/provider"
9+
)
10+
11+
// Resolver is interface both rpmutil & debutil satisfy.
12+
type Resolver interface {
13+
Resolve(
14+
requested []provider.PackageInfo,
15+
all []provider.PackageInfo,
16+
) ([]provider.PackageInfo, error)
17+
}
18+
19+
// helper to extract and sort names from PackageInfo slice
20+
func names(ps []provider.PackageInfo) []string {
21+
var outs []string
22+
for _, p := range ps {
23+
outs = append(outs, p.Name)
24+
}
25+
sort.Strings(outs)
26+
return outs
27+
}
28+
29+
var TestCases = []struct {
30+
Name string
31+
Requested []provider.PackageInfo
32+
All []provider.PackageInfo
33+
Want []string
34+
WantErr bool
35+
}{
36+
{
37+
Name: "SimpleChain",
38+
All: []provider.PackageInfo{
39+
{Name: "C", Provides: []string{"C"}, Requires: []string{}},
40+
{Name: "B", Provides: []string{"B"}, Requires: []string{"C"}},
41+
{Name: "A", Provides: []string{"A"}, Requires: []string{"B"}},
42+
},
43+
Requested: []provider.PackageInfo{
44+
{Name: "A", Provides: []string{"A"}, Requires: []string{"B"}},
45+
},
46+
Want: []string{"A", "B", "C"},
47+
WantErr: false,
48+
},
49+
{
50+
Name: "MultipleProviders",
51+
All: []provider.PackageInfo{
52+
{Name: "Y", Provides: []string{"Y"}, Requires: []string{}},
53+
{Name: "P1", Provides: []string{"X"}, Requires: []string{}},
54+
{Name: "P2", Provides: []string{"X"}, Requires: []string{"Y"}},
55+
{Name: "A", Provides: []string{"A"}, Requires: []string{"X"}},
56+
},
57+
Requested: []provider.PackageInfo{
58+
{Name: "A", Provides: []string{"A"}, Requires: []string{"X"}},
59+
},
60+
Want: []string{"A", "P2", "Y"},
61+
WantErr: false,
62+
},
63+
{
64+
Name: "NoDependencies",
65+
All: []provider.PackageInfo{
66+
{Name: "X", Provides: []string{"X"}, Requires: []string{}},
67+
},
68+
Requested: []provider.PackageInfo{
69+
{Name: "X", Provides: []string{"A"}, Requires: []string{"X"}},
70+
},
71+
Want: []string{"X"},
72+
WantErr: false,
73+
},
74+
{
75+
Name: "MissingRequested",
76+
All: []provider.PackageInfo{
77+
{Name: "A", Provides: []string{"A"}, Requires: []string{}},
78+
},
79+
Requested: []provider.PackageInfo{
80+
{Name: "B", Provides: []string{"B"}, Requires: []string{""}},
81+
},
82+
Want: []string{},
83+
WantErr: true,
84+
},
85+
}
86+
87+
// RunResolverTestsFunc drives a bare function through your table.
88+
func RunResolverTestsFunc(
89+
t *testing.T,
90+
prefix string,
91+
resolverFunc func(requested, all []provider.PackageInfo) ([]provider.PackageInfo, error),
92+
) {
93+
94+
t.Helper()
95+
for _, tc := range TestCases {
96+
t.Run(prefix+"/"+tc.Name, func(t *testing.T) {
97+
got, err := resolverFunc(tc.Requested, tc.All)
98+
if (err != nil) != tc.WantErr {
99+
t.Fatalf("err = %v, wantErr? %v", err, tc.WantErr)
100+
}
101+
102+
if !tc.WantErr && !reflect.DeepEqual(names(got), tc.Want) {
103+
t.Errorf("ResolvePackageInfos [%v] = %v; want %v", tc.Name, names(got), tc.Want)
104+
}
105+
})
106+
}
107+
}

internal/rpmutils/resolver_test.go

Lines changed: 9 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,16 @@
11
package rpmutils_test
22

33
import (
4-
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/provider"
5-
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/rpmutils"
6-
"reflect"
7-
"sort"
84
"testing"
9-
)
10-
11-
// helper to extract and sort names from PackageInfo slice
12-
func names(ps []provider.PackageInfo) []string {
13-
var outs []string
14-
for _, p := range ps {
15-
outs = append(outs, p.Name)
16-
}
17-
sort.Strings(outs)
18-
return outs
19-
}
20-
21-
func TestResolvePackageInfos_SimpleChain(t *testing.T) {
22-
// A -> requires B -> requires C
23-
all := []provider.PackageInfo{
24-
{Name: "C", Provides: []string{"C"}, Requires: []string{}},
25-
{Name: "B", Provides: []string{"B"}, Requires: []string{"C"}},
26-
{Name: "A", Provides: []string{"A"}, Requires: []string{"B"}},
27-
}
28-
requested := []provider.PackageInfo{{Name: "A", Provides: []string{"A"}, Requires: []string{"B"}}}
29-
30-
got, err := rpmutils.ResolvePackageInfos(requested, all)
31-
if err != nil {
32-
t.Fatalf("unexpected error: %v", err)
33-
}
34-
want := []string{"A", "B", "C"}
35-
if !reflect.DeepEqual(names(got), want) {
36-
t.Errorf("ResolvePackageInfos simple chain = %v; want %v", names(got), want)
37-
}
38-
}
39-
40-
func TestResolvePackageInfos_MultipleProviders(t *testing.T) {
41-
// A requires X, X provided by P1 and P2, P2 requires Y
42-
all := []provider.PackageInfo{
43-
{Name: "Y", Provides: []string{"Y"}, Requires: []string{}},
44-
{Name: "P1", Provides: []string{"X"}, Requires: []string{}},
45-
{Name: "P2", Provides: []string{"X"}, Requires: []string{"Y"}},
46-
{Name: "A", Provides: []string{"A"}, Requires: []string{"X"}},
47-
}
48-
requested := []provider.PackageInfo{{Name: "A", Provides: []string{"A"}, Requires: []string{"X"}}}
495

50-
got, err := rpmutils.ResolvePackageInfos(requested, all)
51-
if err != nil {
52-
t.Fatalf("unexpected error: %v", err)
53-
}
54-
want := []string{"A", "P1", "P2", "Y"}
55-
if !reflect.DeepEqual(names(got), want) {
56-
t.Errorf("ResolvePackageInfos multi providers = %v; want %v", names(got), want)
57-
}
58-
}
59-
60-
func TestResolvePackageInfos_NoDeps(t *testing.T) {
61-
all := []provider.PackageInfo{{Name: "X", Provides: []string{"X"}, Requires: []string{}}}
62-
requested := []provider.PackageInfo{{Name: "X", Provides: []string{"X"}, Requires: []string{}}}
63-
64-
got, err := rpmutils.ResolvePackageInfos(requested, all)
65-
if err != nil {
66-
t.Fatalf("unexpected error: %v", err)
67-
}
68-
want := []string{"X"}
69-
if !reflect.DeepEqual(names(got), want) {
70-
t.Errorf("ResolvePackageInfos no deps = %v; want %v", names(got), want)
71-
}
72-
}
73-
74-
func TestResolvePackageInfos_MissingRequested(t *testing.T) {
75-
all := []provider.PackageInfo{{Name: "A", Provides: []string{"A"}, Requires: []string{}}}
76-
requested := []provider.PackageInfo{{Name: "B", Provides: []string{"B"}, Requires: []string{}}}
6+
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/resolvertest"
7+
"github.com/intel-innersource/os.linux.tiberos.os-curation-tool/internal/rpmutils"
8+
)
779

78-
_, err := rpmutils.ResolvePackageInfos(requested, all)
79-
if err == nil {
80-
t.Fatalf("expected error for missing requested, got none")
81-
}
10+
func TestRPMResolver(t *testing.T) {
11+
resolvertest.RunResolverTestsFunc(
12+
t,
13+
"rpmutils",
14+
rpmutils.ResolvePackageInfos, // directly passing your function
15+
)
8216
}

0 commit comments

Comments
 (0)