private static void AssertCurrentTelemetry(
            HttpRequestMessage requestMessage,
            ApiIds apiId,
            string regionSource,
            string region                    = TestConstants.Region,
            bool isCacheSerialized           = false,
            string userProvidedRegion        = "",
            string isValidUserProvidedRegion = "",
            string fallbackToGlobal          = "0")
        {
            string[] telemetryCategories = requestMessage.Headers.GetValues(
                TelemetryConstants.XClientCurrentTelemetry).Single().Split('|');

            Assert.AreEqual(3, telemetryCategories.Length);
            Assert.AreEqual(1, telemetryCategories[0].Split(',').Length);                           // version
            Assert.AreEqual(2, telemetryCategories[1].Split(',').Length);                           // api_id, cache_info
            Assert.AreEqual(7, telemetryCategories[2].Split(',').Length);                           // platform_fields

            Assert.AreEqual(TelemetryConstants.HttpTelemetrySchemaVersion, telemetryCategories[0]); // version

            Assert.AreEqual(
                apiId.ToString("D"),
                telemetryCategories[1].Split(',')[0]); // current_api_id

            string[] platformConfig = telemetryCategories[2].Split(',');
            Assert.AreEqual(region, platformConfig[0]);
            Assert.AreEqual(regionSource, platformConfig[1]);
            Assert.AreEqual(isCacheSerialized ? "1" : "0", platformConfig[2]);
            Assert.AreEqual(userProvidedRegion, platformConfig[3]);
            Assert.AreEqual(isValidUserProvidedRegion, platformConfig[4]);
            Assert.AreEqual(fallbackToGlobal, platformConfig[5]);
        }
        private async Task <IEnumerable <IAccount> > GetAccountsInternalAsync(ApiIds apiId, string homeAccountIdFilter = null)
        {
            RequestContext requestContext = CreateRequestContext(Guid.NewGuid());

            var authParameters = new AuthenticationRequestParameters(
                ServiceBundle,
                UserTokenCacheInternal,
                new AcquireTokenCommonParameters()
            {
                ApiId = apiId
            },
                requestContext,
                homeAccountIdFilter);

            // a simple session consisting of a single call
            var cacheSessionManager = new CacheSessionManager(
                UserTokenCacheInternal,
                authParameters);

            var accountsFromCache = await cacheSessionManager.GetAccountsAsync().ConfigureAwait(false);

            var accountsFromBroker = await GetAccountsFromBrokerAsync(homeAccountIdFilter, cacheSessionManager).ConfigureAwait(false);

            accountsFromCache  = accountsFromCache ?? Enumerable.Empty <IAccount>();
            accountsFromBroker = accountsFromBroker ?? Enumerable.Empty <IAccount>();

            ServiceBundle.DefaultLogger.Info($"Found {accountsFromCache.Count()} cache accounts and {accountsFromBroker.Count()} broker accounts");
            IEnumerable <IAccount> cacheAndBrokerAccounts = MergeAccounts(accountsFromCache, accountsFromBroker);

            ServiceBundle.DefaultLogger.Info($"Returning {cacheAndBrokerAccounts.Count()} accounts");
            return(cacheAndBrokerAccounts);
        }
