mirror of
https://github.com/grafana/grafana.git
synced 2025-01-17 04:02:50 -06:00
37d39de36d
* Storage server runs own instrumentation server if its the sole target. Starts adding some sample metrics for now. * adds metric for failed optimistic locks * refactors metrics registration to own method on service for testability. Adds tests. * Register sql storage server metrics from within the service * fixes test * troubleshooting drone test failures. Maybe timing when starting instrumentation server? * Waits until instrumentation server has started. Updates tests. * defer wont get called unless theres an error. removing. * wait for instrumentation server to be running * linter - close res body * use port 3000 for metrics and removes test metric inc() call * fixes test - updates port * refactors module server to provide an instrumentation server module when there is no ALL or CORE target provided and running as single target * make instrumentation server a dependency of all modules that do not run their own http server * adds module server test * adds tests for instrumentation service and removes old tests that aren't needed * ignore error in test * uses helper to start and run service * when running wait on ctx done or http server err * wait for http server * removes println * updates module server test to be integration test * require no error in goroutine * skips integration test when GRAFANA_TEST_DB not defined * move http server start into start, verify returned content * make test error when run fails * try waiting longer and see if drone tests pass * update integration test mysql creds to match drone * go back to only waiting half second * debug log drone mysql connection string * use same db connection config as drone * try using same hostname as drone * cant use localhost as mysql hostname in drone tests. Need to parse it from the cfg db connection string --------- Co-authored-by: Dan Cech <dcech@grafana.com>
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/grafana/dskit/services"
|
|
"github.com/grafana/grafana/pkg/infra/log"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestRunInstrumentationService(t *testing.T) {
|
|
s, err := NewInstrumentationService(log.New("test-logger"))
|
|
require.NoError(t, err)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 300*time.Second)
|
|
defer cancel()
|
|
|
|
err = services.StartAndAwaitRunning(ctx, s)
|
|
require.NoError(t, err)
|
|
|
|
testCounter := prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: "test_counter",
|
|
})
|
|
err = prometheus.Register(testCounter)
|
|
require.NoError(t, err)
|
|
|
|
testCounter.Inc()
|
|
|
|
time.Sleep(100 * time.Millisecond)
|
|
|
|
client := http.Client{}
|
|
res, err := client.Get("http://localhost:3000/metrics")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 200, res.StatusCode)
|
|
|
|
b, err := io.ReadAll(res.Body)
|
|
require.NoError(t, err)
|
|
resp := string(b[len(b)-16:])
|
|
assert.Equal(t, "\ntest_counter 1\n", resp)
|
|
|
|
err = res.Body.Close()
|
|
require.NoError(t, err)
|
|
|
|
err = services.StopAndAwaitTerminated(ctx, s)
|
|
require.NoError(t, err)
|
|
}
|