Пример #1
0
        public void TestInit()
        {
            _timers       = new List <TestTimer>();
            _timeProvider = new TestTimeProvider();

            using (var db = new TestDbContext())
            {
                //db.Database.EnsureDeleted();
                //db.Database.EnsureCreated();
                db.Database.ExecuteSqlRaw("delete from massive_jobs.message_queue");
                db.Database.ExecuteSqlRaw("delete from massive_jobs.single_consumer_lock");
            }

            JobsBuilder.Configure()
            .WithSettings("tests.", s =>
            {
                s.PublishBatchSize                = 300;
                s.ImmediateWorkersBatchSize       = 1000;
                s.MaxDegreeOfParallelismPerWorker = 2;
                s.ImmediateWorkersCount           = 2;
                s.ScheduledWorkersCount           = 2;
                s.PeriodicWorkersCount            = 2;
            })
            .RegisterInstance <ITimeProvider>(_timeProvider)
            .RegisterScoped <ITimer>(f =>
            {
                var timer = new TestTimer();
                _timers.Add(timer);
                return(timer);
            })
            .WithSqlServerBroker <TestDbContext>()
            .RegisterScoped <TestDbContext, TestDbContext>()
            .Build();
        }
Пример #2
0
 public JobsSorter(IStringValidator stringValidator, JobsBuilder jobsBuilder, JobsValidator jobsValidator, ISortAlgorithm sortAlgorithm)
 {
     _stringValidator = stringValidator;
     _jobsBuilder     = jobsBuilder;
     _jobsValidator   = jobsValidator;
     _sortAlgorithm   = sortAlgorithm;
 }
Пример #3
0
        private static void Main()
        {
            // initialize Serilog

            Log.Logger = new LoggerConfiguration()
                         .MinimumLevel.Warning()
                         .WriteTo.Console()
                         .CreateLogger();

            // initialize MassiveJobs

            JobsBuilder.Configure()
            .WithSerilog()
            .WithSettings("examples.")
            .WithRabbitMqBroker()
            .Build();

            Console.WriteLine("Testing periodic jobs. Press Enter to quit!");

            PeriodicJob.PublishPeriodic("test_periodic", "0/2 * * ? * *");

            Console.ReadLine();

            JobsBuilder.DisposeJobs();
        }
Пример #4
0
        public static JobsBuilder WithSqlServerBroker <TDbContext>(this JobsBuilder builder) where TDbContext : DbContext
        {
            builder.RegisterScoped <IMessagePublisher, SqlServerMessagePublisher <TDbContext> >();
            builder.RegisterSingleton <IMessageConsumer, SqlServerMessageConsumer <TDbContext> >();
            builder.RegisterSingleton <ISqlDialect, SqlDialects.SqlServerDialect>();

            return(builder);
        }
Пример #5
0
        public static JobsBuilder WithInMemoryBroker(this JobsBuilder jobs, InMemoryMessages messages = null)
        {
            jobs.RegisterInstance(messages ?? new InMemoryMessages());
            jobs.RegisterSingleton <IMessagePublisher, InMemoryMessagePublisher>();
            jobs.RegisterSingleton <IMessageConsumer, InMemoryMessageConsumer>();

            return(jobs);
        }
Пример #6
0
        public void AddJob_ThrowArgumentException_CronExpressionIsInvalid(String cronExpression)
        {
            var serviceCollection = new ServiceCollection();
            var jobsBuilder       = new JobsBuilder(serviceCollection);

            Assert.ThrowsAny <Exception>(() => jobsBuilder.AddJob <EmptyJob1>(cronExpression));
            Assert.ThrowsAny <Exception>(() => jobsBuilder.AddJob(cronExpression, () => new EmptyJob1()));
            Assert.ThrowsAny <Exception>(() => jobsBuilder.AddJob(cronExpression, sp => new EmptyJob1()));
        }
Пример #7
0
        public IEnumerable <Job> GetJobs(JobsContext jobsContext)
        {
            var registeredTests = Assembly.Load(settings.SearchInAssemblyName).GetTypes().Where(x => x != typeof(ITestCase) && x != typeof(ITestCase) && typeof(ITestCase).IsAssignableFrom(x) && !x.IsAbstract);

            var jobsBuilder = new JobsBuilder <Type, TestCaseJob>(
                x => ReflectionHelper.GectConstructorParamTypes(x).Select(t => t.ParameterType),
                (t, d) => new TestCaseJob(t, (TestJobsContext)jobsContext, d.ToArray()));

            return(jobsBuilder.GetJobs(registeredTests));
        }