Exemple #3
0
        private static void AssertCurrentTelemetry(
            HttpRequestMessage requestMessage,
            ApiIds apiId,
            bool forceRefresh,
            bool isFirstRequest)
        {
            string actualCurrentTelemetry = requestMessage.Headers.GetValues(
                TelemetryConstants.XClientCurrentTelemetry).Single();

            var actualTelemetryParts = actualCurrentTelemetry.Split('|');

            Assert.AreEqual(3, actualTelemetryParts.Length);

            Assert.AreEqual(TelemetryConstants.HttpTelemetrySchemaVersion2, actualTelemetryParts[0]); // version

            Assert.AreEqual(
                ((int)apiId).ToString(CultureInfo.InvariantCulture),
                actualTelemetryParts[1].Split(',')[0]);                                // current_api_id

            Assert.IsTrue(actualTelemetryParts[1].EndsWith(forceRefresh ? "1" : "0")); // force_refresh flag

            Assert.AreEqual(TestConstants.Region, actualTelemetryParts[2].Split(',')[0]);

            if (isFirstRequest)
            {
                Assert.IsTrue(actualTelemetryParts[2].EndsWith(((int)RegionSource.EnvVariable).ToString(CultureInfo.InvariantCulture)));
            }
            else
            {
                Assert.IsTrue(actualTelemetryParts[2].EndsWith(((int)RegionSource.Cache).ToString(CultureInfo.InvariantCulture)));
            }
        }
        private static void AssertCurrentTelemetry(
            HttpRequestMessage requestMessage,
            ApiIds apiId,
            CacheInfoTelemetry cacheInfo,
            bool isCacheSerialized    = false,
            bool isLegacyCacheEnabled = true)
        {
            string[] telemetryCategories = requestMessage.Headers.GetValues(
                TelemetryConstants.XClientCurrentTelemetry).Single().Split('|');

            Assert.AreEqual(3, telemetryCategories.Length);
            Assert.AreEqual(1, telemetryCategories[0].Split(',').Length);                           // version
            Assert.AreEqual(5, telemetryCategories[1].Split(',').Length);                           // api_id, cache_info, region_used, region_source, region_outcome
            Assert.AreEqual(2, telemetryCategories[2].Split(',').Length);                           // platform_fields

            Assert.AreEqual(TelemetryConstants.HttpTelemetrySchemaVersion, telemetryCategories[0]); // version

            Assert.AreEqual(
                apiId.ToString("D"),
                telemetryCategories[1].Split(',')[0]);                                               // current_api_id

            Assert.AreEqual(cacheInfo.ToString("D"), telemetryCategories[1].Split(',')[1]);          // cache_info

            Assert.AreEqual(isCacheSerialized ? "1" : "0", telemetryCategories[2].Split(',')[0]);    // is_cache_serialized

            Assert.AreEqual(isLegacyCacheEnabled ? "1" : "0", telemetryCategories[2].Split(',')[1]); // is_legacy_cache_enabled
        }
        private static void AssertCurrentTelemetry(
            HttpRequestMessage requestMessage,
            ApiIds apiId,
            string regionSource,
            string regionOutcome,
            string region          = TestConstants.Region,
            bool isCacheSerialized = false)
        {
            string[] telemetryCategories = requestMessage.Headers.GetValues(
                TelemetryConstants.XClientCurrentTelemetry).Single().Split('|');

            Assert.AreEqual(3, telemetryCategories.Length);
            Assert.AreEqual(1, telemetryCategories[0].Split(',').Length);                           // version
            Assert.AreEqual(5, telemetryCategories[1].Split(',').Length);                           // api_id, cache_info, region_used, region_source, region_outcome
            Assert.AreEqual(2, telemetryCategories[2].Split(',').Length);                           // platform_fields

            Assert.AreEqual(TelemetryConstants.HttpTelemetrySchemaVersion, telemetryCategories[0]); // version

            Assert.AreEqual(
                apiId.ToString("D"),
                telemetryCategories[1].Split(',')[0]); // current_api_id
            Assert.AreEqual(
                region,
                telemetryCategories[1].Split(',')[2]); // region_used
            Assert.AreEqual(
                regionSource,
                telemetryCategories[1].Split(',')[3]); // region_source
            Assert.AreEqual(
                regionOutcome,
                telemetryCategories[1].Split(',')[4]); // region_outcome

            Assert.AreEqual(isCacheSerialized ? "1" : "0", telemetryCategories[2].Split(',')[0]);
        }
        private static void AssertCurrentTelemetry(
            HttpRequestMessage requestMessage,
            ApiIds apiId,
            bool forceRefresh,
            string regionSource,
            bool isCacheSerialized           = false,
            string userProvidedRegion        = "",
            string isvalidUserProvidedRegion = "")
        {
            string actualCurrentTelemetry = requestMessage.Headers.GetValues(
                TelemetryConstants.XClientCurrentTelemetry).Single();

            var actualTelemetryParts = actualCurrentTelemetry.Split('|');

            Assert.AreEqual(3, actualTelemetryParts.Length);

            Assert.AreEqual(TelemetryConstants.HttpTelemetrySchemaVersion2, actualTelemetryParts[0]); // version

            Assert.AreEqual(
                ((int)apiId).ToString(CultureInfo.InvariantCulture),
                actualTelemetryParts[1].Split(',')[0]);                                // current_api_id

            Assert.IsTrue(actualTelemetryParts[1].EndsWith(forceRefresh ? "1" : "0")); // force_refresh flag

            string[] platformConfig = actualTelemetryParts[2].Split(',');
            Assert.AreEqual(isCacheSerialized ? "1" : "0", platformConfig[2]);
            Assert.AreEqual(TestConstants.Region, platformConfig[0]);
            Assert.AreEqual(regionSource, platformConfig[1]);
            Assert.AreEqual(userProvidedRegion, platformConfig[3]);
            Assert.AreEqual(isvalidUserProvidedRegion, platformConfig[4]);
        }
        private static void AssertCurrentTelemetry(
            HttpRequestMessage requestMessage,
            ApiIds apiId,
            bool forceRefresh,
            bool isCacheSerialized    = false,
            bool isLegacyCacheEnabled = true,
            string cacheRefresh       = "")
        {
            string actualCurrentTelemetry = requestMessage.Headers.GetValues(
                TelemetryConstants.XClientCurrentTelemetry).Single();

            var actualTelemetryParts = actualCurrentTelemetry.Split('|');

            Assert.AreEqual(3, actualTelemetryParts.Length);

            Assert.AreEqual(TelemetryConstants.HttpTelemetrySchemaVersion2, actualTelemetryParts[0]); // version

            Assert.AreEqual(
                ((int)apiId).ToString(CultureInfo.InvariantCulture),
                actualTelemetryParts[1].Split(',')[0]);                                               // current_api_id

            Assert.AreEqual(forceRefresh ? "1" : "0", actualTelemetryParts[1].Split(',')[1]);         // force_refresh flag

            Assert.AreEqual(isCacheSerialized ? "1" : "0", actualTelemetryParts[2].Split(',')[2]);    // is_cache_serialized

            Assert.AreEqual(isLegacyCacheEnabled ? "1" : "0", actualTelemetryParts[2].Split(',')[6]); // is_legacy_cache_enabled

            Assert.AreEqual(cacheRefresh, actualTelemetryParts[1].Split(',')[2]);                     // Cache_refresh
        }
