594 lines
12 KiB
Go
594 lines
12 KiB
Go
package models
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/k0kubun/pp"
|
|
)
|
|
|
|
func TestMergeNewVersion(t *testing.T) {
|
|
var test = struct {
|
|
a Packages
|
|
b Packages
|
|
expected Packages
|
|
}{
|
|
Packages{
|
|
"hoge": {
|
|
Name: "hoge",
|
|
},
|
|
},
|
|
Packages{
|
|
"hoge": {
|
|
Name: "hoge",
|
|
NewVersion: "1.0.0",
|
|
NewRelease: "release1",
|
|
},
|
|
},
|
|
Packages{
|
|
"hoge": {
|
|
Name: "hoge",
|
|
NewVersion: "1.0.0",
|
|
NewRelease: "release1",
|
|
},
|
|
},
|
|
}
|
|
|
|
test.a.MergeNewVersion(test.b)
|
|
if !reflect.DeepEqual(test.a, test.expected) {
|
|
e := pp.Sprintf("%v", test.a)
|
|
a := pp.Sprintf("%v", test.expected)
|
|
t.Errorf("expected %s, actual %s", e, a)
|
|
}
|
|
}
|
|
|
|
func TestMerge(t *testing.T) {
|
|
var test = struct {
|
|
a Packages
|
|
b Packages
|
|
expected Packages
|
|
}{
|
|
Packages{
|
|
"hoge": {Name: "hoge"},
|
|
"fuga": {Name: "fuga"},
|
|
},
|
|
Packages{
|
|
"hega": {Name: "hega"},
|
|
"hage": {Name: "hage"},
|
|
},
|
|
Packages{
|
|
"hoge": {Name: "hoge"},
|
|
"fuga": {Name: "fuga"},
|
|
"hega": {Name: "hega"},
|
|
"hage": {Name: "hage"},
|
|
},
|
|
}
|
|
|
|
actual := test.a.Merge(test.b)
|
|
if !reflect.DeepEqual(actual, test.expected) {
|
|
e := pp.Sprintf("%v", test.expected)
|
|
a := pp.Sprintf("%v", actual)
|
|
t.Errorf("expected %s, actual %s", e, a)
|
|
}
|
|
}
|
|
|
|
func TestAddBinaryName(t *testing.T) {
|
|
var tests = []struct {
|
|
in SrcPackage
|
|
name string
|
|
expected SrcPackage
|
|
}{
|
|
{
|
|
SrcPackage{Name: "hoge"},
|
|
"curl",
|
|
SrcPackage{
|
|
Name: "hoge",
|
|
BinaryNames: []string{"curl"},
|
|
},
|
|
},
|
|
{
|
|
SrcPackage{
|
|
Name: "hoge",
|
|
BinaryNames: []string{"curl"},
|
|
},
|
|
"curl",
|
|
SrcPackage{
|
|
Name: "hoge",
|
|
BinaryNames: []string{"curl"},
|
|
},
|
|
},
|
|
{
|
|
SrcPackage{
|
|
Name: "hoge",
|
|
BinaryNames: []string{"curl"},
|
|
},
|
|
"openssh",
|
|
SrcPackage{
|
|
Name: "hoge",
|
|
BinaryNames: []string{"curl", "openssh"},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tt.in.AddBinaryName(tt.name)
|
|
if !reflect.DeepEqual(tt.in, tt.expected) {
|
|
t.Errorf("expected %#v, actual %#v", tt.in, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestFindByBinName(t *testing.T) {
|
|
var tests = []struct {
|
|
in SrcPackages
|
|
name string
|
|
expected *SrcPackage
|
|
ok bool
|
|
}{
|
|
{
|
|
in: map[string]SrcPackage{
|
|
"packA": {
|
|
Name: "srcA",
|
|
BinaryNames: []string{"binA"},
|
|
Version: "1.0.0",
|
|
},
|
|
"packB": {
|
|
Name: "srcB",
|
|
BinaryNames: []string{"binB"},
|
|
Version: "2.0.0",
|
|
},
|
|
},
|
|
name: "binA",
|
|
expected: &SrcPackage{
|
|
Name: "srcA",
|
|
BinaryNames: []string{"binA"},
|
|
Version: "1.0.0",
|
|
},
|
|
ok: true,
|
|
},
|
|
{
|
|
in: map[string]SrcPackage{
|
|
"packA": {
|
|
Name: "srcA",
|
|
BinaryNames: []string{"binA"},
|
|
Version: "1.0.0",
|
|
},
|
|
"packB": {
|
|
Name: "srcB",
|
|
BinaryNames: []string{"binB"},
|
|
Version: "2.0.0",
|
|
},
|
|
},
|
|
name: "nobin",
|
|
expected: nil,
|
|
ok: false,
|
|
},
|
|
}
|
|
|
|
for i, tt := range tests {
|
|
act, ok := tt.in.FindByBinName(tt.name)
|
|
if ok != tt.ok {
|
|
t.Errorf("[%d] expected %#v, actual %#v", i, tt.in, tt.expected)
|
|
}
|
|
if act != nil && !reflect.DeepEqual(*tt.expected, *act) {
|
|
t.Errorf("[%d] expected %#v, actual %#v", i, tt.in, tt.expected)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestPackage_FormatVersionFromTo(t *testing.T) {
|
|
type fields struct {
|
|
Name string
|
|
Version string
|
|
Release string
|
|
NewVersion string
|
|
NewRelease string
|
|
Arch string
|
|
Repository string
|
|
Changelog Changelog
|
|
AffectedProcs []AffectedProcess
|
|
NeedRestartProcs []NeedRestartProcess
|
|
}
|
|
type args struct {
|
|
stat PackageFixStatus
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
fields fields
|
|
args args
|
|
want string
|
|
}{
|
|
{
|
|
name: "fixed",
|
|
fields: fields{
|
|
Name: "packA",
|
|
Version: "1.0.0",
|
|
Release: "a",
|
|
NewVersion: "1.0.1",
|
|
NewRelease: "b",
|
|
},
|
|
args: args{
|
|
stat: PackageFixStatus{
|
|
NotFixedYet: false,
|
|
FixedIn: "1.0.1-b",
|
|
},
|
|
},
|
|
want: "packA-1.0.0-a -> 1.0.1-b (FixedIn: 1.0.1-b)",
|
|
},
|
|
{
|
|
name: "nfy",
|
|
fields: fields{
|
|
Name: "packA",
|
|
Version: "1.0.0",
|
|
Release: "a",
|
|
},
|
|
args: args{
|
|
stat: PackageFixStatus{
|
|
NotFixedYet: true,
|
|
},
|
|
},
|
|
want: "packA-1.0.0-a -> Not Fixed Yet",
|
|
},
|
|
{
|
|
name: "nfy",
|
|
fields: fields{
|
|
Name: "packA",
|
|
Version: "1.0.0",
|
|
Release: "a",
|
|
},
|
|
args: args{
|
|
stat: PackageFixStatus{
|
|
NotFixedYet: false,
|
|
FixedIn: "1.0.1-b",
|
|
},
|
|
},
|
|
want: "packA-1.0.0-a -> Unknown (FixedIn: 1.0.1-b)",
|
|
},
|
|
{
|
|
name: "nfy2",
|
|
fields: fields{
|
|
Name: "packA",
|
|
Version: "1.0.0",
|
|
Release: "a",
|
|
},
|
|
args: args{
|
|
stat: PackageFixStatus{
|
|
NotFixedYet: true,
|
|
FixedIn: "1.0.1-b",
|
|
FixState: "open",
|
|
},
|
|
},
|
|
want: "packA-1.0.0-a -> open (FixedIn: 1.0.1-b)",
|
|
},
|
|
{
|
|
name: "nfy3",
|
|
fields: fields{
|
|
Name: "packA",
|
|
Version: "1.0.0",
|
|
Release: "a",
|
|
},
|
|
args: args{
|
|
stat: PackageFixStatus{
|
|
NotFixedYet: true,
|
|
FixedIn: "1.0.1-b",
|
|
FixState: "open",
|
|
},
|
|
},
|
|
want: "packA-1.0.0-a -> open (FixedIn: 1.0.1-b)",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
p := Package{
|
|
Name: tt.fields.Name,
|
|
Version: tt.fields.Version,
|
|
Release: tt.fields.Release,
|
|
NewVersion: tt.fields.NewVersion,
|
|
NewRelease: tt.fields.NewRelease,
|
|
Arch: tt.fields.Arch,
|
|
Repository: tt.fields.Repository,
|
|
Changelog: &tt.fields.Changelog,
|
|
AffectedProcs: tt.fields.AffectedProcs,
|
|
NeedRestartProcs: tt.fields.NeedRestartProcs,
|
|
}
|
|
if got := p.FormatVersionFromTo(tt.args.stat); got != tt.want {
|
|
t.Errorf("Package.FormatVersionFromTo() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_IsRaspbianPackage(t *testing.T) {
|
|
type args struct {
|
|
name string
|
|
ver string
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
in []args
|
|
expect []bool
|
|
}{
|
|
{
|
|
name: "nameRegExp",
|
|
in: []args{
|
|
{
|
|
name: "libraspberrypi-dev",
|
|
ver: "1.20200811-1",
|
|
},
|
|
{
|
|
name: "rpi-eeprom",
|
|
ver: "7.10-1",
|
|
},
|
|
{
|
|
name: "python3-rpi.gpio",
|
|
ver: "0.7.0-0.1~bpo10+1",
|
|
},
|
|
{
|
|
name: "arping",
|
|
ver: "2.19-6",
|
|
},
|
|
{
|
|
name: "pi-bluetooth",
|
|
ver: "0.1.14",
|
|
},
|
|
},
|
|
expect: []bool{true, true, true, false, true, false},
|
|
},
|
|
{
|
|
name: "verRegExp",
|
|
in: []args{
|
|
{
|
|
name: "ffmpeg",
|
|
ver: "7:4.1.6-1~deb10u1+rpt1",
|
|
},
|
|
{
|
|
name: "gcc",
|
|
ver: "4:8.3.0-1+rpi2",
|
|
},
|
|
},
|
|
expect: []bool{true, true},
|
|
},
|
|
{
|
|
name: "nameList",
|
|
in: []args{
|
|
{
|
|
name: "piclone",
|
|
ver: "0.16",
|
|
},
|
|
},
|
|
expect: []bool{true},
|
|
},
|
|
{
|
|
name: "debianPackage",
|
|
in: []args{
|
|
{
|
|
name: "apt",
|
|
ver: "1.8.2.1",
|
|
},
|
|
},
|
|
expect: []bool{false},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
for i, p := range tt.in {
|
|
ret := IsRaspbianPackage(p.name, p.ver)
|
|
if !reflect.DeepEqual(ret, tt.expect[i]) {
|
|
t.Errorf("[%s->%s] expected: %t, actual: %t, in: %#v", tt.name, tt.in[i].name, tt.expect[i], ret, tt.in[i])
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_NewPortStat(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
args string
|
|
expect PortStat
|
|
}{{
|
|
name: "empty",
|
|
args: "",
|
|
expect: PortStat{
|
|
BindAddress: "",
|
|
Port: "",
|
|
},
|
|
}, {
|
|
name: "normal",
|
|
args: "127.0.0.1:22",
|
|
expect: PortStat{
|
|
BindAddress: "127.0.0.1",
|
|
Port: "22",
|
|
},
|
|
}, {
|
|
name: "asterisk",
|
|
args: "*:22",
|
|
expect: PortStat{
|
|
BindAddress: "*",
|
|
Port: "22",
|
|
},
|
|
}, {
|
|
name: "ipv6_loopback",
|
|
args: "[::1]:22",
|
|
expect: PortStat{
|
|
BindAddress: "[::1]",
|
|
Port: "22",
|
|
},
|
|
}}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
listenPort, err := NewPortStat(tt.args)
|
|
if err != nil {
|
|
t.Errorf("unexpected error occurred: %s", err)
|
|
} else if !reflect.DeepEqual(*listenPort, tt.expect) {
|
|
t.Errorf("base.NewPortStat() = %v, want %v", *listenPort, tt.expect)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPackages_resolveReverseDeps(t *testing.T) {
|
|
type args struct {
|
|
pkg Package
|
|
acc map[string]struct{}
|
|
}
|
|
tests := []struct {
|
|
name string
|
|
ps Packages
|
|
args args
|
|
want map[string]struct{}
|
|
}{
|
|
{
|
|
name: "",
|
|
ps: map[string]Package{
|
|
"pkgA": {
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
"pkgB": {
|
|
Name: "pkgB",
|
|
ReverseDependencies: []string{"pkgC"},
|
|
},
|
|
"pkgC": {
|
|
Name: "pkgC",
|
|
ReverseDependencies: []string{""},
|
|
},
|
|
},
|
|
args: args{
|
|
pkg: Package{
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
acc: map[string]struct{}{},
|
|
},
|
|
want: map[string]struct{}{
|
|
"pkgA": {},
|
|
"pkgB": {},
|
|
"pkgC": {},
|
|
},
|
|
},
|
|
{
|
|
name: "",
|
|
ps: map[string]Package{
|
|
"pkgA": {
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
"pkgB": {
|
|
Name: "pkgB",
|
|
ReverseDependencies: []string{"pkgA", "pkgC"},
|
|
},
|
|
"pkgC": {
|
|
Name: "pkgC",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
},
|
|
args: args{
|
|
pkg: Package{
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
acc: map[string]struct{}{},
|
|
},
|
|
want: map[string]struct{}{
|
|
"pkgA": {},
|
|
"pkgB": {},
|
|
"pkgC": {},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := tt.ps.resolveReverseDeps(tt.args.pkg, tt.args.acc); !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("Packages.resolveReverseDeps() = %v, want %v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestPackages_resolveReverseDepsRecursively(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
ps Packages
|
|
want Packages
|
|
}{
|
|
{
|
|
name: "",
|
|
ps: map[string]Package{
|
|
"pkgA": {
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
"pkgB": {
|
|
Name: "pkgB",
|
|
ReverseDependencies: []string{"pkgC"},
|
|
},
|
|
"pkgC": {
|
|
Name: "pkgC",
|
|
ReverseDependencies: []string{""},
|
|
},
|
|
},
|
|
want: map[string]Package{
|
|
"pkgA": {
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
ReverseDependenciesRecursively: []string{"pkgB", "pkgC"},
|
|
},
|
|
"pkgB": {
|
|
Name: "pkgB",
|
|
ReverseDependencies: []string{"pkgC"},
|
|
ReverseDependenciesRecursively: []string{"pkgC"},
|
|
},
|
|
"pkgC": {
|
|
Name: "pkgC",
|
|
ReverseDependencies: []string{""},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: "",
|
|
ps: map[string]Package{
|
|
"pkgA": {
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
"pkgB": {
|
|
Name: "pkgB",
|
|
ReverseDependencies: []string{"pkgA", "pkgC"},
|
|
},
|
|
"pkgC": {
|
|
Name: "pkgC",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
},
|
|
},
|
|
want: map[string]Package{
|
|
"pkgA": {
|
|
Name: "pkgA",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
ReverseDependenciesRecursively: []string{"pkgB", "pkgC"},
|
|
},
|
|
"pkgB": {
|
|
Name: "pkgB",
|
|
ReverseDependencies: []string{"pkgA", "pkgC"},
|
|
ReverseDependenciesRecursively: []string{"pkgA", "pkgC"},
|
|
},
|
|
"pkgC": {
|
|
Name: "pkgC",
|
|
ReverseDependencies: []string{"pkgB"},
|
|
ReverseDependenciesRecursively: []string{"pkgA", "pkgB"},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
tt.ps.ResolveReverseDepsRecursively()
|
|
if !reflect.DeepEqual(tt.ps, tt.want) {
|
|
t.Errorf("Packages.resolveReverseDepsRecursively() = \n%+v, want \n%+v", tt.ps, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|