public TestableDb2CatalogJob(
            HttpMessageHandler handler,
            IStorage catalogStorage,
            IStorage auditingStorage,
            bool skipCreatedPackagesProcessing,
            DateTime?startDate,
            TimeSpan timeout,
            int top,
            bool verbose,
            Mock <IGalleryDatabaseQueryService> galleryDatabaseMock,
            PackageContentUriBuilder packageContentUriBuilder,
            ITestOutputHelper testOutputHelper)
            : base(new TestLoggerFactory(testOutputHelper), new Mock <ITelemetryClient>().Object, new Dictionary <string, string>())
        {
            _handler = handler;

            CatalogStorage  = catalogStorage;
            AuditingStorage = auditingStorage;
            SkipCreatedPackagesProcessing = skipCreatedPackagesProcessing;
            StartDate   = startDate;
            Timeout     = timeout;
            Top         = top;
            Verbose     = verbose;
            Destination = new Uri("https://nuget.test");

            PackageContentUriBuilder    = packageContentUriBuilder ?? throw new ArgumentNullException(nameof(galleryDatabaseMock));
            GalleryDatabaseQueryService = galleryDatabaseMock?.Object ?? throw new ArgumentNullException(nameof(galleryDatabaseMock));
        }
Esempio n. 2
0
            public void ProperlyBuildsPackageContentUrl()
            {
                // Arrange
                var packageContentUriBuilder = new PackageContentUriBuilder("https://unittest.org/packages/{id-lower}/{version-lower}.nupkg");
                var expectedUrl = new Uri("https://unittest.org/packages/package.id/1.0.0-alpha.1.nupkg");

                // Act
                var actualUrl = packageContentUriBuilder.Build("Package.Id", "1.0.0-Alpha.1");

                // Assert
                Assert.Equal(expectedUrl, actualUrl);
            }
        protected override void Init(IDictionary <string, string> arguments, CancellationToken cancellationToken)
        {
            var verbose = arguments.GetOrDefault(Arguments.Verbose, false);

            _maxRequeueQueueSize = arguments.GetOrDefault(Arguments.MaxRequeueQueueSize, DefaultMaxQueueSize);

            CommandHelpers.AssertAzureStorage(arguments);

            var monitoringStorageFactory = CommandHelpers.CreateStorageFactory(arguments, verbose);

            _statusService = CommandHelpers.GetPackageMonitoringStatusService(arguments, monitoringStorageFactory, LoggerFactory);
            _packageValidatorContextQueue = CommandHelpers.CreateStorageQueue <PackageValidatorContext>(arguments, PackageValidatorContext.Version);

            Logger.LogInformation(
                "CONFIG storage: {Storage}",
                monitoringStorageFactory);

            _monitoringCursor = ValidationFactory.GetFront(monitoringStorageFactory);
            _galleryCursor    = CreateCursor(monitoringStorageFactory, GalleryCursorFileName);
            _deletedCursor    = CreateCursor(monitoringStorageFactory, DeletedCursorFileName);

            var connectionString    = arguments.GetOrThrow <string>(Arguments.ConnectionString);
            var galleryDbConnection = new AzureSqlConnectionFactory(
                connectionString,
                SecretInjector,
                LoggerFactory.CreateLogger <AzureSqlConnectionFactory>());

            var packageContentUriBuilder = new PackageContentUriBuilder(
                arguments.GetOrThrow <string>(Arguments.PackageContentUrlFormat));

            var timeoutInSeconds = arguments.GetOrDefault(Arguments.SqlCommandTimeoutInSeconds, 300);

            _galleryDatabaseQueryService = new GalleryDatabaseQueryService(
                galleryDbConnection,
                packageContentUriBuilder,
                TelemetryService,
                timeoutInSeconds);

            var auditingStorageFactory = CommandHelpers.CreateSuffixedStorageFactory(
                "Auditing",
                arguments,
                verbose,
                new SemaphoreSlimThrottle(new SemaphoreSlim(ServicePointManager.DefaultConnectionLimit)));

            _auditingStorage = auditingStorageFactory.Create();

            var messageHandlerFactory = CommandHelpers.GetHttpMessageHandlerFactory(TelemetryService, verbose);

            _client = new CollectorHttpClient(messageHandlerFactory());
        }
