67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
package middleware
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"os"
 | 
						|
 | 
						|
	. "github.com/onsi/ginkgo/v2"
 | 
						|
	. "github.com/onsi/gomega"
 | 
						|
 | 
						|
	"github.com/prometheus/client_golang/prometheus"
 | 
						|
	"github.com/prometheus/client_golang/prometheus/testutil"
 | 
						|
)
 | 
						|
 | 
						|
var _ = Describe("Instrumentation suite", func() {
 | 
						|
	type requestTableInput struct {
 | 
						|
		registry        *prometheus.Registry
 | 
						|
		requestString   string
 | 
						|
		expectedHandler http.Handler
 | 
						|
		expectedMetrics []string
 | 
						|
		expectedStatus  int
 | 
						|
		// Prometheus output is large so is stored in testdata
 | 
						|
		expectedResultsFile string
 | 
						|
	}
 | 
						|
 | 
						|
	DescribeTable("when serving a request",
 | 
						|
		func(in *requestTableInput) {
 | 
						|
			req := httptest.NewRequest("", in.requestString, nil)
 | 
						|
 | 
						|
			rw := httptest.NewRecorder()
 | 
						|
 | 
						|
			handler := NewRequestMetrics(in.registry)(in.expectedHandler)
 | 
						|
			handler.ServeHTTP(rw, req)
 | 
						|
 | 
						|
			Expect(rw.Code).To(Equal(in.expectedStatus))
 | 
						|
 | 
						|
			expectedPrometheusText, err := os.Open(in.expectedResultsFile)
 | 
						|
			Expect(err).NotTo(HaveOccurred())
 | 
						|
 | 
						|
			err = testutil.GatherAndCompare(in.registry, expectedPrometheusText, in.expectedMetrics...)
 | 
						|
			Expect(err).NotTo(HaveOccurred())
 | 
						|
		},
 | 
						|
		Entry("successfully", func() *requestTableInput {
 | 
						|
			in := &requestTableInput{
 | 
						|
				registry:      prometheus.NewRegistry(),
 | 
						|
				requestString: "http://example.com/metrics",
 | 
						|
				expectedMetrics: []string{
 | 
						|
					"oauth2_proxy_requests_total",
 | 
						|
				},
 | 
						|
				expectedStatus:      200,
 | 
						|
				expectedResultsFile: "testdata/metrics/successfulrequest.txt",
 | 
						|
			}
 | 
						|
			in.expectedHandler = NewMetricsHandler(in.registry, in.registry)
 | 
						|
 | 
						|
			return in
 | 
						|
		}()),
 | 
						|
		Entry("with not found", &requestTableInput{
 | 
						|
			registry:            prometheus.NewRegistry(),
 | 
						|
			requestString:       "http://example.com/",
 | 
						|
			expectedHandler:     http.NotFoundHandler(),
 | 
						|
			expectedMetrics:     []string{"oauth2_proxy_requests_total"},
 | 
						|
			expectedStatus:      404,
 | 
						|
			expectedResultsFile: "testdata/metrics/notfoundrequest.txt",
 | 
						|
		}),
 | 
						|
	)
 | 
						|
})
 |