Exemple #8
0
        public static AuthenticationRequestParameters CreateAuthenticationRequestParameters(
            IServiceBundle serviceBundle,
            Authority authority           = null,
            HashSet <string> scopes       = null,
            RequestContext requestContext = null,
            ApiIds apiID = ApiIds.None)
        {
            var commonParameters = new AcquireTokenCommonParameters
            {
                Scopes = scopes ?? TestConstants.s_scope,
                ApiId  = apiID
            };

            authority      = authority ?? Authority.CreateAuthority(TestConstants.AuthorityTestTenant);
            requestContext = requestContext ?? new RequestContext(serviceBundle, Guid.NewGuid())
            {
                ApiEvent = new Client.TelemetryCore.Internal.Events.ApiEvent(
                    serviceBundle.ApplicationLogger,
                    serviceBundle.PlatformProxy.CryptographyManager,
                    Guid.NewGuid().ToString())
            };

            return(new AuthenticationRequestParameters(
                       serviceBundle,
                       new TokenCache(serviceBundle, false),
                       commonParameters,
                       requestContext,
                       authority)
            {
            });
        }
Exemple #9
0
        private async Task <IEnumerable <IAccount> > GetAccountsInternalAsync(ApiIds apiId, string homeAccountIdFilter = null)
        {
            var accountsFromCache = await GetAccountsFromCacheAsync(apiId, homeAccountIdFilter).ConfigureAwait(false);

            IEnumerable <IAccount> cacheAndBrokerAccounts =
                await MergeWithBrokerAccountsAsync(accountsFromCache, homeAccountIdFilter).ConfigureAwait(false);

            return(cacheAndBrokerAccounts);
        }
        private async Task <IEnumerable <IAccount> > GetAccountsInternalAsync(ApiIds apiId, string homeAccountIdFilter = null)
        {
            var accountsFromCache = await GetAccountsFromCacheAsync(apiId, homeAccountIdFilter).ConfigureAwait(false);

            var accountsFromBroker = await GetAccountsFromBrokerAsync(homeAccountIdFilter).ConfigureAwait(false);

            ServiceBundle.DefaultLogger.Info($"Found {accountsFromCache.Count()} cache accounts and {accountsFromCache.Count()} broker accounts");
            IEnumerable <IAccount> cacheAndBrokerAccounts = MergeAccounts(accountsFromCache, accountsFromBroker);

            ServiceBundle.DefaultLogger.Verbose($"Returning {cacheAndBrokerAccounts.Count()} accounts");
            return(cacheAndBrokerAccounts);
        }
