Support scanning Ubuntu using Gost (#1243)
* chore: add vuls binary in gitignore
* feat(gost): support ubuntu
* chore(debian): fix typo
* feat(ubuntu): more detail on CveContent
* chore: update .gitignore
* chore: update gost deps
* feat(ubuntu): add test in gost/ubuntu
* chore: fix typo
* Revert "chore: fix typo"
This reverts commit 9f2f1db233.
* docs: update README
			
			
This commit is contained in:
		
							
								
								
									
										137
									
								
								gost/ubuntu_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								gost/ubuntu_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,137 @@
 | 
			
		||||
package gost
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/future-architect/vuls/models"
 | 
			
		||||
	gostmodels "github.com/knqyf263/gost/models"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestUbuntu_Supported(t *testing.T) {
 | 
			
		||||
	type args struct {
 | 
			
		||||
		ubuReleaseVer string
 | 
			
		||||
	}
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		name string
 | 
			
		||||
		args args
 | 
			
		||||
		want bool
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			name: "14.04 is supported",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "1404",
 | 
			
		||||
			},
 | 
			
		||||
			want: true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "16.04 is supported",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "1604",
 | 
			
		||||
			},
 | 
			
		||||
			want: true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "18.04 is supported",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "1804",
 | 
			
		||||
			},
 | 
			
		||||
			want: true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "20.04 is supported",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "2004",
 | 
			
		||||
			},
 | 
			
		||||
			want: true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "20.10 is supported",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "2010",
 | 
			
		||||
			},
 | 
			
		||||
			want: true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "21.04 is supported",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "2104",
 | 
			
		||||
			},
 | 
			
		||||
			want: true,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "empty string is not supported yet",
 | 
			
		||||
			args: args{
 | 
			
		||||
				ubuReleaseVer: "",
 | 
			
		||||
			},
 | 
			
		||||
			want: false,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
		t.Run(tt.name, func(t *testing.T) {
 | 
			
		||||
			ubu := Ubuntu{}
 | 
			
		||||
			if got := ubu.supported(tt.args.ubuReleaseVer); got != tt.want {
 | 
			
		||||
				t.Errorf("Ubuntu.Supported() = %v, want %v", got, tt.want)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestUbuntuConvertToModel(t *testing.T) {
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		name     string
 | 
			
		||||
		input    gostmodels.UbuntuCVE
 | 
			
		||||
		expected models.CveContent
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			name: "gost Ubuntu.ConvertToModel",
 | 
			
		||||
			input: gostmodels.UbuntuCVE{
 | 
			
		||||
				Candidate:  "CVE-2021-3517",
 | 
			
		||||
				PublicDate: time.Date(2021, 5, 19, 14, 15, 0, 0, time.UTC),
 | 
			
		||||
				References: []gostmodels.UbuntuReference{
 | 
			
		||||
					{Reference: "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3517"},
 | 
			
		||||
					{Reference: "https://gitlab.gnome.org/GNOME/libxml2/-/issues/235"},
 | 
			
		||||
					{Reference: "https://gitlab.gnome.org/GNOME/libxml2/-/commit/bf22713507fe1fc3a2c4b525cf0a88c2dc87a3a2"}},
 | 
			
		||||
				Description: "description.",
 | 
			
		||||
				Notes:       []gostmodels.UbuntuNote{},
 | 
			
		||||
				Bugs:        []gostmodels.UbuntuBug{{Bug: "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=987738"}},
 | 
			
		||||
				Priority:    "medium",
 | 
			
		||||
				Patches: []gostmodels.UbuntuPatch{
 | 
			
		||||
					{PackageName: "libxml2", ReleasePatches: []gostmodels.UbuntuReleasePatch{
 | 
			
		||||
						{ReleaseName: "focal", Status: "needed", Note: ""},
 | 
			
		||||
					}},
 | 
			
		||||
				},
 | 
			
		||||
				Upstreams: []gostmodels.UbuntuUpstream{{
 | 
			
		||||
					PackageName: "libxml2", UpstreamLinks: []gostmodels.UbuntuUpstreamLink{
 | 
			
		||||
						{Link: "https://gitlab.gnome.org/GNOME/libxml2/-/commit/50f06b3efb638efb0abd95dc62dca05ae67882c2"},
 | 
			
		||||
					},
 | 
			
		||||
				}},
 | 
			
		||||
			},
 | 
			
		||||
			expected: models.CveContent{
 | 
			
		||||
				Type:          models.UbuntuAPI,
 | 
			
		||||
				CveID:         "CVE-2021-3517",
 | 
			
		||||
				Summary:       "description.",
 | 
			
		||||
				Cvss2Severity: "medium",
 | 
			
		||||
				Cvss3Severity: "medium",
 | 
			
		||||
				SourceLink:    "https://ubuntu.com/security/CVE-2021-3517",
 | 
			
		||||
				References: []models.Reference{
 | 
			
		||||
					{Source: "CVE", Link: "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3517"},
 | 
			
		||||
					{Link: "https://gitlab.gnome.org/GNOME/libxml2/-/issues/235"},
 | 
			
		||||
					{Link: "https://gitlab.gnome.org/GNOME/libxml2/-/commit/bf22713507fe1fc3a2c4b525cf0a88c2dc87a3a2"},
 | 
			
		||||
					{Source: "Bug", Link: "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=987738"},
 | 
			
		||||
					{Source: "UPSTREAM", Link: "https://gitlab.gnome.org/GNOME/libxml2/-/commit/50f06b3efb638efb0abd95dc62dca05ae67882c2"}},
 | 
			
		||||
				Published: time.Date(2021, 5, 19, 14, 15, 0, 0, time.UTC),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
		t.Run(tt.name, func(t *testing.T) {
 | 
			
		||||
			ubu := Ubuntu{}
 | 
			
		||||
			got := ubu.ConvertToModel(&tt.input)
 | 
			
		||||
			if !reflect.DeepEqual(got, &tt.expected) {
 | 
			
		||||
				t.Errorf("Ubuntu.ConvertToModel() = %#v, want %#v", got, &tt.expected)
 | 
			
		||||
			}
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user