microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v2.0.8

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

core/test/Microsoft.Teams.Core.UnitTests/Hosting/BotConfigTests.cs

187lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using Microsoft.Extensions.Configuration;
5using Microsoft.Extensions.DependencyInjection;
6using Microsoft.Teams.Core.Hosting;
7
8namespace Microsoft.Teams.Core.UnitTests.Hosting;
9
10public class BotConfigTests
11{
12 private static ServiceCollection BuildServices(Dictionary<string, string?> configData)
13 {
14 IConfigurationRoot configuration = new ConfigurationBuilder()
15 .AddInMemoryCollection(configData)
16 .Build();
17
18 ServiceCollection services = new();
19 services.AddSingleton<IConfiguration>(configuration);
20 services.AddLogging();
21 return services;
22 }
23
24 [Fact]
25 public void Resolve_OpenIdMetadataUrl_DefaultsToPublicCloud_WhenNotConfigured()
26 {
27 ServiceCollection services = BuildServices(new Dictionary<string, string?>
28 {
29 ["AzureAd:ClientId"] = "client-id",
30 ["AzureAd:TenantId"] = "tenant-id",
31 });
32
33 BotConfig config = BotConfig.Resolve(services);
34
35 Assert.Equal("https://login.botframework.com/v1/.well-known/openid-configuration", config.OpenIdMetadataUrl);
36 }
37
38 [Fact]
39 public void Resolve_EntraInstance_DefaultsToPublicCloud_WhenNotConfigured()
40 {
41 ServiceCollection services = BuildServices(new Dictionary<string, string?>
42 {
43 ["AzureAd:ClientId"] = "client-id",
44 ["AzureAd:TenantId"] = "tenant-id",
45 });
46
47 BotConfig config = BotConfig.Resolve(services);
48
49 Assert.Equal("https://login.microsoftonline.com/", config.EntraInstance);
50 }
51
52 [Theory]
53 [InlineData("https://login.botframework.azure.us/v1/.well-known/openid-configuration")]
54 [InlineData("https://login.botframework.azure.cn/v1/.well-known/openid-configuration")]
55 public void Resolve_OpenIdMetadataUrl_HonorsBotFrameworkOverride(string configured)
56 {
57 ServiceCollection services = BuildServices(new Dictionary<string, string?>
58 {
59 ["AzureAd:ClientId"] = "client-id",
60 ["AzureAd:TenantId"] = "tenant-id",
61 ["BotFramework:OpenIdMetadataUrl"] = configured,
62 });
63
64 BotConfig config = BotConfig.Resolve(services);
65
66 Assert.Equal(configured, config.OpenIdMetadataUrl);
67 }
68
69 [Theory]
70 [InlineData("https://login.microsoftonline.us/")]
71 [InlineData("https://login.partner.microsoftonline.cn/")]
72 public void Resolve_EntraInstance_HonorsAzureAdInstanceOverride(string configured)
73 {
74 ServiceCollection services = BuildServices(new Dictionary<string, string?>
75 {
76 ["AzureAd:ClientId"] = "client-id",
77 ["AzureAd:TenantId"] = "tenant-id",
78 ["AzureAd:Instance"] = configured,
79 });
80
81 BotConfig config = BotConfig.Resolve(services);
82
83 Assert.Equal(configured, config.EntraInstance);
84 }
85
86 [Fact]
87 public void Resolve_BotTokenIssuer_DefaultsToPublicCloud_WhenNotConfigured()
88 {
89 ServiceCollection services = BuildServices(new Dictionary<string, string?>
90 {
91 ["AzureAd:ClientId"] = "client-id",
92 ["AzureAd:TenantId"] = "tenant-id",
93 });
94
95 BotConfig config = BotConfig.Resolve(services);
96
97 Assert.Equal("https://api.botframework.com", config.BotTokenIssuer);
98 }
99
100 [Theory]
101 [InlineData("https://api.botframework.us")]
102 [InlineData("https://api.botframework.azure.cn")]
103 public void Resolve_BotTokenIssuer_HonorsBotFrameworkOverride(string configured)
104 {
105 ServiceCollection services = BuildServices(new Dictionary<string, string?>
106 {
107 ["AzureAd:ClientId"] = "client-id",
108 ["AzureAd:TenantId"] = "tenant-id",
109 ["BotFramework:BotTokenIssuer"] = configured,
110 });
111
112 BotConfig config = BotConfig.Resolve(services);
113
114 Assert.Equal(configured, config.BotTokenIssuer);
115 }
116
117 [Fact]
118 public void Resolve_BotFrameworkSection_IsIndependentOfAzureAdSectionName()
119 {
120 ServiceCollection services = BuildServices(new Dictionary<string, string?>
121 {
122 ["CustomAuth:ClientId"] = "client-id",
123 ["BotFramework:OpenIdMetadataUrl"] = "https://login.botframework.azure.us/v1/.well-known/openid-configuration",
124 ["BotFramework:BotTokenIssuer"] = "https://api.botframework.us",
125 });
126
127 BotConfig config = BotConfig.Resolve(services, "CustomAuth");
128
129 Assert.Equal("https://login.botframework.azure.us/v1/.well-known/openid-configuration", config.OpenIdMetadataUrl);
130 Assert.Equal("https://api.botframework.us", config.BotTokenIssuer);
131 }
132
133 [Fact]
134 public void Resolve_ThrowsInvalidOperationException_WhenOpenIdMetadataUrlIsNotAbsoluteUri()
135 {
136 ServiceCollection services = BuildServices(new Dictionary<string, string?>
137 {
138 ["AzureAd:ClientId"] = "client-id",
139 ["BotFramework:OpenIdMetadataUrl"] = "not-a-uri",
140 });
141
142 InvalidOperationException ex = Assert.Throws<InvalidOperationException>(() => BotConfig.Resolve(services));
143 Assert.Contains("BotFramework:OpenIdMetadataUrl", ex.Message, StringComparison.Ordinal);
144 }
145
146 [Fact]
147 public void Resolve_ThrowsInvalidOperationException_WhenBotTokenIssuerIsNotAbsoluteUri()
148 {
149 ServiceCollection services = BuildServices(new Dictionary<string, string?>
150 {
151 ["AzureAd:ClientId"] = "client-id",
152 ["BotFramework:BotTokenIssuer"] = "not a uri",
153 });
154
155 InvalidOperationException ex = Assert.Throws<InvalidOperationException>(() => BotConfig.Resolve(services));
156 Assert.Contains("BotFramework:BotTokenIssuer", ex.Message, StringComparison.Ordinal);
157 }
158
159 [Fact]
160 public void Resolve_ThrowsInvalidOperationException_WhenInstanceIsNotAbsoluteUri()
161 {
162 ServiceCollection services = BuildServices(new Dictionary<string, string?>
163 {
164 ["AzureAd:ClientId"] = "client-id",
165 ["AzureAd:Instance"] = "login.microsoftonline.us",
166 });
167
168 InvalidOperationException ex = Assert.Throws<InvalidOperationException>(() => BotConfig.Resolve(services));
169 Assert.Contains("AzureAd:Instance", ex.Message, StringComparison.Ordinal);
170 }
171
172 [Fact]
173 public void Resolve_DoesNotThrow_WhenOverridesAreValidAbsoluteUris()
174 {
175 ServiceCollection services = BuildServices(new Dictionary<string, string?>
176 {
177 ["AzureAd:ClientId"] = "client-id",
178 ["AzureAd:Instance"] = "https://login.microsoftonline.us/",
179 ["BotFramework:OpenIdMetadataUrl"] = "https://login.botframework.azure.us/v1/.well-known/openid-configuration",
180 ["BotFramework:BotTokenIssuer"] = "https://api.botframework.us",
181 });
182
183 Exception? caught = Record.Exception(() => BotConfig.Resolve(services));
184
185 Assert.Null(caught);
186 }
187}
188