| 
									
										
										
										
											2024-04-08 22:35:01 +08:00
										 |  |  | package server | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"io" | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/dskit/services" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/infra/log" | 
					
						
							| 
									
										
										
										
											2024-05-29 16:02:35 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2024-04-08 22:35:01 +08:00
										 |  |  | 	"github.com/prometheus/client_golang/prometheus" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestRunInstrumentationService(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2024-05-29 16:02:35 +08:00
										 |  |  | 	cfg := setting.NewCfg() | 
					
						
							|  |  |  | 	cfg.HTTPPort = "3001" | 
					
						
							| 
									
										
										
										
											2025-04-26 01:08:44 +08:00
										 |  |  | 	ms := ModuleServer{ | 
					
						
							|  |  |  | 		log:          log.New("test-logger"), | 
					
						
							|  |  |  | 		cfg:          cfg, | 
					
						
							|  |  |  | 		promGatherer: prometheus.DefaultGatherer, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	s, err := ms.initInstrumentationServer() | 
					
						
							| 
									
										
										
										
											2024-04-08 22:35:01 +08:00
										 |  |  | 	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{} | 
					
						
							| 
									
										
										
										
											2024-05-29 16:02:35 +08:00
										 |  |  | 	res, err := client.Get("http://localhost:3001/metrics") | 
					
						
							| 
									
										
										
										
											2024-04-08 22:35:01 +08:00
										 |  |  | 	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) | 
					
						
							|  |  |  | } |