You've already forked ssl_exporter
mirror of
https://github.com/ribbybibby/ssl_exporter.git
synced 2025-07-09 23:45:52 +02:00
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
![]() |
package prober
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"crypto/x509"
|
||
|
"encoding/pem"
|
||
|
"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) {
|
||
|
certPEM, _ := test.GenerateTestCertificate(time.Now().Add(time.Hour * 1))
|
||
|
block, _ := pem.Decode([]byte(certPEM))
|
||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||
|
if err != nil {
|
||
|
t.Fatalf("parsing cert: %s", err)
|
||
|
}
|
||
|
|
||
|
server := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||
|
w.Write(certPEM)
|
||
|
}))
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
|
||
|
checkCertificateMetrics(cert, registry, t)
|
||
|
}
|
||
|
|
||
|
func TestProbeHTTPFile_HTTPS(t *testing.T) {
|
||
|
server, certPEM, _, caFile, teardown, err := test.SetupHTTPSServer()
|
||
|
if err != nil {
|
||
|
t.Fatalf(err.Error())
|
||
|
}
|
||
|
defer teardown()
|
||
|
|
||
|
block, _ := pem.Decode([]byte(certPEM))
|
||
|
cert, err := x509.ParseCertificate(block.Bytes)
|
||
|
if err != nil {
|
||
|
t.Fatalf("parsing cert: %s", err)
|
||
|
}
|
||
|
|
||
|
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)
|
||
|
}
|
||
|
|
||
|
checkCertificateMetrics(cert, registry, t)
|
||
|
}
|