Esempio n. 4
0
        protected override void Init(IDictionary <string, string> arguments, CancellationToken cancellationToken)
        {
            Verbose   = arguments.GetOrDefault(Arguments.Verbose, false);
            StartDate = arguments.GetOrDefault(Arguments.StartDate, Constants.DateTimeMinValueUtc);
            Top       = arguments.GetOrDefault(Arguments.CursorSize, 20);
            SkipCreatedPackagesProcessing = arguments.GetOrDefault(Arguments.SkipCreatedPackagesProcessing, false);

            StorageFactory preferredPackageSourceStorageFactory = null;

            var preferAlternatePackageSourceStorage = arguments.GetOrDefault(Arguments.PreferAlternatePackageSourceStorage, false);

            if (preferAlternatePackageSourceStorage)
            {
                preferredPackageSourceStorageFactory = CommandHelpers.CreateSuffixedStorageFactory(
                    "PreferredPackageSourceStorage",
                    arguments,
                    Verbose,
                    new SemaphoreSlimThrottle(new SemaphoreSlim(ServicePointManager.DefaultConnectionLimit)));
            }

            var catalogStorageFactory = CommandHelpers.CreateStorageFactory(
                arguments,
                Verbose,
                new SemaphoreSlimThrottle(new SemaphoreSlim(ServicePointManager.DefaultConnectionLimit)));

            var auditingStorageFactory = CommandHelpers.CreateSuffixedStorageFactory(
                "Auditing",
                arguments,
                Verbose,
                new SemaphoreSlimThrottle(new SemaphoreSlim(ServicePointManager.DefaultConnectionLimit)));

            Logger.LogInformation("CONFIG source: \"{ConfigSource}\" storage: \"{Storage}\" preferred package source storage: \"{PreferredPackageSourceStorage}\"",
                                  GalleryDbConnection,
                                  catalogStorageFactory,
                                  preferredPackageSourceStorageFactory);

            CatalogStorage  = catalogStorageFactory.Create();
            AuditingStorage = auditingStorageFactory.Create();

            if (preferAlternatePackageSourceStorage)
            {
                PreferredPackageSourceStorage = preferredPackageSourceStorageFactory.Create();
            }

            Destination = catalogStorageFactory.BaseAddress;
            TelemetryService.GlobalDimensions[TelemetryConstants.Destination] = Destination.AbsoluteUri;

            // Setup gallery database access
            PackageContentUriBuilder = new PackageContentUriBuilder(
                arguments.GetOrThrow <string>(Arguments.PackageContentUrlFormat));

            var connectionString = arguments.GetOrThrow <string>(Arguments.ConnectionString);

            GalleryDbConnection = new AzureSqlConnectionFactory(
                connectionString,
                SecretInjector,
                LoggerFactory.CreateLogger <AzureSqlConnectionFactory>());

            var timeoutInSeconds = arguments.GetOrDefault(Arguments.SqlCommandTimeoutInSeconds, 300);

            Timeout = TimeSpan.FromSeconds(timeoutInSeconds);
            GalleryDatabaseQueryService = new GalleryDatabaseQueryService(
                GalleryDbConnection,
                PackageContentUriBuilder,
                TelemetryService,
                timeoutInSeconds);
        }
