1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT License.
3
4package azidentity
5
6import (
7	"context"
8	"net/http"
9	"net/url"
10	"strings"
11	"testing"
12
13	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
14	"github.com/Azure/azure-sdk-for-go/sdk/internal/mock"
15)
16
17func TestIMDSEndpointParse(t *testing.T) {
18	_, err := url.Parse(imdsEndpoint)
19	if err != nil {
20		t.Fatalf("Failed to parse the IMDS endpoint: %v", err)
21	}
22}
23
24func TestMSITelemetryDefaultUserAgent(t *testing.T) {
25	srv, close := mock.NewServer()
26	defer close()
27	srv.AppendResponse(mock.WithBody([]byte(accessTokenRespSuccess)))
28	options := ManagedIdentityCredentialOptions{
29		HTTPClient: srv,
30	}
31	pipeline := newDefaultMSIPipeline(options)
32	req, err := azcore.NewRequest(context.Background(), http.MethodGet, srv.URL())
33	if err != nil {
34		t.Fatalf("Unexpected error: %v", err)
35	}
36	resp, err := pipeline.Do(req)
37	if err != nil {
38		t.Fatalf("Unexpected error: %v", err)
39	}
40	if resp.StatusCode != http.StatusOK {
41		t.Fatalf("unexpected status code: %d", resp.StatusCode)
42	}
43	if ua := resp.Request.Header.Get(azcore.HeaderUserAgent); !strings.HasPrefix(ua, UserAgent) {
44		t.Fatalf("unexpected User-Agent %s", ua)
45	}
46}
47
48func TestMSITelemetryCustom(t *testing.T) {
49	customTelemetry := "customvalue"
50	srv, close := mock.NewServer()
51	defer close()
52	srv.AppendResponse(mock.WithBody([]byte(accessTokenRespSuccess)))
53	options := ManagedIdentityCredentialOptions{
54		HTTPClient: srv,
55	}
56	options.Telemetry.Value = customTelemetry
57	pipeline := newDefaultMSIPipeline(options)
58	req, err := azcore.NewRequest(context.Background(), http.MethodGet, srv.URL())
59	if err != nil {
60		t.Fatalf("Unexpected error: %v", err)
61	}
62	resp, err := pipeline.Do(req)
63	if err != nil {
64		t.Fatalf("Unexpected error: %v", err)
65	}
66	if resp.StatusCode != http.StatusOK {
67		t.Fatalf("unexpected status code: %d", resp.StatusCode)
68	}
69	if ua := resp.Request.Header.Get(azcore.HeaderUserAgent); !strings.HasPrefix(ua, customTelemetry+" "+UserAgent) {
70		t.Fatalf("unexpected User-Agent %s", ua)
71	}
72}
73