Esempio n. 1
0
        public async Task Start(string[] arguments)
        {
            _running = true;

            _settings = new MemstateSettings(arguments);

            _settings.WithInmemoryStorage();
            _settings.LoggerFactory.AddConsole((category, level) => true);

            _engine = new EngineBuilder(_settings).Build <KeyValueStore <int> >();

            _host = new WebHostBuilder()
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    .UseStartup <Web.Startup>()
                    .ConfigureServices(services => services.AddSingleton(_settings))
                    .Build();

            _producerThread = new Thread(Producer);
            _consumerThread = new Thread(Consumer);

            _producerThread.Start();
            _consumerThread.Start();

            await _host.StartAsync();
        }
Esempio n. 2
0
        public void SetUp()
        {
            _settings = new MemstateSettings();

            _settings.WithInmemoryStorage();

            _client = new LocalClient <UsersModel>(() => new UsersModel(), _settings);
        }
Esempio n. 3
0
        public void PurgeTimer()
        {
            var settings = new MemstateSettings();

            settings.WithInmemoryStorage();

            var engine = new EngineBuilder(settings).Build <IRedisModel>(new RedisModel());
            var redis  = new LocalClient <IRedisModel>(engine).GetDispatchProxy();

            var mre = new ManualResetEvent(false);

            engine.CommandExecuted += (record, isLocal, events) =>
            {
                if (record.Command is PurgeExpiredKeysCommand)
                {
                    mre.Set();
                }
            };

            const string key = "key";

            redis.Set(key, "1");
            redis.Set("key2", "2");
            var expires = DateTime.Now;

            redis.Expire(key, expires);

            var signaled = mre.WaitOne(TimeSpan.FromSeconds(5));

            Assert.IsTrue(signaled, "No PurgeExpiredKeysCommand within time limit 5s");

            Assert.AreEqual(redis.KeyCount(), 1);
            engine.DisposeAsync().GetAwaiter().GetResult();

            engine = new EngineBuilder(settings).Build <IRedisModel>(new RedisModel());
            redis  = new LocalClient <IRedisModel>(engine).GetDispatchProxy();
            Assert.AreEqual(redis.KeyCount(), 1);
            engine.DisposeAsync().GetAwaiter().GetResult();
        }