/// <summary> /// Return test credentials and URI using AAD auth for an OrgID account. Use this method with caution, it may take a dependency on ADAL /// </summary> /// <returns>The test credentials, or null if the appropriate environment variable is not set.</returns> public static TestEnvironment GetTestEnvironment() { string connectionString = Environment.GetEnvironmentVariable(TestCSMOrgIdConnectionStringKey); TestEnvironment testEnv = new TestEnvironment(TestUtilities.ParseConnectionString(connectionString)); if (HttpMockServer.Mode == HttpRecorderMode.Playback) { testEnv.UserName = TestEnvironment.UserIdDefault; SetEnvironmentSubscriptionId(testEnv, connectionString); testEnv.TokenInfo[TokenAudience.Management] = new TokenCredentials(TestEnvironment.RawToken); testEnv.TokenInfo[TokenAudience.Graph] = new TokenCredentials(TestEnvironment.RawGraphToken); } else //Record or None { if (!string.IsNullOrEmpty(connectionString)) { IDictionary <string, string> parsedConnection = TestUtilities.ParseConnectionString(connectionString); foreach (var keyVal in CustomEnvValues) { parsedConnection[keyVal.Key] = keyVal.Value; } testEnv = new TestEnvironment(parsedConnection); if (parsedConnection.ContainsKey(TestEnvironment.RawToken)) { testEnv.TokenInfo[TokenAudience.Management] = new TokenCredentials(TestEnvironment.RawToken); testEnv.TokenInfo[TokenAudience.Graph] = new TokenCredentials(TestEnvironment.RawGraphToken); } else { string password = null; parsedConnection.TryGetValue(TestEnvironment.AADPasswordKey, out password); if (testEnv.UserName != null && password != null) { TestEnvironmentFactory.LoginUserAsync( testEnv.TokenInfo, testEnv.Tenant, testEnv.UserName, password, testEnv.Endpoints) .ConfigureAwait(false).GetAwaiter().GetResult(); } else if (testEnv.ServicePrincipal != null && password != null) { TestEnvironmentFactory.LoginServicePrincipalAsync( testEnv.TokenInfo, testEnv.Tenant, testEnv.ServicePrincipal, password, testEnv.Endpoints) .ConfigureAwait(false).GetAwaiter().GetResult(); } #if NET45 else { TestEnvironmentFactory.LoginWithPromptAsync( testEnv.TokenInfo, testEnv.Tenant, testEnv.Endpoints); } #endif } }//end-of-if connectionString present // Management Clients that are not subscription based should set "SubscriptionId=None" in // the connection string. if (testEnv.SubscriptionId == null || !testEnv.SubscriptionId.Equals("None", StringComparison.OrdinalIgnoreCase)) { //Getting subscriptions from server var subscriptions = ListSubscriptions( testEnv.BaseUri.ToString(), testEnv.TokenInfo[TokenAudience.Management]); if (subscriptions.Count == 0) { throw new Exception("Logged in account had no associated subscriptions. We are in " + testEnv.Endpoints.Name + " environment and the tenant is " + testEnv.Tenant + ". Please check if the subscription is in the " + "correct tenant and environment. You can set the envt. variable - " + "TEST_CSM_ORGID_AUTHENTICATION=SubscriptionId=<subscription-id>;" + "Environment=<Env-name>;Tenant=<tenant-id>"); } bool matchingSubscription = false; //SubscriptionId is provided in envt. variable if (testEnv.SubscriptionId != null) { matchingSubscription = subscriptions.Any(item => item.SubscriptionId == testEnv.SubscriptionId); if (!matchingSubscription) { throw new Exception("The provided SubscriptionId in the envt. variable - \"" + testEnv.SubscriptionId + "\" does not match the list of subscriptions associated with this account."); } } else { if (subscriptions.Count > 1) { throw new Exception("There are multiple subscriptions associated with the logged in account. " + "Please specify the subscription to use in the connection string. Please set " + "the envt. variable - TEST_CSM_ORGID_AUTHENTICATION=SubscriptionId=<subscription-id>"); } testEnv.SubscriptionId = subscriptions[0].SubscriptionId; } } if (testEnv.SubscriptionId == null) { throw new Exception("Subscription Id was not provided in environment variable. " + "Please set " + "the envt. variable - TEST_CSM_ORGID_AUTHENTICATION=SubscriptionId=<subscription-id>. " + "If SubscriptionId is not required for your management client then please set it to " + "'None' in the above mentioned envt. variable."); } SetEnvironmentSubscriptionId(testEnv, connectionString); } return(testEnv); }