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);
        }
Esempio n. 3
0
        /// <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"));
        }
Esempio n. 5
0
        /// <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"));
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
        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));
        }
Esempio n. 11
0
        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;
        }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 18
0
        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"));
        }
Esempio n. 19
0
        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));
        }
Esempio n. 20
0
        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));
        }
Esempio n. 23
0
        /// <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);
        }
Esempio n. 24
0
        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));
        }
Esempio n. 25
0
        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");
        }
Esempio n. 28
0
        /// <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);
                }
            }
        }
Esempio n. 29
0
        /// <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);
        }
Esempio n. 30
0
        /// <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!");
        }