feat(fast-root): get running procs for each pkgs (all RHEL, CentOS, AmazonLinux, Ubuntu, Debian) (#855)
* fix(scan): exec yum-plugin-ps on RHEL6 and 7 * feat(yumps): get affected procs on RHEL6 and RHEL8 * feat(scan): get affected processes for each packages * tuning * feat(scan): get running procs for each pkgs on Debian, Ubuntu
This commit is contained in:
@@ -329,229 +329,6 @@ if-not-architecture 0 100 200 amzn-main`
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckYumPsInstalled(t *testing.T) {
|
||||
r := newCentOS(config.ServerInfo{})
|
||||
var tests = []struct {
|
||||
in string
|
||||
out bool
|
||||
}{
|
||||
{
|
||||
in: `Loaded plugins: changelog, fastestmirror, ps, remove-with-leaves, show-leaves
|
||||
Loading mirror speeds from cached hostfile
|
||||
* base: ftp.tsukuba.wide.ad.jp
|
||||
* extras: ftp.tsukuba.wide.ad.jp
|
||||
* updates: ftp.tsukuba.wide.ad.jp
|
||||
Installed Packages
|
||||
Name : yum
|
||||
Arch : noarch
|
||||
Version : 3.4.3
|
||||
Release : 150.el7.centos
|
||||
Size : 5.5 M
|
||||
Repo : installed
|
||||
From repo : anaconda
|
||||
Summary : RPM package installer/updater/manager
|
||||
URL : http://yum.baseurl.org/
|
||||
License : GPLv2+
|
||||
Description : Yum is a utility that can check for and automatically download and
|
||||
: install updated RPM packages. Dependencies are obtained and downloaded
|
||||
: automatically, prompting the user for permission as necessary.
|
||||
|
||||
Available Packages
|
||||
Name : yum
|
||||
Arch : noarch
|
||||
Version : 3.4.3
|
||||
Release : 154.el7.centos.1
|
||||
Size : 1.2 M
|
||||
Repo : updates/7/x86_64
|
||||
Summary : RPM package installer/updater/manager
|
||||
URL : http://yum.baseurl.org/
|
||||
License : GPLv2+
|
||||
Description : Yum is a utility that can check for and automatically download and
|
||||
: install updated RPM packages. Dependencies are obtained and downloaded
|
||||
: automatically, prompting the user for permission as necessary.`,
|
||||
out: true,
|
||||
},
|
||||
{
|
||||
in: `Failed to set locale, defaulting to C
|
||||
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
|
||||
Installed Packages
|
||||
Name : yum
|
||||
Arch : noarch
|
||||
Version : 3.4.3
|
||||
Release : 154.el7
|
||||
Size : 5.5 M
|
||||
Repo : installed
|
||||
From repo : rhui-REGION-rhel-server-releases
|
||||
Summary : RPM package installer/updater/manager
|
||||
URL : http://yum.baseurl.org/
|
||||
License : GPLv2+
|
||||
Description : Yum is a utility that can check for and automatically download and
|
||||
: install updated RPM packages. Dependencies are obtained and downloaded
|
||||
: automatically, prompting the user for permission as necessary.`,
|
||||
out: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
ok := r.checkYumPsInstalled(tt.in)
|
||||
if ok != tt.out {
|
||||
t.Errorf("expected: %v\nactual: %v", tt.out, ok)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseYumPS(t *testing.T) {
|
||||
r := newCentOS(config.ServerInfo{})
|
||||
r.Distro = config.Distro{Family: "centos"}
|
||||
r.Packages = models.NewPackages(
|
||||
models.Package{
|
||||
Name: "python",
|
||||
Version: "2.7.5",
|
||||
Release: "34.el7",
|
||||
Arch: "x86_64",
|
||||
},
|
||||
models.Package{
|
||||
Name: "util-linux",
|
||||
Version: "2.23.2",
|
||||
Release: "26.el7",
|
||||
Arch: "x86_64",
|
||||
},
|
||||
models.Package{
|
||||
Name: "wpa_supplicant",
|
||||
Version: "1:2.0",
|
||||
Release: "17.el7_1",
|
||||
Arch: "x86_64",
|
||||
},
|
||||
models.Package{
|
||||
Name: "yum",
|
||||
Version: "3.4.3",
|
||||
Release: "150.el7.centos",
|
||||
Arch: "noarch",
|
||||
},
|
||||
)
|
||||
|
||||
var tests = []struct {
|
||||
in string
|
||||
out models.Packages
|
||||
}{
|
||||
{
|
||||
` pid proc CPU RSS State uptime
|
||||
python-2.7.5-34.el7.x86_64 Upgrade 2.7.5-48.el7.x86_64
|
||||
741 tuned 1:54 16 MB Sleeping: 14 day(s) 21:52:32
|
||||
38755 yum 0:00 42 MB Running: 00:00
|
||||
util-linux-2.23.2-26.el7.x86_64 Upgrade 2.23.2-33.el7_3.2.x86_64
|
||||
626 agetty 0:00 848 kB Sleeping: 14 day(s) 21:52:37
|
||||
628 agetty 0:00 848 kB Sleeping: 14 day(s) 21:52:37
|
||||
1:wpa_supplicant-2.0-17.el7_1.x86_64 Upgrade 1:2.0-21.el7_3.x86_64
|
||||
638 wpa_supplicant 0:00 2.6 MB Sleeping: 14 day(s) 21:52:37
|
||||
yum-3.4.3-150.el7.centos.noarch
|
||||
38755 yum 0:00 42 MB Running: 00:00
|
||||
ps
|
||||
`,
|
||||
models.NewPackages(
|
||||
models.Package{
|
||||
Name: "python",
|
||||
Version: "2.7.5",
|
||||
Release: "34.el7",
|
||||
Arch: "x86_64",
|
||||
// NewVersion: "2.7.5-",
|
||||
// NewRelease: "48.el7.x86_64",
|
||||
AffectedProcs: []models.AffectedProcess{
|
||||
{
|
||||
PID: "741",
|
||||
Name: "tuned",
|
||||
},
|
||||
{
|
||||
PID: "38755",
|
||||
Name: "yum",
|
||||
},
|
||||
},
|
||||
},
|
||||
models.Package{
|
||||
Name: "util-linux",
|
||||
Version: "2.23.2",
|
||||
Release: "26.el7",
|
||||
Arch: "x86_64",
|
||||
// NewVersion: "2.7.5",
|
||||
// NewRelease: "48.el7.x86_64",
|
||||
AffectedProcs: []models.AffectedProcess{
|
||||
{
|
||||
PID: "626",
|
||||
Name: "agetty",
|
||||
},
|
||||
{
|
||||
PID: "628",
|
||||
Name: "agetty",
|
||||
},
|
||||
},
|
||||
},
|
||||
models.Package{
|
||||
Name: "wpa_supplicant",
|
||||
Version: "1:2.0",
|
||||
Release: "17.el7_1",
|
||||
Arch: "x86_64",
|
||||
// NewVersion: "1:2.0",
|
||||
// NewRelease: "21.el7_3.x86_64",
|
||||
AffectedProcs: []models.AffectedProcess{
|
||||
{
|
||||
PID: "638",
|
||||
Name: "wpa_supplicant",
|
||||
},
|
||||
},
|
||||
},
|
||||
),
|
||||
},
|
||||
{
|
||||
` pid proc CPU RSS State uptime
|
||||
acpid-2.0.19-6.7.amzn1.x86_64
|
||||
2388 acpid 0:00 1.4 MB Sleeping: 21:08
|
||||
at-3.1.10-48.15.amzn1.x86_64
|
||||
2546 atd 0:00 164 kB Sleeping: 21:06
|
||||
cronie-anacron-1.4.4-15.8.amzn1.x86_64
|
||||
2637 anacron 0:00 1.5 MB Sleeping: 13:14
|
||||
12:dhclient-4.1.1-51.P1.26.amzn1.x86_64
|
||||
2061 dhclient 0:00 1.4 MB Sleeping: 21:10
|
||||
2193 dhclient 0:00 2.1 MB Sleeping: 21:08
|
||||
mingetty-1.08-5.9.amzn1.x86_64
|
||||
2572 mingetty 0:00 1.4 MB Sleeping: 21:06
|
||||
2575 mingetty 0:00 1.4 MB Sleeping: 21:06
|
||||
2578 mingetty 0:00 1.5 MB Sleeping: 21:06
|
||||
2580 mingetty 0:00 1.4 MB Sleeping: 21:06
|
||||
2582 mingetty 0:00 1.4 MB Sleeping: 21:06
|
||||
2584 mingetty 0:00 1.4 MB Sleeping: 21:06
|
||||
openssh-server-6.6.1p1-33.66.amzn1.x86_64
|
||||
2481 sshd 0:00 2.6 MB Sleeping: 21:07
|
||||
python27-2.7.12-2.120.amzn1.x86_64
|
||||
2649 yum 0:00 35 MB Running: 00:01
|
||||
rsyslog-5.8.10-9.26.amzn1.x86_64
|
||||
2261 rsyslogd 0:00 2.6 MB Sleeping: 21:08
|
||||
udev-173-4.13.amzn1.x86_64
|
||||
1528 udevd 0:00 2.5 MB Sleeping: 21:12
|
||||
1652 udevd 0:00 2.1 MB Sleeping: 21:12
|
||||
1653 udevd 0:00 2.0 MB Sleeping: 21:12
|
||||
upstart-0.6.5-13.3.13.amzn1.x86_64
|
||||
1 init 0:00 2.5 MB Sleeping: 21:13
|
||||
util-linux-2.23.2-33.28.amzn1.x86_64
|
||||
2569 agetty 0:00 1.6 MB Sleeping: 21:06
|
||||
yum-3.4.3-150.70.amzn1.noarch
|
||||
2649 yum 0:00 35 MB Running: 00:01
|
||||
`,
|
||||
models.Packages{},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
packages := r.parseYumPS(tt.in)
|
||||
for name, ePack := range tt.out {
|
||||
if !reflect.DeepEqual(ePack, packages[name]) {
|
||||
e := pp.Sprintf("%v", ePack)
|
||||
a := pp.Sprintf("%v", packages[name])
|
||||
t.Errorf("expected %s, actual %s", e, a)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseNeedsRestarting(t *testing.T) {
|
||||
r := newCentOS(config.ServerInfo{})
|
||||
r.Distro = config.Distro{Family: "centos"}
|
||||
@@ -580,49 +357,3 @@ func TestParseNeedsRestarting(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsExecScanUsingYum(t *testing.T) {
|
||||
r := newRHEL(config.ServerInfo{})
|
||||
var tests = []struct {
|
||||
modes []byte
|
||||
family string
|
||||
out bool
|
||||
}{
|
||||
{
|
||||
modes: []byte{config.Offline},
|
||||
out: false,
|
||||
},
|
||||
{
|
||||
modes: []byte{},
|
||||
family: config.CentOS,
|
||||
out: false,
|
||||
},
|
||||
{
|
||||
family: config.Amazon,
|
||||
modes: []byte{config.FastRoot},
|
||||
out: true,
|
||||
},
|
||||
{
|
||||
family: config.Amazon,
|
||||
modes: []byte{config.Deep},
|
||||
out: true,
|
||||
},
|
||||
}
|
||||
|
||||
for i, tt := range tests {
|
||||
r.Distro.Family = tt.family
|
||||
mode := config.ScanMode{}
|
||||
for _, m := range tt.modes {
|
||||
mode.Set(m)
|
||||
}
|
||||
|
||||
si := r.getServerInfo()
|
||||
si.Mode = mode
|
||||
r.setServerInfo(si)
|
||||
|
||||
out := r.isExecScanUsingYum()
|
||||
if out != tt.out {
|
||||
t.Errorf("[%d] expected %#v, actual %#v", i, tt.out, out)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user