prometheus
115 строк · 4.0 Кб
1// Copyright 2022 The Prometheus Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14package ionos15
16import (17"context"18"fmt"19"net/http"20"net/http/httptest"21"os"22"testing"23
24ionoscloud "github.com/ionos-cloud/sdk-go/v6"25"github.com/prometheus/common/config"26"github.com/prometheus/common/model"27"github.com/stretchr/testify/require"28)
29
30var (31ionosTestBearerToken = config.Secret("jwt")32ionosTestDatacenterID = "8feda53f-15f0-447f-badf-ebe32dad2fc0"33)
34
35func TestIONOSServerRefresh(t *testing.T) {36mock := httptest.NewServer(http.HandlerFunc(mockIONOSServers))37defer mock.Close()38
39cfg := DefaultSDConfig40cfg.DatacenterID = ionosTestDatacenterID41cfg.HTTPClientConfig.BearerToken = ionosTestBearerToken42cfg.ionosEndpoint = mock.URL43
44d, err := newServerDiscovery(&cfg, nil)45require.NoError(t, err)46
47ctx := context.Background()48tgs, err := d.refresh(ctx)49require.NoError(t, err)50
51require.Len(t, tgs, 1)52
53tg := tgs[0]54require.NotNil(t, tg)55require.NotNil(t, tg.Targets)56require.Len(t, tg.Targets, 2)57
58for i, lbls := range []model.LabelSet{59{60"__address__": "85.215.243.177:80",61"__meta_ionos_server_availability_zone": "ZONE_2",62"__meta_ionos_server_boot_cdrom_id": "0e4d57f9-cd78-11e9-b88c-525400f64d8d",63"__meta_ionos_server_cpu_family": "INTEL_SKYLAKE",64"__meta_ionos_server_id": "b501942c-4e08-43e6-8ec1-00e59c64e0e4",65"__meta_ionos_server_ip": ",85.215.243.177,185.56.150.9,85.215.238.118,",66"__meta_ionos_server_nic_ip_metrics": ",85.215.243.177,",67"__meta_ionos_server_nic_ip_unnamed": ",185.56.150.9,85.215.238.118,",68"__meta_ionos_server_lifecycle": "AVAILABLE",69"__meta_ionos_server_name": "prometheus-2",70"__meta_ionos_server_servers_id": "8feda53f-15f0-447f-badf-ebe32dad2fc0/servers",71"__meta_ionos_server_state": "RUNNING",72"__meta_ionos_server_type": "ENTERPRISE",73},74{75"__address__": "85.215.248.84:80",76"__meta_ionos_server_availability_zone": "ZONE_1",77"__meta_ionos_server_boot_cdrom_id": "0e4d57f9-cd78-11e9-b88c-525400f64d8d",78"__meta_ionos_server_cpu_family": "INTEL_SKYLAKE",79"__meta_ionos_server_id": "523415e6-ff8c-4dc0-86d3-09c256039b30",80"__meta_ionos_server_ip": ",85.215.248.84,",81"__meta_ionos_server_nic_ip_unnamed": ",85.215.248.84,",82"__meta_ionos_server_lifecycle": "AVAILABLE",83"__meta_ionos_server_name": "prometheus-1",84"__meta_ionos_server_servers_id": "8feda53f-15f0-447f-badf-ebe32dad2fc0/servers",85"__meta_ionos_server_state": "RUNNING",86"__meta_ionos_server_type": "ENTERPRISE",87},88} {89t.Run(fmt.Sprintf("item %d", i), func(t *testing.T) {90require.Equal(t, lbls, tg.Targets[i])91})92}93}
94
95func mockIONOSServers(w http.ResponseWriter, r *http.Request) {96if r.Header.Get("Authorization") != fmt.Sprintf("Bearer %s", ionosTestBearerToken) {97http.Error(w, "bad token", http.StatusUnauthorized)98return99}100if r.URL.Path != fmt.Sprintf("%s/datacenters/%s/servers", ionoscloud.DefaultIonosBasePath, ionosTestDatacenterID) {101http.Error(w, fmt.Sprintf("bad url: %s", r.URL.Path), http.StatusNotFound)102return103}104w.Header().Set("Content-Type", "application/json")105server, err := os.ReadFile("testdata/servers.json")106if err != nil {107http.Error(w, err.Error(), http.StatusInternalServerError)108return109}110_, err = w.Write(server)111if err != nil {112http.Error(w, err.Error(), http.StatusInternalServerError)113return114}115}
116