public void SetUp()
 {
     TestDataSetup.CreateTestData(Context);
     dbAuthProvider = (DbAuthenticationProvider)AuthenticationFactory.GetAuthenticationProvider("DbAuthenticationProviderName");
     password       = ASCIIEncoding.ASCII.GetBytes("Password");
     username       = "******";
 }
Exemplo n.º 2
0
        public async Task GetApplicationData_ConvertsExcelToTheCorrectApplicationData()
        {
            Account            account            = TestDataSetup.CreateAccount();
            Category           category           = TestDataSetup.CreateCategory();
            AccountTransaction accountTransaction = TestDataSetup.CreateAccountTransaction();

            var excelPackage = new ExcelPackage();

            excelPackage.Workbook.Worksheets.Add(AccountsWorksheetName);
            excelPackage.Workbook.Worksheets[AccountsWorksheetName].Cells[2, 1].Value = account.Id;
            excelPackage.Workbook.Worksheets[AccountsWorksheetName].Cells[2, 2].Value = account.Name;

            excelPackage.Workbook.Worksheets.Add(CategoriesWorksheetName);
            excelPackage.Workbook.Worksheets[CategoriesWorksheetName].Cells[2, 1].Value = category.Id;
            excelPackage.Workbook.Worksheets[CategoriesWorksheetName].Cells[2, 2].Value = category.Name;
            excelPackage.Workbook.Worksheets[CategoriesWorksheetName].Cells[2, 3].Value = category.Budgeted;

            excelPackage.Workbook.Worksheets.Add(AccountTransactionsWorksheetName);
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 2].Value = accountTransaction.AccountId;
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 3].Value = accountTransaction.Date;
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 4].Value = accountTransaction.Payee;
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 5].Value = accountTransaction.CategoryId;
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 6].Value = accountTransaction.Memo;
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 7].Value = accountTransaction.Outflow;
            excelPackage.Workbook.Worksheets[AccountTransactionsWorksheetName].Cells[2, 8].Value = accountTransaction.Inflow;

            excelFileProcessor.Setup(efp => efp.LoadExcelPackageFromFile())
            .Returns(() => excelPackage);

            ApplicationData applicationData = await excelPersistenceService.GetApplicationData();

            Assert.AreEqual(1, applicationData.Accounts.Count);
            Assert.AreEqual(1, applicationData.Categories.Count);
            Assert.AreEqual(1, applicationData.AccountTransactions.Count);

            TestValidationHelper.ValidateAccountsAreEqual(account, applicationData.Accounts.FirstOrDefault());
            TestValidationHelper.ValidateCategoriesAreEqual(category, applicationData.Categories.FirstOrDefault());
            TestValidationHelper.ValidateAccountTransactionsAreEqual(accountTransaction, applicationData.AccountTransactions.FirstOrDefault());
        }
