You've already forked ssl_exporter
mirror of
https://github.com/ribbybibby/ssl_exporter.git
synced 2025-07-12 23:50:14 +02:00
* feat: add remote_file probe * fix: use tls module config * chore: write http/https tests for probing remote file * chore: get rid of useless lines * fix: get rid of useless file download, check body directly * fix: use checkCertificateMetrics to actually check values * Rename remote_file to http_file You can fetch remote content with a lot of different protocols, so I think it's worth being specific here. As part of this change I've fixed up some of the logic in the code. I've also created a separate `http_file` block in the module config. * Actually include renamed files --------- Co-authored-by: Anthony LE BERRE <aleberre@veepee.com> Co-authored-by: Rob Best <rob.best@jetstack.io>
113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package prober
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/ribbybibby/ssl_exporter/v2/config"
|
|
"github.com/ribbybibby/ssl_exporter/v2/test"
|
|
)
|
|
|
|
func TestProbeHTTPFile(t *testing.T) {
|
|
testcertPEM, _ := test.GenerateTestCertificate(time.Now().AddDate(0, 0, 1))
|
|
|
|
server := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write(testcertPEM)
|
|
}))
|
|
|
|
server.Start()
|
|
defer server.Close()
|
|
|
|
registry := prometheus.NewRegistry()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancel()
|
|
|
|
if err := ProbeHTTPFile(ctx, newTestLogger(), server.URL+"/file", config.Module{}, registry); err != nil {
|
|
t.Fatalf("error: %s", err)
|
|
}
|
|
|
|
cert, err := newCertificate(testcertPEM)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkCertificateMetrics(cert, registry, t)
|
|
}
|
|
|
|
func TestProbeHTTPFile_NotCertificate(t *testing.T) {
|
|
server := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write([]byte("foobar"))
|
|
}))
|
|
|
|
server.Start()
|
|
defer server.Close()
|
|
|
|
registry := prometheus.NewRegistry()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancel()
|
|
|
|
if err := ProbeHTTPFile(ctx, newTestLogger(), server.URL+"/file", config.Module{}, registry); err == nil {
|
|
t.Errorf("expected error but got nil")
|
|
}
|
|
}
|
|
|
|
func TestProbeHTTPFile_NotFound(t *testing.T) {
|
|
server := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusNotFound)
|
|
}))
|
|
|
|
server.Start()
|
|
defer server.Close()
|
|
|
|
registry := prometheus.NewRegistry()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancel()
|
|
|
|
if err := ProbeHTTPFile(ctx, newTestLogger(), server.URL+"/file", config.Module{}, registry); err == nil {
|
|
t.Errorf("expected error but got nil")
|
|
}
|
|
}
|
|
|
|
func TestProbeHTTPFileHTTPS(t *testing.T) {
|
|
server, certPEM, _, caFile, teardown, err := test.SetupHTTPSServer()
|
|
if err != nil {
|
|
t.Fatalf(err.Error())
|
|
}
|
|
defer teardown()
|
|
|
|
server.Config.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write(certPEM)
|
|
})
|
|
|
|
server.StartTLS()
|
|
defer server.Close()
|
|
|
|
module := config.Module{
|
|
TLSConfig: config.TLSConfig{
|
|
CAFile: caFile,
|
|
InsecureSkipVerify: false,
|
|
},
|
|
}
|
|
|
|
registry := prometheus.NewRegistry()
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
|
defer cancel()
|
|
|
|
if err := ProbeHTTPFile(ctx, newTestLogger(), server.URL+"/file", module, registry); err != nil {
|
|
t.Fatalf("error: %s", err)
|
|
}
|
|
|
|
cert, err := newCertificate(certPEM)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkCertificateMetrics(cert, registry, t)
|
|
}
|