public void MissingFileReturnsNoSettings() { var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(_uniqueTemporaryFolder); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.Null); Assert.That(data.Api, Is.Null); Assert.That(data.Include, Is.Null); Assert.That(data.Exclude, Is.Null); Assert.That(data.Label, Is.Null); Assert.That(data.MaxPackageUpdates, Is.Null); Assert.That(data.MaxRepo, Is.Null); Assert.That(data.Verbosity, Is.Null); Assert.That(data.Change, Is.Null); Assert.That(data.ForkMode, Is.Null); Assert.That(data.UsePrerelease, Is.Null); Assert.That(data.OutputDestination, Is.Null); Assert.That(data.OutputFormat, Is.Null); Assert.That(data.OutputFileName, Is.Null); Assert.That(data.LogDestination, Is.Null); Assert.That(data.Platform, Is.Null); Assert.That(data.BranchNameTemplate, Is.Null); Assert.That(data.DeleteBranchAfterMerge, Is.Null); }
public void EmptyConfigReturnsNoSettings() { var path = MakeTestFile("{}"); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.Null); Assert.That(data.Api, Is.Null); Assert.That(data.Include, Is.Null); Assert.That(data.Exclude, Is.Null); Assert.That(data.Label, Is.Null); Assert.That(data.MaxPackageUpdates, Is.Null); Assert.That(data.MaxRepo, Is.Null); Assert.That(data.Verbosity, Is.Null); Assert.That(data.Change, Is.Null); Assert.That(data.ForkMode, Is.Null); Assert.That(data.UsePrerelease, Is.Null); Assert.That(data.OutputDestination, Is.Null); Assert.That(data.OutputFormat, Is.Null); Assert.That(data.OutputFileName, Is.Null); Assert.That(data.LogDestination, Is.Null); Assert.That(data.Platform, Is.Null); Assert.That(data.BranchNamePrefix, Is.Null); Assert.That(data.DeleteBranchAfterMerge, Is.Null); }
/// <summary> /// Initialization routine /// </summary> /// <param name="action">action</param> /// <returns>initialization task</returns> private async Task Initialize(Action action) { // load the environment configuration file from UtilsInternal var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + environmentName + ".config"); var certThumbprint = sr.ReadValue(SocialPlusCertThumbprint); var clientID = sr.ReadValue(EmbeddedSocialClientIdSetting); var storeLocation = StoreLocation.CurrentUser; var vaultUrl = sr.ReadValue(SocialPlusVaultUrlSetting); ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Console, Log.DefaultCategoryName); var kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); IConnectionStringProvider connectionStringProvider = new ConnectionStringProvider(kvReader); int queueBatchIntervalMs = int.Parse(sr.ReadValue(ServiceBusBatchIntervalMsSetting)); QueueManager queueManager = new QueueManager(connectionStringProvider, queueBatchIntervalMs); var sbConnect = await connectionStringProvider.GetServiceBusConnectionString(ServiceBusInstanceType.Default); // the ListQueues action requires an instance of a ServiceBus object if (action == Action.ListQueues) { this.sb = new ServiceBus(sbConnect); } // all the remaining actions operate on an instance of a ServiceBusQueue object if (action != Action.ListQueues) { // ParseArgs() ensures that queueName is valid here this.sbQueue = await ServiceBusQueue.Create(sbConnect, queueName, queueBatchIntervalMs); this.selectedQueue = await queueManager.GetQueue((QueueIdentifier)selectedQueueId); } }
public void ConfigKeysAreCaseInsensitive() { const string configData = @"{ ""Age"":""3d"", ""API"":""http://api.com"", ""iNClude"":""fred"", ""excludE"":""fish"", ""IncluDeRepoS"":""repo2"", ""label"": [""mark"" ] }"; var path = MakeTestFile(configData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); Assert.That(data.Include, Is.EqualTo("fred")); Assert.That(data.Exclude, Is.EqualTo("fish")); Assert.That(data.IncludeRepos, Is.EqualTo("repo2")); Assert.That(data.Label.Length, Is.EqualTo(1)); Assert.That(data.Label, Does.Contain("mark")); }
/// <summary> /// Returns a URL to access an image on the CDN /// </summary> /// <param name="blobHandle">unique handle to the image</param> /// <returns>URL to get the image</returns> private static Uri FormImageUriOnCDN(string blobHandle) { var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + TestConstants.ConfigFileName); var cdnUrl = sr.ReadValue("CDNUrl"); return(new Uri(cdnUrl + "images/" + blobHandle)); }
public void PopulatedConfigReturnsAllSettings() { const string configData = @"{ ""age"":""3d"", ""api"":""http://api.com"", ""include"":""fred"", ""exclude"":""fish"", ""includeRepos"":""repoIn"", ""excludeRepos"":""repoOut"", ""label"": [ ""foo"", ""bar"" ] }"; var path = MakeTestFile(configData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); Assert.That(data.Include, Is.EqualTo("fred")); Assert.That(data.Exclude, Is.EqualTo("fish")); Assert.That(data.IncludeRepos, Is.EqualTo("repoIn")); Assert.That(data.ExcludeRepos, Is.EqualTo("repoOut")); Assert.That(data.Label.Length, Is.EqualTo(2)); Assert.That(data.Label, Does.Contain("foo")); Assert.That(data.Label, Does.Contain("bar")); }
public void ConfigKeysAreCaseInsensitive() { const string configData = @"{ ""Age"":""3d"", ""API"":""http://api.com"", ""iNClude"":""fred"", ""excludE"":""fish"", ""IncluDeRepoS"":""repo2"", ""label"": [""mark"" ], ""MAXrepo"":3, ""vErBoSiTy"": ""Q"", ""CHANGE"": ""PATCH"" }"; var path = MakeTestFile(configData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); Assert.That(data.Include, Is.EqualTo("fred")); Assert.That(data.Exclude, Is.EqualTo("fish")); Assert.That(data.IncludeRepos, Is.EqualTo("repo2")); Assert.That(data.Label.Count, Is.EqualTo(1)); Assert.That(data.Label, Does.Contain("mark")); Assert.That(data.MaxRepo, Is.EqualTo(3)); Assert.That(data.Verbosity, Is.EqualTo(LogLevel.Quiet)); Assert.That(data.Change, Is.EqualTo(VersionChange.Patch)); }
public void MissingFileReturnsNoSettings() { var folder = TemporaryFolder(); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(folder); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.Null); Assert.That(data.Api, Is.Null); Assert.That(data.Include, Is.Null); Assert.That(data.Exclude, Is.Null); Assert.That(data.Label, Is.Null); Assert.That(data.MaxPr, Is.Null); Assert.That(data.MaxRepo, Is.Null); Assert.That(data.Verbosity, Is.Null); Assert.That(data.Change, Is.Null); Assert.That(data.ForkMode, Is.Null); Assert.That(data.UsePrerelease, Is.Null); Assert.That(data.OutputDestination, Is.Null); Assert.That(data.OutputFormat, Is.Null); Assert.That(data.OutputFileName, Is.Null); Assert.That(data.LogDestination, Is.Null); }
public void PopulatedConfigReturnsEnumSettings() { var path = MakeTestFile(FullFileData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data.Verbosity, Is.EqualTo(LogLevel.Detailed)); Assert.That(data.Change, Is.EqualTo(VersionChange.Minor)); }
public void PopulatedConfigReturnsNumericSettings() { var path = MakeTestFile(FullFileData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data.MaxPr, Is.EqualTo(42)); Assert.That(data.MaxRepo, Is.EqualTo(12)); }
public void PopulatedConfigReturnsLabels() { var path = MakeTestFile(FullFileData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data.Label.Count, Is.EqualTo(2)); Assert.That(data.Label, Does.Contain("foo")); Assert.That(data.Label, Does.Contain("bar")); }
/// <summary> /// Initializes static members of the <see cref="TestConstants"/> class. /// </summary> static TestConstants() { #if OBA_DEV_ALEC string environmentName = "oba-dev-alec"; ConfigFileName = environmentName + ".config"; #endif #if OBA_DEV_SHARAD string environmentName = "oba-dev-sharad"; ConfigFileName = environmentName + ".config"; #endif #if OBA_PPE string environmentName = "oba-ppe"; ConfigFileName = environmentName + ".config"; #endif #if OBA_PROD string environmentName = "oba-prod"; ConfigFileName = environmentName + ".config"; #endif // use the fsr to read values that are not secrets var fsr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + ConfigFileName); EmbeddedSocialAdminUserHandle = fsr.ReadValue("EmbeddedSocialAdminUserHandle"); EmbeddedSocialAppKey = fsr.ReadValue("EmbeddedSocialAppKey"); EmbeddedSocialUri = new Uri(fsr.ReadValue("EmbeddedSocialUri")); AADOBAAppId = fsr.ReadValue("AADOBAAppId"); AADOBAHomePage = fsr.ReadValue("AADOBAHomePage"); AADTenantId = fsr.ReadValue("AADTenantId"); KeyVaultUri = fsr.ReadValue("KeyVaultUri"); OBACertThumbprint = fsr.ReadValue("OBACertThumbprint"); OBARegionsListUri = fsr.ReadValue("OBARegionsListUri"); // use the kvr to read secrets ICertificateHelper cert = new CertificateHelper(OBACertThumbprint, AADOBAAppId, StoreLocation.CurrentUser); IKeyVaultClient kvClient = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Debug, Log.DefaultCategoryName); var kv = new KV(log, AADOBAAppId, KeyVaultUri, OBACertThumbprint, StoreLocation.CurrentUser, kvClient); var kvr = new KVSettingsReader(fsr, kv); AzureStorageConnectionString = kvr.ReadValueAsync("AzureStorageConnectionString").Result; OBAApiKey = kvr.ReadValueAsync("OBAApiKey").Result; SendGridEmailAddr = kvr.ReadValueAsync("SendGridEmailAddr").Result; SendGridKey = kvr.ReadValueAsync("SendGridKey").Result; ServiceBusConnectionString = kvr.ReadValueAsync("ServiceBusConnectionString").Result; // Obtain an AAD token using a cert from the local store for the current user AADSettings aadSettings = new AADSettings(TestConstants.AADTenantId, TestConstants.AADOBAAppId, TestConstants.AADOBAHomePage, TestConstants.OBACertThumbprint); CertificateHelper certHelper = new CertificateHelper(TestConstants.OBACertThumbprint, TestConstants.AADOBAAppId, StoreLocation.CurrentUser); EmbeddedSocialAADToken = certHelper.GetAccessToken(aadSettings.Authority, aadSettings.AppUri).Result; }
/// <summary> /// Initializes static members of the <see cref="KVTests"/> class. /// </summary> static KVTests() { FileSettingsReader = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + TestConstants.ConfigFileName); SigningKey = FileSettingsReader.ReadValue(BearerTokenSigningKey); ClientId = FileSettingsReader.ReadValue(EmbeddedSocialClientIdSetting); VaultUrl = FileSettingsReader.ReadValue(SocialPlusVaultUrlSetting); CertThumbprint = FileSettingsReader.ReadValue(SocialPlusCertThumbprint); StoreLoc = StoreLocation.CurrentUser; var cert = new CertificateHelper(CertThumbprint, ClientId, StoreLoc); Client = new AzureKeyVaultClient(cert); TestLog = new Log(LogDestination.Debug, Log.DefaultCategoryName); }
/// <summary> /// Generate a list of IKV instances for unit tests /// </summary> /// <returns>List of IKV instances</returns> public IEnumerable <IKV> CreateKV() { var fileSettingsReader = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + TestConstants.ConfigFileName); var clientId = fileSettingsReader.ReadValue(EmbeddedSocialClientIdSetting); var vaultUrl = fileSettingsReader.ReadValue(SocialPlusVaultUrlSetting); var certThumbprint = fileSettingsReader.ReadValue(SocialPlusCertThumbprint); var storeLoc = StoreLocation.CurrentUser; var log = new Log(LogDestination.Debug, Log.DefaultCategoryName); foreach (IKeyVaultClient ikvc in this.azureKeyVaultClientFactory.CreateKVClient()) { yield return(new KV(log, clientId, vaultUrl, certThumbprint, storeLoc, ikvc)); } }
public void MissingFileReturnsNoSettings() { var folder = TemporaryFolder(); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(folder.FullPath); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.Null); Assert.That(data.Api, Is.Null); Assert.That(data.Include, Is.Null); Assert.That(data.Exclude, Is.Null); Assert.That(data.Label, Is.Null); }
public void EmptyConfigReturnsNoSettings() { var path = MakeTestFile("{}"); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.Null); Assert.That(data.Api, Is.Null); Assert.That(data.Include, Is.Null); Assert.That(data.Exclude, Is.Null); Assert.That(data.Label, Is.Null); }
/// <summary> /// Retrieves SendGrid key from KV /// </summary> /// <param name="configFile">config file path</param> /// <returns>SendGrid key</returns> public static string GetSendGridKey(string configFile) { var sr = new FileSettingsReader(configFile); var certThumbprint = sr.ReadValue(TestConstants.SocialPlusCertThumbprint); var clientID = sr.ReadValue(TestConstants.EmbeddedSocialClientIdSetting); var storeLocation = StoreLocation.CurrentUser; var vaultUrl = sr.ReadValue(TestConstants.SocialPlusVaultUrlSetting); ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Console, Log.DefaultCategoryName); var kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); return(kvReader.ReadValueAsync("SendGridInstrumentationKey").Result); }
public void PopulatedConfigReturnsAllStringSettings() { var path = MakeTestFile(FullFileData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); Assert.That(data.Include, Is.EqualTo("fred")); Assert.That(data.Exclude, Is.EqualTo("fish")); Assert.That(data.IncludeRepos, Is.EqualTo("repoIn")); Assert.That(data.ExcludeRepos, Is.EqualTo("repoOut")); Assert.That(data.LogFile, Is.EqualTo("somefile.log")); }
public void PopulatedConfigReturnsEnumSettings() { var path = MakeTestFile(FullFileData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data.Change, Is.EqualTo(VersionChange.Minor)); Assert.That(data.ForkMode, Is.EqualTo(ForkMode.PreferFork)); Assert.That(data.UsePrerelease, Is.EqualTo(UsePrerelease.Never)); Assert.That(data.Verbosity, Is.EqualTo(LogLevel.Detailed)); Assert.That(data.LogDestination, Is.EqualTo(LogDestination.File)); Assert.That(data.OutputDestination, Is.EqualTo(OutputDestination.Console)); Assert.That(data.OutputFormat, Is.EqualTo(OutputFormat.Text)); }
public void ExtraKeysAreIgnored() { const string configData = @"{ ""age"":""3d"", ""api"":""http://api.com"", ""something"":""nothing"" }"; var path = MakeTestFile(configData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); }
/// <summary> /// Initializes a new instance of the <see cref="AzureKeyVaultClientFactory"/> class. /// Creates a whole bunch of mocked Azure key vault clients /// </summary> public AzureKeyVaultClientFactory() { var fileSettingsReader = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + TestConstants.ConfigFileName); var clientId = fileSettingsReader.ReadValue(EmbeddedSocialClientIdSetting); var certThumbprint = fileSettingsReader.ReadValue(SocialPlusCertThumbprint); var storeLocation = StoreLocation.CurrentUser; var cert = new CertificateHelper(certThumbprint, clientId, storeLocation); Mock <AzureKeyVaultClient> mock1 = new Mock <AzureKeyVaultClient>(cert); mock1.CallBase = true; mock1.Setup(c => c.GetKeyAsync(It.IsNotNull <string>(), It.IsAny <CancellationToken>())).ThrowsAsync(new ArgumentNullException()); Mock <AzureKeyVaultClient> mock2 = new Mock <AzureKeyVaultClient>(cert); mock2.CallBase = true; mock2.Setup(c => c.GetSecretAsync(It.IsNotNull <string>(), It.IsAny <CancellationToken>())).ThrowsAsync(new ArgumentNullException()); Mock <AzureKeyVaultClient> mock3 = new Mock <AzureKeyVaultClient>(cert); mock3.CallBase = true; mock3.Setup(c => c.SignAsync(It.IsNotNull <string>(), It.IsNotNull <string>(), It.IsNotNull <string>(), It.IsNotNull <string>(), It.IsNotNull <byte[]>(), It.IsNotNull <CancellationToken>())); Mock <AzureKeyVaultClient> mock4 = new Mock <AzureKeyVaultClient>(cert); mock4.CallBase = true; this.methodToExceptionList[typeof(AzureKeyVaultClient).GetMethod("GetKeyAsync")] = new List <Exception> { new ArgumentNullException() }; this.methodToExceptionList[typeof(AzureKeyVaultClient).GetMethod("GetSecretAsync")] = new List <Exception> { new ArgumentNullException() }; this.methodToExceptionList[typeof(AzureKeyVaultClient).GetMethod("SignAsync")] = new List <Exception> { new ArgumentNullException() }; this.listOfAzureKeyVaultClients.Add(this.MakeBlankMock(cert)); foreach (Mock <AzureKeyVaultClient> mock in this.MakeMocks(cert)) { this.listOfAzureKeyVaultClients.Add(mock); } }
public void PopulatedConfigReturnsAllStringSettings() { var path = MakeTestFile(FullFileData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); Assert.That(data.Include, Is.EqualTo("fred")); Assert.That(data.Exclude, Is.EqualTo("fish")); Assert.That(data.IncludeRepos, Is.EqualTo("repoIn")); Assert.That(data.ExcludeRepos, Is.EqualTo("repoOut")); Assert.That(data.LogFile, Is.EqualTo("somefile.log")); Assert.That(data.OutputFileName, Is.EqualTo("out_42.txt")); Assert.That(data.BranchNameTemplate, Is.EqualTo("nukeeper/MyBranch")); Assert.That(data.DeleteBranchAfterMerge, Is.EqualTo(true)); }
/// <summary> /// Initialization routine /// </summary> /// <returns>init task</returns> private async Task Initialize() { // load the environment configuration file from UtilsInternal var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + environmentName + ".config"); var certThumbprint = sr.ReadValue(SocialPlusCertThumbprint); var clientID = sr.ReadValue(EmbeddedSocialClientIdSetting); var storeLocation = StoreLocation.CurrentUser; var vaultUrl = sr.ReadValue(SocialPlusVaultUrlSetting); ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Console, Log.DefaultCategoryName); var kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); IConnectionStringProvider connectionStringProvider = new ConnectionStringProvider(kvReader); cvsUrl = await connectionStringProvider.GetCVSUrl(CVSInstanceType.Default); cvsSubscriptionKey = await connectionStringProvider.GetCVSKey(CVSInstanceType.Default); }
public void ConfigKeysAreCaseInsensitive() { const string configData = @"{ ""Age"":""3d"", ""API"":""http://api.com"", ""iNClude"":""fred"", ""excludE"":""fish"", ""IncluDeRepoS"":""repo2"", ""label"": [""mark"" ], ""MaxPackageUpdates"":4, ""MaxOpenPUllrequests"":10, ""MAXrepo"":3, ""vErBoSiTy"": ""Q"", ""CHANGE"": ""PATCH"", ""bRanCHNamETempLATe"": ""nukeeper/MyBranch"", ""deLeTEBranCHafTERMerge"": ""true"" }"; var path = MakeTestFile(configData); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.EqualTo("3d")); Assert.That(data.Api, Is.EqualTo("http://api.com")); Assert.That(data.Include, Is.EqualTo("fred")); Assert.That(data.Exclude, Is.EqualTo("fish")); Assert.That(data.IncludeRepos, Is.EqualTo("repo2")); Assert.That(data.Label.Count, Is.EqualTo(1)); Assert.That(data.Label, Does.Contain("mark")); Assert.That(data.MaxPackageUpdates, Is.EqualTo(4)); Assert.That(data.MaxOpenPullRequests, Is.EqualTo(10)); Assert.That(data.MaxRepo, Is.EqualTo(3)); Assert.That(data.Verbosity, Is.EqualTo(LogLevel.Quiet)); Assert.That(data.Change, Is.EqualTo(VersionChange.Patch)); Assert.That(data.BranchNameTemplate, Is.EqualTo("nukeeper/MyBranch")); Assert.That(data.DeleteBranchAfterMerge, Is.EqualTo(true)); }
public void EmptyConfigReturnsNoSettings() { var path = MakeTestFile("{}"); var fsr = new FileSettingsReader(Substitute.For <INuKeeperLogger>()); var data = fsr.Read(path); Assert.That(data, Is.Not.Null); Assert.That(data.Age, Is.Null); Assert.That(data.Api, Is.Null); Assert.That(data.Include, Is.Null); Assert.That(data.Exclude, Is.Null); Assert.That(data.Label, Is.Null); Assert.That(data.MaxPr, Is.Null); Assert.That(data.MaxRepo, Is.Null); Assert.That(data.Verbosity, Is.Null); Assert.That(data.Change, Is.Null); Assert.That(data.OutputDestination, Is.Null); Assert.That(data.OutputFormat, Is.Null); Assert.That(data.OutputFileName, Is.Null); }
/// <summary> /// Initializes the store instance for a specific environment name /// </summary> /// <param name="environmentName">name of environment</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> protected async Task Init(string environmentName) { var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + environmentName + ".config"); var certThumbprint = sr.ReadValue(SocialPlusCertThumbprint); var clientID = sr.ReadValue(EmbeddedSocialClientIdSetting); var vaultUrl = sr.ReadValue(SocialPlusVaultUrlSetting); var storeLocation = StoreLocation.CurrentUser; ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Console, Log.DefaultCategoryName); IKV kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); ConnectionStringProvider csp = new ConnectionStringProvider(kvReader); string azureTableStorageConnectionString = await kvReader.ReadValueAsync("AzureStorageConnectionString"); // Retrieve the storage account from the connection string. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(azureTableStorageConnectionString); // Create the table client. this.tableClient = storageAccount.CreateCloudTableClient(); }
private static async Task Execute(string settingsFilePath) { if (!File.Exists(settingsFilePath)) { Console.WriteLine($"{settingsFilePath} file not exist"); return; } var settings = new FileSettingsReader <ToolSettings>(settingsFilePath); var logFactory = LogFactory.Create() .AddConsole(); var assetServce = new AssetsService(new Uri(settings.CurrentValue.AssetServiceUrl)); var retryPolicy = Policy.Handle <RetryNeededException>() .WaitAndRetryAsync(10, retryAttempt => TimeSpan.FromSeconds(retryAttempt), onRetry: (ex, delay, context, tsk) => { Console.WriteLine($"Retrying exception {ex.ToAsyncString()}"); }); var clientAccountService = new Lazy <ClientAccountClient>(() => new ClientAccountClient(settings.CurrentValue.ClientAccountUrl ?? throw new ArgumentNullException(settings.CurrentValue.ClientAccountUrl))); IEnumerable <Asset> assets; if (!string.IsNullOrEmpty(settings.CurrentValue.AssetId)) { var asset = await assetServce.AssetGetAsync(settings.CurrentValue.AssetId); if (asset == null) { Console.WriteLine($"Asset not found {settings.CurrentValue.AssetId}"); return; } assets = new [] { asset }; } else { assets = await assetServce.AssetGetAllAsync(); } var balanceReaders = BalanceReaderFactory.GetBalanceReaders(assetServce, settings.CurrentValue).ToArray(); const string csvDeliminator = ";"; string header = $"ClientId;Address;Amount;AssetId;ReceivedAmount;SpentAmount;TransactionsCount{Environment.NewLine}"; await File.AppendAllTextAsync(settings.CurrentValue.ResultFilePath, header); var counter = 0; string continuationToken = null; var relatedAssetsDictionary = new ConcurrentDictionary <Type, IEnumerable <Asset> >(); do { IEnumerable <string> clientIds; if (string.IsNullOrEmpty(settings.CurrentValue.ClientIdsFilePath)) { Console.WriteLine("Retrieving client ids batch"); var response = await clientAccountService.Value.GetIdsAsync(continuationToken); continuationToken = response.ContinuationToken; clientIds = response.Ids; } else { clientIds = await File.ReadAllLinesAsync(settings.CurrentValue.ClientIdsFilePath); } if (string.IsNullOrEmpty(settings.CurrentValue.AssetId) && settings.CurrentValue.IncludeZeroBalances) { throw new ArgumentException("If AssetId is omitted, IncludeZeroBalances should be false."); } foreach (var clientId in clientIds) { IEnumerable <(IBalanceReader balanceReader, string address)> addresses; switch (settings.CurrentValue.WalletType) { case WalletTypes.Private: addresses = await GetPrivateWalletAddresses(clientId, logFactory, settings, balanceReaders); break; case WalletTypes.Deposit: addresses = await GetDepositWallets(clientId, logFactory, settings, balanceReaders); break; default: throw new ArgumentException("Unknown switch", nameof(ToolSettings.WalletType)); } foreach (var balanceReaderAddresses in addresses.GroupBy(p => p.balanceReader.GetType())) { var balanceReader = balanceReaderAddresses.First().balanceReader; //cache enumeration var relatedAssets = relatedAssetsDictionary.GetOrAdd(balanceReader.GetType(), (type) => balanceReader.SelectRelatedAssetsAsync(assets).Result.ToList()); foreach (var address in balanceReader.SelectUniqueAddresses(balanceReaderAddresses.Select(p => p.address))) { try { var blockchainBalances = await retryPolicy.ExecuteAsync( () => balanceReader.ReadBalance(relatedAssets, address)); var transactionsInfo = await retryPolicy.ExecuteAsync( () => balanceReader.GetTransactionsInfoAsync(relatedAssets, address, settings.CurrentValue.AssetId, settings.CurrentValue.PrivateWalletsCount.FromDate, settings.CurrentValue.PrivateWalletsCount.FromBlock)); foreach (var blockchainBalance in blockchainBalances .Where(p => p.amount != 0 || settings.CurrentValue.IncludeZeroBalances)) { await File.AppendAllTextAsync(settings.CurrentValue.ResultFilePath, string.Join(csvDeliminator, clientId, blockchainBalance.address, blockchainBalance.amount.ToString(CultureInfo.InvariantCulture), blockchainBalance.assetId, transactionsInfo.AssetId == blockchainBalance.assetId ? transactionsInfo.ReceivedAmount.ToString(CultureInfo.InvariantCulture) : "-", transactionsInfo.AssetId == blockchainBalance.assetId ? transactionsInfo.SpentAmount.ToString(CultureInfo.InvariantCulture) : "-", transactionsInfo.AssetId == blockchainBalance.assetId ? transactionsInfo.TransactionsCount.ToString(CultureInfo.InvariantCulture) : "-" ) + Environment.NewLine); } } catch (Exception e) { Console.WriteLine($"Exception during processing balance for client {clientId}, address: {address}: {e.ToAsyncString()}"); await File.AppendAllTextAsync(settings.CurrentValue.ErrorFilePath, string.Join(csvDeliminator, DateTime.UtcNow, clientId, address, e.ToAsyncString()) + Environment.NewLine); } } } counter++; Console.WriteLine($"[{DateTime.UtcNow}] {clientId} done -- {counter}"); } } while (continuationToken != null); Console.WriteLine("All done"); }
/// <summary> /// Async version of the Main program /// </summary> /// <param name="args">command line args</param> /// <returns>a task</returns> public static async Task AsyncMain(string[] args) { ParseArgs(args); var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + environmentName + ".config"); var certThumbprint = sr.ReadValue(SocialPlusCertThumbprint); var clientID = sr.ReadValue(EmbeddedSocialClientIdSetting); var storeLocation = StoreLocation.CurrentUser; var vaultUrl = sr.ReadValue(SocialPlusVaultUrlSetting); ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); log = new Log(LogDestination.Console, Log.DefaultCategoryName); kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); RedisCache redisCache = null; if (redisType == RedisType.Volatile) { var volatileRedis = await kvReader.ReadValueAsync("VolatileRedisConnectionString"); if (action == "get-info") { volatileRedis += ", allowAdmin=1"; } redisCache = new RedisCache(volatileRedis); } else if (redisType == RedisType.Persistent) { var persistentRedis = await kvReader.ReadValueAsync("PersistentRedisConnectionString"); if (action == "get-info") { persistentRedis += ", allowAdmin=1"; } redisCache = new RedisCache(persistentRedis); } // note that the get-info command does not use a container or a table if (action == "get-info") { var actions = new Actions(redisCache, null, null); await actions.GetInfo(); return; } var container = LookupContainer(containerName); var table = LookupTable(tableName, container); if (container != null && table != null) { var actions = new Actions(redisCache, container, table); if (action == "get") { await actions.GetObject(partitionKey, objKey); } else if (action == "get-rank-feed") { await actions.GetRankFeed(partitionKey, feedKey, rankFeedOrder); } else if (action == "delete") { await actions.DeleteObject(partitionKey, objKey); } } }
/// <summary> /// Initialization routine /// </summary> private void Initialize() { // load the environment configuration file from UtilsInternal var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + environmentName + ".config"); var certThumbprint = sr.ReadValue(SocialPlusCertThumbprint); var clientID = sr.ReadValue(EmbeddedSocialClientIdSetting); var storeLocation = StoreLocation.CurrentUser; var vaultUrl = sr.ReadValue(SocialPlusVaultUrlSetting); ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Console, Log.DefaultCategoryName); var kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); IConnectionStringProvider connectionStringProvider = new ConnectionStringProvider(kvReader); int queueBatchIntervalMs = int.Parse(sr.ReadValue(ServiceBusBatchIntervalMsSetting)); // Lots of things need to be created to create an appsManager. ICTStoreManager tableStoreManager = new CTStoreManager(connectionStringProvider); bool tableInit = false; Exception exception = null; try { // use Task.Run to ensure that the async Initialize routine runs on a threadpool thread Task <bool> task = Task <bool> .Run(() => tableStoreManager.Initialize()); // task.Result blocks until the result is ready tableInit = task.Result; } catch (Exception e) { exception = e; } if (tableInit == false) { string errorMessage = "CTstore version number does not match the expected version number." + Environment.NewLine + "If your tables are empty, then you probably forgot to provision storage." + Environment.NewLine + "If not, then you need to convert the data format and update the storage version number."; Console.WriteLine(errorMessage); if (exception != null) { Console.WriteLine("Exception message:" + exception.Message); } Environment.Exit(0); } ICBStoreManager blobStoreManager = new CBStoreManager(connectionStringProvider); AppsStore appsStore = new AppsStore(tableStoreManager); UsersStore usersStore = new UsersStore(tableStoreManager); ViewsManager viewsManager = new ViewsManager( log, appsStore, usersStore, new UserRelationshipsStore(tableStoreManager), new TopicsStore(tableStoreManager), new TopicRelationshipsStore(tableStoreManager), new CommentsStore(tableStoreManager), new RepliesStore(tableStoreManager), new LikesStore(tableStoreManager), new PinsStore(tableStoreManager), new BlobsStore(blobStoreManager)); PushNotificationsManager pushManager = new PushNotificationsManager(log, new PushRegistrationsStore(tableStoreManager), appsStore, viewsManager, connectionStringProvider); this.appsManager = new AppsManager(appsStore, pushManager); SearchManager searchManager = new SearchManager(log, connectionStringProvider); PopularUsersManager popularUsersManager = new PopularUsersManager(usersStore); QueueManager queueManager = new QueueManager(connectionStringProvider, queueBatchIntervalMs); SearchQueue searchQueue = new SearchQueue(queueManager); this.usersManager = new UsersManager(usersStore, pushManager, popularUsersManager, searchQueue); }
/// <summary> /// Async version of the Main program /// </summary> /// <param name="args">command line args</param> /// <returns>a task</returns> public static async Task AsyncMain(string[] args) { ParseArgs(args); var sr = new FileSettingsReader(ConfigurationManager.AppSettings["ConfigRelativePath"] + Path.DirectorySeparatorChar + environmentName + ".config"); var certThumbprint = sr.ReadValue(OBACertThumbprint); var clientID = sr.ReadValue(OBAClientId); var storeLocation = StoreLocation.CurrentUser; var vaultUrl = sr.ReadValue(OBAVaultUrl); ICertificateHelper cert = new CertificateHelper(certThumbprint, clientID, storeLocation); IKeyVaultClient client = new AzureKeyVaultClient(cert); var log = new Log(LogDestination.Debug, Log.DefaultCategoryName); kv = new KV(log, clientID, vaultUrl, certThumbprint, storeLocation, client); var kvReader = new KVSettingsReader(sr, kv); if (doClean) { DisplayWarning(); } // display current configuration await ValidateAndPrintConfiguration(environmentName, kvReader); if (forceOperation == false) { // get user approval Console.Write("Are you sure you want to proceed? [y/n] : "); ConsoleKeyInfo keyInfo = Console.ReadKey(false); if (keyInfo.KeyChar != 'y') { return; } Console.WriteLine(); } if (doAll || doTables) { string azureTableStorageConnectionString = await kvReader.ReadValueAsync("AzureStorageConnectionString"); if (doClean) { // Delete tables await Tables.Clean(azureTableStorageConnectionString); } if (doCreate) { // Create tables await Tables.Create(azureTableStorageConnectionString); } } if (doAll || doQueues) { if (doClean) { // Delete queues await Queues.Clean(); } if (doCreate) { // Create queues await Queues.Create(); } } if (doAll || doLogs) { string azureDiagnosticsConnectionString = await kvReader.ReadValueAsync("AzureStorageConnectionString"); if (doClean) { // Delete logs await Logs.Clean(azureDiagnosticsConnectionString); } if (doCreate) { // Create queues await Logs.Create(); } } Console.WriteLine("All done! Bye!"); }