Exemple #11
0
        private async Task <IEnumerable <IAccount> > GetAccountsInternalAsync(ApiIds apiId, string homeAccountIdFilter, CancellationToken cancellationToken)
        {
            Guid           correlationId  = Guid.NewGuid();
            RequestContext requestContext = CreateRequestContext(correlationId, cancellationToken);

            requestContext.ApiEvent       = new ApiEvent(requestContext.Logger, requestContext.ServiceBundle.PlatformProxy.CryptographyManager, correlationId.ToString());
            requestContext.ApiEvent.ApiId = apiId;

            var authority = await Microsoft.Identity.Client.Instance.Authority.CreateAuthorityForRequestAsync(
                requestContext,
                null).ConfigureAwait(false);

            var authParameters = new AuthenticationRequestParameters(
                ServiceBundle,
                UserTokenCacheInternal,
                new AcquireTokenCommonParameters()
            {
                ApiId = apiId
            },
                requestContext,
                authority,
                homeAccountIdFilter);

            // a simple session consisting of a single call
            var cacheSessionManager = new CacheSessionManager(
                UserTokenCacheInternal,
                authParameters);

            var accountsFromCache = await cacheSessionManager.GetAccountsAsync().ConfigureAwait(false);

            var accountsFromBroker = await GetAccountsFromBrokerAsync(homeAccountIdFilter, cacheSessionManager, cancellationToken).ConfigureAwait(false);

            accountsFromCache  = accountsFromCache ?? Enumerable.Empty <IAccount>();
            accountsFromBroker = accountsFromBroker ?? Enumerable.Empty <IAccount>();

            ServiceBundle.ApplicationLogger.Info($"Found {accountsFromCache.Count()} cache accounts and {accountsFromBroker.Count()} broker accounts");
            IEnumerable <IAccount> cacheAndBrokerAccounts = MergeAccounts(accountsFromCache, accountsFromBroker);

            ServiceBundle.ApplicationLogger.Info($"Returning {cacheAndBrokerAccounts.Count()} accounts");
            return(cacheAndBrokerAccounts);
        }
Exemple #12
0
        private async Task <IEnumerable <IAccount> > GetAccountsFromCacheAsync(
            ApiIds apiId,
            string homeAccountIdFilter)
        {
            RequestContext requestContext = CreateRequestContext(Guid.NewGuid());

            var authParameters = new AuthenticationRequestParameters(
                ServiceBundle,
                UserTokenCacheInternal,
                new AcquireTokenCommonParameters()
            {
                ApiId = apiId
            },
                requestContext,
                homeAccountIdFilter);

            // a simple session consisting of a single call
            CacheSessionManager cacheSessionManager = new CacheSessionManager(
                UserTokenCacheInternal,
                authParameters);

            return(await cacheSessionManager.GetAccountsAsync().ConfigureAwait(false));
        }