Exemplo n.º 3
0
        public async Task SaveApplicationData_TriesToSaveTheCorrectDataToFile()
        {
            var                appData            = new ApplicationData();
            Account            account            = TestDataSetup.CreateAccount();
            Category           category           = TestDataSetup.CreateCategory();
            AccountTransaction accountTransaction = TestDataSetup.CreateAccountTransaction();

            appData.Accounts.Add(account);
            appData.Categories.Add(category);
            appData.AccountTransactions.Add(accountTransaction);

            excelFileProcessor.Setup(efp => efp.SaveAs(It.IsAny <ExcelPackage>()))
            .Callback <ExcelPackage>(ep => {
                ValidateExcelPackageContainsAccount(ep, account);
                ValidateExcelPackageContainsCategory(ep, category);
                ValidateExcelPackageContainsAccountTransaction(ep, accountTransaction);
            });

            await excelPersistenceService.SaveApplicationData(appData);

            excelFileProcessor.Verify(efp => efp.SaveAs(It.IsAny <ExcelPackage>()), Times.Once);
        }
        static void Main(string[] args)
        {
            // configure more open connections to graph, so we can leverage concurrency.
            ServicePointManager.DefaultConnectionLimit = 32;
            ServicePointManager.ReusePort = true;

            try
            {
                // set up authentication based on the config specified in AuthSettings.cs (you should have a local git-ignoder AuthSettingsLocal.cs file where you initialize the values
                var authProvider          = AuthSettings.isUserAuthentication ? (MyAuthenticationProvider) new UserAuthenticationProvider() : (MyAuthenticationProvider) new AppOnlyAuthenticationProvider();
                GraphServiceClient client = GetAuthenticatedClient(authProvider);

                // set up logging
                EfficientRequestHandling.Logger.SetLogger(new OutputLogger(Console.OpenStandardOutput(), System.IO.File.Open("log.txt", FileMode.Create, FileAccess.Write, FileShare.Read)));

                // go to a specific scenario
                goto getAllGroupsWithMembers;

#pragma warning disable CS0164
#pragma warning disable CS0162
                #region User scenarios
                getAllUsers : ExecuteScenarioWithPerfMeasurement(client,
                                                                 $"Downloading all users using parallelization.",
                                                                 (requestManager) =>
                {
                    var users = UserScenarios.GetAllUsers(requestManager).ToArray();
                    return($"Finished downloading users: {users.Length}.");
                }, batchSize: 1);           // using batchSize=1 since this is more optimal with the paritioning approach used by this scenario.

                return;

                getAllUsersBasic : ExecuteScenarioWithPerfMeasurement(client,
                                                                      $"Downloading all users using non-optimized paging pattern.",
                                                                      (requestManager) =>
                {
                    var users = UserScenarios.GetAllUsersBasic(client).ToArray();
                    return($"Finished downloading users: {users.Length}.");
                });

                return;

                #endregion

                #region Group scenarios
                getAllGroupsWithMembers : ExecuteScenarioWithPerfMeasurement(client,
                                                                             $"Geting all groups with members.",
                                                                             (requestManager) =>
                {
                    var groups = GroupScenarios.GetAllGroupsWithMembers(requestManager).ToArray();
                    return($"Finished downloading groups with members: {groups.Length}.");
                }, batchSize: 1);          // using batchSize=1 since this is more optimal with the paritioning approach used by this scenario.

                return;

                #endregion

                #region Device scenarios

                getDeviceReport : ExecuteScenarioWithPerfMeasurement(client,
                                                                     $"Downloading all device state to generate a report.",
                                                                     (requestManager) =>
                {
                    var report = DeviceScenarios.GetDeviceReport(requestManager);
                    return($"Finished generating device report:\n{report}");
                }, batchSize: 1);

                return;

                #endregion

                #region Email scenarios
                getAllEmailsForOneUser : ExecuteScenarioWithPerfMeasurement(client,
                                                                            $"Geting all emails for a single user.",
                                                                            (requestManager) =>
                {
                    var emails = EmailScenarios.GetEmailsForSingleUser(requestManager, client.Me.Request().GetAsync().Result.Id).ToArray();
                    return($"Finished downloading emails for one user: {emails.Length}.");
                });

                return;

                getAllEmailsForAllUsers : ExecuteScenarioWithPerfMeasurement(client,
                                                                             $"Geting all emails for all users.",
                                                                             (requestManager) =>
                {
                    var emails = EmailScenarios.GetAllUsersWithCompleteMailboxes(requestManager).ToArray();
                    return($"Finished downloading emails for all users: {emails.Length}.");
                });

                return;

                #endregion

                #region Delta query scenarios
                deltaQueryOptimized : ExecuteScenarioWithPerfMeasurement(client,
                                                                         $"Executing efficient delta query cycle on user collection",
                                                                         (requestManager) =>
                {
                    DeltaQueryScenarios.UsersDeltaQueryEfficient(requestManager);
                    return($"Delta cycle complete.");
                });

                deltaQueryBasic : ExecuteScenarioWithPerfMeasurement(client,
                                                                     $"Executing traditional delta query cycle on user collection",
                                                                     (requestManager) =>
                {
                    DeltaQueryScenarios.UserDeltaQueryTraditional(client);
                    return($"Delta cycle complete.");
                });

                return;

                #endregion

                #region License management scenarios
assignLicenses:
                var usersTemp = UserScenarios.GetAllUsersBasic(client).Take(1000).ToArray();
                ExecuteScenarioWithPerfMeasurement(client,
                                                   $"Assigning licenses.",
                                                   (requestManager) =>
                {
                    var results = LicenseManagementScenarios.AssignLicensesToUsers(requestManager, usersTemp, "POWER_BI_STANDARD").ToArray();
                    var errors  = results.Where(r => r.IsSuccessful == false).GroupBy(r => r.ErrorDetails.Error.Message).ToArray();
                    return($"Processed {results.Length}.");
                });

                return;

                removeAllLicenses : ExecuteScenarioWithPerfMeasurement(client,
                                                                       $"Removing licenses.",
                                                                       (requestManager) =>
                {
                    var users   = UserScenarios.GetAllUsers(requestManager);
                    var results = LicenseManagementScenarios.RemoveLicensesFromUsers(requestManager, users, "POWER_BI_STANDARD").ToArray();
                    var errors  = results.Where(r => r.IsSuccessful == false).GroupBy(r => r.ErrorDetails.Error.Message).ToArray();
                    return($"Processed {results.Length}.");
                });

                return;

                assignLicensesBasic : ExecuteScenarioWithPerfMeasurement(client,
                                                                         $"Assigning licenses the basic way.",
                                                                         (requestManager) =>
                {
                    var users   = UserScenarios.GetAllUsers(requestManager).Take(1000).ToArray();
                    var results = LicenseManagementScenarios.AssignLicensesToUsersBasic(client, "POWER_BI_STANDARD",
                                                                                        users).ToArray();
                    return($"Processed {results.Length}.");
                });
                return;

                #endregion

                #region Test data setup
                createUsers : int usersToCreate = 5195;
                ExecuteScenarioWithPerfMeasurement(client,
                                                   $"Creating random users: {usersToCreate}",
                                                   (requestManager) =>
                {
                    var createdUsers = TestDataSetup.CreateRandomUsers(requestManager, usersToCreate, "petersgraphtest.onmicrosoft.com").ToArray();
                    return($"User creation complete. Created: {createdUsers.Length}");
                }, concurrencyLimit: 16);
                return;

createGroups:
                User[] usersToAdd = null;
                ExecuteScenarioWithPerfMeasurement(client,
                                                   $"Downloading all users with optimizations.",
                                                   (requestManager) =>
                {
                    usersToAdd = UserScenarios.GetAllUsers(requestManager).ToArray();
                    return($"Downloaded {usersToAdd.Length}.");
                }, batchSize: 1);

                int groupsToCreate = 100;
                int memberCount    = 100;

                ExecuteScenarioWithPerfMeasurement(client,
                                                   $"Creating random groups: {groupsToCreate}",
                                                   (requestManager) =>
                {
                    var createdGroups = TestDataSetup.CreateGroupsWithRandomMembersOptimized(requestManager, usersToAdd, groupsToCreate, memberCount).ToArray();
                    return($"User creation complete. Created: {createdGroups.Length}");
                }, concurrencyLimit: 2);

                return;

                #endregion
#pragma warning restore CS0164
#pragma warning restore CS0162
            }
            finally
            {
                EfficientRequestHandling.Logger.FlushAndCloseLogs();
            }
        }
 public void TearDown()
 {
     TestDataSetup.DeleteTestData(Context);
     dbAuthProvider = null;
 }