master
go 79 lines 2.38 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package postgres
4
5 import (
6 "context"
7 "errors"
8 "testing"
9 "time"
10
11 "github.com/Azure/azure-sdk-for-go/sdk/azcore"
12 "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
13 "github.com/jackc/pgx/v5"
14 "github.com/netdata/netdata/go/plugins/plugin/go.d/pkg/cloudauth"
15 "github.com/stretchr/testify/assert"
16 "github.com/stretchr/testify/require"
17 )
18
19 type fakeAADTokenCredential struct {
20 getToken func(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error)
21 }
22
23 func (f fakeAADTokenCredential) GetToken(ctx context.Context, opts policy.TokenRequestOptions) (azcore.AccessToken, error) {
24 return f.getToken(ctx, opts)
25 }
26
27 func TestCollector_openAzureADConnection_NoTokenProvider(t *testing.T) {
28 c := New()
29 cfg, err := pgx.ParseConfig("postgres://netdata@127.0.0.1:5432/postgres")
30 require.NoError(t, err)
31
32 db, err := c.openAzureADConnection(cfg, "Postgres database")
33 assert.Nil(t, db)
34 assert.ErrorContains(t, err, "cloud auth token provider is not initialized")
35 }
36
37 func TestCollector_azureADBeforeConnect_SetsPassword(t *testing.T) {
38 cred := fakeAADTokenCredential{
39 getToken: func(context.Context, policy.TokenRequestOptions) (azcore.AccessToken, error) {
40 return azcore.AccessToken{
41 Token: "aad-token",
42 ExpiresOn: time.Now().Add(30 * time.Minute),
43 }, nil
44 },
45 }
46 provider, err := cloudauth.NewTokenProvider(cred, []string{"scope"}, time.Minute)
47 require.NoError(t, err)
48
49 c := New()
50 c.azureTokenProvider = provider
51
52 cfg, err := pgx.ParseConfig("postgres://netdata@127.0.0.1:5432/postgres")
53 require.NoError(t, err)
54
55 err = c.azureADBeforeConnect(context.Background(), cfg)
56 require.NoError(t, err)
57 assert.Equal(t, "aad-token", cfg.Password)
58 }
59
60 func TestCollector_azureADBeforeConnect_ProviderError(t *testing.T) {
61 cred := fakeAADTokenCredential{
62 getToken: func(context.Context, policy.TokenRequestOptions) (azcore.AccessToken, error) {
63 return azcore.AccessToken{}, errors.New("token failure")
64 },
65 }
66 provider, err := cloudauth.NewTokenProvider(cred, []string{"scope"}, time.Minute)
67 require.NoError(t, err)
68
69 c := New()
70 c.azureTokenProvider = provider
71
72 cfg, err := pgx.ParseConfig("postgres://netdata@127.0.0.1:5432/postgres")
73 require.NoError(t, err)
74 cfg.Password = "old-password"
75
76 err = c.azureADBeforeConnect(context.Background(), cfg)
77 assert.ErrorContains(t, err, "token failure")
78 assert.Equal(t, "old-password", cfg.Password)
79 }