Esempio n. 5
0
        protected override void Init(IDictionary <string, string> arguments, CancellationToken cancellationToken)
        {
            var gallery                    = arguments.GetOrThrow <string>(Arguments.Gallery);
            var index                      = arguments.GetOrThrow <string>(Arguments.Index);
            var packageBaseAddress         = arguments.GetOrThrow <string>(Arguments.ContentBaseAddress);
            var source                     = arguments.GetOrThrow <string>(Arguments.Source);
            var requireRepositorySignature = arguments.GetOrDefault(Arguments.RequireRepositorySignature, false);
            var verbose                    = arguments.GetOrDefault(Arguments.Verbose, false);

            var timeoutInSeconds = arguments.GetOrDefault(Arguments.SqlCommandTimeoutInSeconds, 300);
            var sqlTimeout       = TimeSpan.FromSeconds(timeoutInSeconds);

            var connectionString    = arguments.GetOrThrow <string>(Arguments.ConnectionString);
            var galleryDbConnection = new AzureSqlConnectionFactory(
                connectionString,
                SecretInjector,
                LoggerFactory.CreateLogger <AzureSqlConnectionFactory>());
            var packageContentUriBuilder = new PackageContentUriBuilder(
                arguments.GetOrThrow <string>(Arguments.PackageContentUrlFormat));
            var galleryDatabase = new GalleryDatabaseQueryService(
                galleryDbConnection,
                packageContentUriBuilder,
                TelemetryService,
                timeoutInSeconds);

            CommandHelpers.AssertAzureStorage(arguments);

            var monitoringStorageFactory = CommandHelpers.CreateStorageFactory(arguments, verbose);
            var auditingStorageFactory   = CommandHelpers.CreateSuffixedStorageFactory("Auditing", arguments, verbose);

            var endpointConfiguration = CommandHelpers.GetEndpointConfiguration(arguments);
            var messageHandlerFactory = CommandHelpers.GetHttpMessageHandlerFactory(TelemetryService, verbose);

            Logger.LogInformation(
                "CONFIG gallery: {Gallery} index: {Index} storage: {Storage} auditingStorage: {AuditingStorage} registration cursor uri: {RegistrationCursorUri} flat-container cursor uri: {FlatContainerCursorUri}",
                gallery, index, monitoringStorageFactory, auditingStorageFactory, endpointConfiguration.RegistrationCursorUri, endpointConfiguration.FlatContainerCursorUri);

            var validatorConfig = new ValidatorConfiguration(
                packageBaseAddress,
                requireRepositorySignature);

            _packageValidator = ValidationFactory.CreatePackageValidator(
                gallery,
                index,
                auditingStorageFactory,
                validatorConfig,
                endpointConfiguration,
                messageHandlerFactory,
                galleryDatabase,
                LoggerFactory);

            _queue = CommandHelpers.CreateStorageQueue <PackageValidatorContext>(arguments, PackageValidatorContext.Version);

            _statusService = CommandHelpers.GetPackageMonitoringStatusService(arguments, monitoringStorageFactory, LoggerFactory);

            _notificationService = new LoggerMonitoringNotificationService(LoggerFactory.CreateLogger <LoggerMonitoringNotificationService>());

            _client = new CollectorHttpClient(messageHandlerFactory());

            _queueLoopDuration = TimeSpan.FromHours(
                arguments.GetOrDefault(
                    Arguments.QueueLoopDurationHours,
                    DefaultQueueLoopDurationHours));

            _queueDelay = TimeSpan.FromSeconds(
                arguments.GetOrDefault(
                    Arguments.QueueDelaySeconds,
                    DefaultQueueDelaySeconds));

            _workerCount = arguments.GetOrDefault(Arguments.WorkerCount, DefaultWorkerCount);

            SetUserAgentString();
        }
Esempio n. 6
0
            public void ThrowsForNullArguments(string packageId, string normalizedPackageVersion)
            {
                var packageContentUriBuilder = new PackageContentUriBuilder("https://unittest.org/packages/{id-lower}/{version-lower}.nupkg");

                Assert.Throws <ArgumentNullException>(() => packageContentUriBuilder.Build(packageId, normalizedPackageVersion));
            }
 public TheReadFeedPackageDetailsFromDataReaderMethod()
 {
     _packageContentUriBuilder = new PackageContentUriBuilder(PackageContentUrlFormat);
     _db2catalogProjection     = new Db2CatalogProjection(_packageContentUriBuilder);
 }
 public TheReadDeprecationInfoFromDataReaderMethod()
 {
     _packageContentUriBuilder = new PackageContentUriBuilder(PackageContentUrlFormat);
     _db2catalogProjection     = new Db2CatalogProjection(_packageContentUriBuilder);
 }