Skip to content

Commit

Permalink
PMM-10274 Add tests for node_exporter
Browse files Browse the repository at this point in the history
  • Loading branch information
tshcherban committed Aug 31, 2022
1 parent 3c771b8 commit a9da035
Show file tree
Hide file tree
Showing 13 changed files with 1,107 additions and 1,566 deletions.
8 changes: 6 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,9 @@ collector/fixtures/sys/

# upstream updating dev test
percona/tests/upstream_update/metrics.upstream.txt
percona/tests/upstream_update/metrics.percona.no-values.txt
percona/tests/upstream_update/metrics.upstream.no-values.txt
/percona/tests/upstream_update/assets/metrics.names.new.txt
/percona/tests/upstream_update/assets/metrics.names.old.txt
/percona/tests/upstream_update/assets/metrics.new.txt
/percona/tests/upstream_update/assets/metrics.old.txt
/percona/tests/upstream_update/assets/node_exporter
/percona/tests/upstream_update/assets/node_exporter_percona
6 changes: 5 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ require (
github.com/lufia/iostat v1.2.0
github.com/mattn/go-xmlrpc v0.0.3
github.com/mdlayher/wifi v0.0.0-20200527114002-84f0b9457fdd
github.com/montanaflynn/stats v0.6.6
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.11.0
github.com/prometheus/client_model v0.2.0
github.com/prometheus/common v0.32.1
Expand All @@ -21,7 +23,9 @@ require (
github.com/safchain/ethtool v0.1.0
github.com/siebenmann/go-kstat v0.0.0-20210513183136-173c9b0a9973 // indirect
github.com/soundcloud/go-runit v0.0.0-20150630195641-06ad41a06c4a
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1
github.com/stretchr/testify v1.4.0
github.com/tklauser/go-sysconf v0.3.10
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27
gopkg.in/alecthomas/kingpin.v2 v2.2.6
)

Expand Down
10 changes: 8 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,8 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ=
github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
Expand Down Expand Up @@ -260,6 +262,10 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
Expand Down Expand Up @@ -417,8 +423,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211023085530-d6a326fbbf70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1 h1:kwrAHlwJ0DUBZwQ238v+Uod/3eZ8B2K5rYsUHBQvzmI=
golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 h1:XDXtA5hveEEV8JB2l7nhMTp3t3cHp9ZpwcdjqyEWLlo=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down
42 changes: 42 additions & 0 deletions percona/tests/upstream_update/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#########################
### tests

# measures avg scrape time and compares old vs new exporters
test-performance:
go test -v -run '^TestPerformance$$' -args -doRun=true

extraMetrics = false
multipleLabels = false
dumpMetrics = false

test-metrics:
go test -v -run '^TestMissingMetrics$$' -args -doRun=true

test-labels:
go test -v -run '^TestMissingLabels$$' -args -doRun=true

test-resolutions-duplicates:
go test -v -run '^TestResolutionsMetricDuplicates$$' -args -doRun=true

test-resolutions:
go test -v -run '^TestResolutions$$' -args -doRun=true

dump-metrics:
go test -v -run '^TestDumpMetrics$$' -args -doRun=true -extraMetrics=$(extraMetrics) -multipleLabels=$(multipleLabels) -dumpMetrics=$(dumpMetrics)

test-consistency: test-metrics test-resolutions test-resolutions-duplicates

#########################
### env preparation

# download exporter from provided feature build's client binary url
prepare-exporter:
go test -v -run '^TestPrepareUpdatedExporter$\' -args -doRun=true -url=$(url)

prepare-exporter-from-repo:
make -C ../../../ build && cp ../../../node_exporter assets/node_exporter

prepare-base-exporter:
tar -xf assets/node_exporter_percona.tar.xz -C assets/

prepare-env-from-repo: prepare-exporter-from-repo prepare-base-exporter
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
--collector.standard.go
--collector.standard.process
--collector.stat
--collector.textfile.directory.hr=/usr/local/percona/pmm2/collectors/textfile-collector/high-resolution0
--collector.textfile.directory.lr=/usr/local/percona/pmm2/collectors/textfile-collector/low-resolution0
--collector.textfile.directory.mr=/usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution0
--collector.textfile.directory.hr=/usr/local/percona/pmm2/collectors/textfile-collector/high-resolution
--collector.textfile.directory.lr=/usr/local/percona/pmm2/collectors/textfile-collector/low-resolution
--collector.textfile.directory.mr=/usr/local/percona/pmm2/collectors/textfile-collector/medium-resolution
--collector.textfile.hr
--collector.textfile.lr
--collector.textfile.mr
Expand Down Expand Up @@ -52,4 +52,4 @@
--no-collector.wifi
--no-collector.xfs
--no-collector.zfs
--web.disable-exporter-metrics
--web.disable-exporter-metrics
89 changes: 89 additions & 0 deletions percona/tests/upstream_update/env_prepare_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package percona_tests

import (
"archive/tar"
"compress/gzip"
"io"
"log"
"net/http"
"os"
"os/exec"
"strings"
"testing"
)

// TestPrepareExporters extracts exporter from client binary's tar.gz
func TestPrepareUpdatedExporter(t *testing.T) {
if doRun == nil || !*doRun {
t.Skip("For manual runs only through make")
return
}

if url == nil || *url == "" {
t.Error("URL not defined")
return
}

prepareExporter(*url, updatedExporterFileName)
}

func extractExporter(gzipStream io.Reader, fileName string) {
uncompressedStream, err := gzip.NewReader(gzipStream)
if err != nil {
log.Fatal("ExtractTarGz: NewReader failed")
}

tarReader := tar.NewReader(uncompressedStream)

exporterFound := false
for !exporterFound {
header, err := tarReader.Next()

if err == io.EOF {
break
}

if err != nil {
log.Fatalf("ExtractTarGz: Next() failed: %s", err.Error())
}

switch header.Typeflag {
case tar.TypeDir:
continue
case tar.TypeReg:
if strings.HasSuffix(header.Name, "postgres_exporter") {
outFile, err := os.Create(fileName)
if err != nil {
log.Fatalf("ExtractTarGz: Create() failed: %s", err.Error())
}
defer outFile.Close()
if _, err := io.Copy(outFile, tarReader); err != nil {
log.Fatalf("ExtractTarGz: Copy() failed: %s", err.Error())
}

exporterFound = true
}
default:
log.Fatalf(
"ExtractTarGz: uknown type: %d in %s",
header.Typeflag,
header.Name)
}
}
}

func prepareExporter(url, fileName string) {
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}

defer resp.Body.Close()

extractExporter(resp.Body, fileName)

err = exec.Command("chmod", "+x", fileName).Run()
if err != nil {
log.Fatal(err)
}
}
Loading

0 comments on commit a9da035

Please sign in to comment.