Пример #8
0
        public static JobsBuilder WithRabbitMqBroker(this JobsBuilder builder, Action <RabbitMqSettings> configureAction = null)
        {
            var rabbitMqSettings = new RabbitMqSettings();

            configureAction?.Invoke(rabbitMqSettings);

            builder.RegisterInstance(rabbitMqSettings);

            builder.RegisterSingleton <IMessagePublisher, RabbitMqMessagePublisher>();
            builder.RegisterSingleton <IMessageConsumer, RabbitMqMessageConsumer>();

            return(builder);
        }
        public void GetJobListTest_EmptyString()
        {
            // arrange
            var jobString   = "";
            var expected    = new List <Job>();
            var jobsBuilder = new JobsBuilder();

            // act
            var actual = jobsBuilder.GetJobList(jobString.ToUpper());

            // assert
            CollectionAssert.AreEqual(expected, actual);
        }
Пример #10
0
        public void AddJob_CronExpressionIsValid(String cronExpression)
        {
            var serviceCollection = new ServiceCollection();
            var jobsBuilder       = new JobsBuilder(serviceCollection);

            jobsBuilder.AddJob <EmptyJob1>(cronExpression);
            jobsBuilder.AddJob(cronExpression, () => new EmptyJob1());
            jobsBuilder.AddJob(cronExpression, sp => new EmptyJob1());

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var options         = serviceProvider.GetRequiredService <IOptions <JobsContext> >();

            Assert.Equal(3, options.Value.JobItems.Count);
        }
        public static JobsSorter CreateJobsSorter()
        {
            if (instance == null)
            {
                var stringValidator = new StringValidatorForCharJobs();
                var jobsBuilder     = new JobsBuilder();
                var jobsValidator   = new JobsValidator();
                var sortAlgorithm   = new TopologicalSortAlgorithm();

                instance = new JobsSorter(stringValidator, jobsBuilder, jobsValidator, sortAlgorithm);
            }

            return(instance);
        }
Пример #12
0
        public void GetJobListTest_SimpleJob()
        {
            // arrange
            var jobString = "a";
            var expected  = new List <Job>
            {
                jobA
            };
            var jobsBuilder = new JobsBuilder();

            // act
            var actual = jobsBuilder.GetJobList(jobString.ToUpper());

            // assert
            CollectionAssert.AreEqual(expected, actual, new JobsComparerByNameThenByFirstDifferentDependency());
        }
Пример #13
0
        public void AddJob_SameJobMultipleTimes()
        {
            var serviceCollection = new ServiceCollection();
            var jobsBuilder       = new JobsBuilder(serviceCollection);

            jobsBuilder
            .AddJob <EmptyJob1>("30 0 * * *")
            .AddJob <EmptyJob1>("30 1 * * *")
            .AddJob <EmptyJob1>("30 2 * * *");

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var options         = serviceProvider.GetRequiredService <IOptions <JobsContext> >();

            var localDateTimeOffset = new DateTimeOffset(DateTime.Today);
            var jobStorageItems     = options.Value.GetJobsToRun(localDateTimeOffset, localDateTimeOffset.AddHours(2));

            Assert.NotEmpty(options.Value.JobItems);
            Assert.Equal(2, jobStorageItems.Length);
        }
Пример #14
0
        public void TestInit()
        {
            _counter = new Counter();

            _messages = new InMemoryMessages();

            _timers       = new List <TestTimer>();
            _timeProvider = new TestTimeProvider();

            JobsBuilder.Configure()
            .RegisterInstance(_settings)
            .RegisterInstance(_counter)
            .RegisterInstance <ITimeProvider>(_timeProvider)
            .RegisterScoped <ITimer>(f =>
            {
                var timer = new TestTimer();
                _timers.Add(timer);
                return(timer);
            })
            .WithInMemoryBroker(_messages)
            .Build();
        }
Пример #15
0
        public void TestInit()
        {
            _performCount = 0;

            JobsBuilder.Configure()
            .WithSettings("tests.", s =>
            {
                s.PublishBatchSize                = 300;
                s.ImmediateWorkersBatchSize       = 1000;
                s.MaxDegreeOfParallelismPerWorker = 2;
                s.ImmediateWorkersCount           = 2;
                s.ScheduledWorkersCount           = 2;
                s.PeriodicWorkersCount            = 2;
            })
            .RegisterInstance <IJobTypeProvider>(new TypeProvider())
            .RegisterInstance <IJobSerializer>(new SimpleBinarySerializer())
            .WithRabbitMqBroker(s =>
            {
                s.VirtualHost   = "massivejobs.tests";
                s.PrefetchCount = 1000;
            })
            .Build();
        }
Пример #16
0
 public static JobsBuilder WithLog4Net(this JobsBuilder builder)
 {
     builder.RegisterSingleton <IJobLoggerFactory, LoggerWrapperFactory>();
     return(builder);
 }
Пример #17
0
 public void TestCleanup()
 {
     JobsBuilder.DisposeJobs();
 }