public void TestLock_Lock_TryLock_IsNotReleased() { // Arrange var client = new CloudEnvironment(); var result = string.Empty; bool isLocked; var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests6"), lockProvider, consoleLog); // Act client.BreakAnyLeases("globalmutextests6", "test_lock"); var globalMutex = factory.CreateLock("test_lock"); result += "1"; using (var globalMutexInner = factory.TryCreateLock("test_lock", out isLocked)) if (isLocked) { result += "2"; } globalMutex.Unlock(); // Assert Assert.AreEqual("1", result); }
public void TestTryLock_TryLock_Maximum60SecondsLockValueIsAllowed() { // Arrange var client = new CloudEnvironment(); var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests7"), lockProvider, consoleLog); // Act using (var globalMutex = factory.CreateLock("test_lock7", TimeSpan.FromSeconds(59))) { } using (var globalMutex = factory.CreateLock("test_lock7", TimeSpan.FromSeconds(60))) { } try { using (var globalMutex = factory.CreateLock("test_lock7", TimeSpan.FromSeconds(61))) { } // Assert Assert.Fail(); } catch { // Assert Assert.IsTrue(true); } }
static void Main(string[] args) { ILog logsService = new ConsoleLogService(); var watch = System.Diagnostics.Stopwatch.StartNew(); logsService.Log("Enter a search term or type \"exit\" to exit"); var searchTerm = Console.ReadLine(); logsService.Log($"Term: {searchTerm}"); using (var searchService = new SearchService()) { while (!searchTerm.Equals("exit", StringComparison.OrdinalIgnoreCase )) { try { watch.Restart(); logsService.Log("Searching..."); var serachResult = searchService.Search(searchTerm); logsService.Log("Search result:"); logsService.Log<SearchResults>(serachResult); } catch (Exception ex) { logsService.Log("An error occured:"); logsService.Log(ex.ToString()); } watch.Stop(); logsService.Log($"the execution time: {watch.ElapsedMilliseconds} ms."); logsService.Log("Enter a search term or type exit to exit"); searchTerm = Console.ReadLine(); } logsService.Log("exiting ..."); } }
public void TestLock_LeaseIsRenewed() { // Arrange var client = new CloudEnvironment(); var result = string.Empty; bool isLocked; bool isLockedInner; var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests4"), lockProvider, consoleLog); // Act client.BreakAnyLeases("globalmutextests4", "test_lock"); using (var globalMutex = factory.TryCreateLock("test_lock", TimeSpan.FromSeconds(15), out isLocked)) { if (isLocked) { result += "1"; } Thread.Sleep(TimeSpan.FromSeconds(40)); using (var globalMutexInner = factory.TryCreateLock("test_lock", out isLockedInner)) if (isLockedInner) { result += "2"; } } // Assert Assert.AreEqual("1", result); }
public void UseDependency() { ConsoleLogService logSvc = new ConsoleLogService(LogType.Info); OutlookEmailService emailSvc = new OutlookEmailService(); Dependency1 dep = new Dependency1(logSvc, emailSvc); dep.DoStuff(); }
protected override void OnExit(ExitEventArgs e) { _agent?.End(); _controller?.End(); ConsoleLogService.End(); base.OnExit(e); }
public static void Main(string[] args) { var log = new ConsoleLogService(); var configService = new AzureBlobConfigurationService(new MyConfigurationManager(), log); var processor = new MigrationProcessor(configService, log); processor.Execute(new System.Threading.CancellationTokenSource().Token); Console.ReadKey(); }
public void TestReacquireLock() { // Arrange var client = new CloudEnvironment(); var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests8"), lockProvider, consoleLog); // Act client.BreakAnyLeases("globalmutextests8", "test_lock"); var globalMutex = factory.CreateLock("test_lock"); var lease = globalMutex.CurrentLeaseId; globalMutex.LockAsync("test_lock").Wait(); // Assert Assert.IsTrue(globalMutex.CurrentLeaseId == lease); }
public void TestLock_Lock_LockIsReleased() { // Arrange var client = new CloudEnvironment(); var result = string.Empty; var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests3"), lockProvider, consoleLog); // Act client.BreakAnyLeases("globalmutextests3", "test_lock"); using (var globalMutex = factory.CreateLock("test_lock")) result += "1"; using (var globalMutex = factory.CreateLock("test_lock")) result += "2"; // Assert Assert.AreEqual("12", result); }
public void TestTryLock_TryLock_Concurrency() { // Arrange var client = new CloudEnvironment(); var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests2"), lockProvider, consoleLog); var result = string.Empty; var thread1 = new Thread( () => { bool isLocked; using (var globalMutex = factory.TryCreateLock("test_lock", out isLocked)) { if (isLocked) { result += "1"; } Thread.Sleep(2000); } }); var thread2 = new Thread( () => { Thread.Sleep(1000); // Ensure it will enter later than the previous method bool isLocked; using (var globalMutex = factory.TryCreateLock("test_lock", out isLocked)) if (isLocked) { result += "2"; } }); // Act client.BreakAnyLeases("globalmutextests2", "test_lock"); thread2.Start(); thread1.Start(); thread1.Join(); thread2.Join(); // Assert Assert.AreEqual("1", result); }
protected override async void OnStartup(StartupEventArgs e) { base.OnStartup(e); ConsoleLogService.Start(); _agent = new RemotingAgent(); if (!_agent.Start()) { this.Shutdown(); return; } LanguageService.Switch(e.Args); _controller = new MainController(); await _controller.InitiateAsync(_agent); //this.MainWindow = new MainWindow(); //this.MainWindow.Show(); }
public void TestLock_Lock_ManyLocks() { // Arrange var client = new CloudEnvironment(); var result = string.Empty; var consoleLog = new ConsoleLogService(); var lockProvider = new AzureLockStateProvider(consoleLog); var factory = new AzureGlobalMutexFactory((AzureBlobContainer)client.BlobClient.GetContainerReference("globalmutextests11"), lockProvider, consoleLog); var thread1 = new Thread( () => { using (var globalMutex = factory.CreateLock("test_lock")) { result += "1"; Trace.WriteLine("Thread 1 will sleep for 90 seconds"); Thread.Sleep(TimeSpan.FromSeconds(90)); Trace.WriteLine("Thread 1 woke up"); } }); var thread2 = new Thread( () => { Thread.Sleep(2000); // Ensure it will enter later than the previous method using (var globalMutex = factory.CreateLock("test_lock")) result += "2"; }); var thread3 = new Thread( () => { Thread.Sleep(2000); // Ensure it will enter later than the previous method using (var globalMutex = factory.CreateLock("test_lock")) result += "3"; }); var thread4 = new Thread( () => { Thread.Sleep(2000); // Ensure it will enter later than the previous method using (var globalMutex = factory.CreateLock("test_lock")) result += "4"; }); var thread5 = new Thread( () => { Thread.Sleep(2000); // Ensure it will enter later than the previous method using (var globalMutex = factory.CreateLock("test_lock")) result += "5"; }); var thread6 = new Thread( () => { Thread.Sleep(1000); // Ensure it will enter later than the previous method using (var globalMutex = factory.CreateLock("test_lock")) result += "6"; }); // Act client.BreakAnyLeases("globalmutextests1", "test_lock"); thread6.Start(); thread5.Start(); thread4.Start(); thread3.Start(); thread2.Start(); thread1.Start(); thread1.Join(); thread2.Join(); thread3.Join(); thread4.Join(); thread5.Join(); thread6.Join(); // Assert Trace.WriteLine(result); Assert.IsTrue(result.StartsWith("1")); Assert.IsTrue(result.Contains("2")); Assert.IsTrue(result.Contains("3")); Assert.IsTrue(result.Contains("4")); Assert.IsTrue(result.Contains("5")); Assert.IsTrue(result.Contains("6")); }
static void Main(string[] args) { var log = new ConsoleLogService(); log.Info("Initialisation"); var options = new Options(); if (!CommandLine.Parser.Default.ParseArguments(args, options)) { return; } if (options.SourceConnectionString == null || options.TargetConnectionString == null || options.RecordBatchSize == 0) { var configService = new AzureBlobConfigurationService(new MyConfigurationManager(), log); var persistentConfig = configService.Get <MigrateFromAvmsConfiguration>(); if (options.SourceConnectionString == null) { options.SourceConnectionString = persistentConfig.SourceConnectionString; } if (options.TargetConnectionString == null) { options.TargetConnectionString = persistentConfig.TargetConnectionString; } if (options.RecordBatchSize == 0) { options.RecordBatchSize = persistentConfig.RecordBatchSize; } if (options.MaxNumberOfChangesToDetailPerTable == null) { options.MaxNumberOfChangesToDetailPerTable = persistentConfig.MaxNumberOfChangesToDetailPerTable; } if (options.AnonymiseData == false) { options.AnonymiseData = persistentConfig.AnonymiseData; } } if (options.Verbose) { Console.WriteLine($@" SourceConnectionString = {options.SourceConnectionString} TargetConnectionString = {options.TargetConnectionString} RecordBatchSize = {options.RecordBatchSize} MaxNumberOfChangesToDetailPerTable = {options.MaxNumberOfChangesToDetailPerTable} AnonymiseData = {options.AnonymiseData} SingleFullUpdate = {options.SingleFullUpdate} "); } var sourceDatabase = new GetOpenConnectionFromConnectionString(options.SourceConnectionString); var targetDatabase = new GetOpenConnectionFromConnectionString(options.TargetConnectionString); var genericSyncRepository = new GenericSyncRespository(log, sourceDatabase, targetDatabase); var avmsSyncRepository = new AvmsSyncRespository(log, sourceDatabase, targetDatabase); Func <ITableSpec, IMutateTarget> createMutateTarget; if (options.DummyRun) { createMutateTarget = tableSpec => new DummyMutateTarget(log, tableSpec); } else { createMutateTarget = tableSpec => new MutateTarget(log, genericSyncRepository, (int)Math.Max(5000 * tableSpec.BatchSizeMultiplier, 1), tableSpec); } var tables = new AvmsToAvmsPlusTables(log, options, avmsSyncRepository, !options.ExcludeVacancy).All; if (options.SingleTable != null) { tables = tables.Where(t => t.Name == options.SingleTable); } var controller = new Controller(options, log, genericSyncRepository, createMutateTarget, tables); if (options.Reset) { controller.Reset(); } var cancellationTokenSource = new System.Threading.CancellationTokenSource(); bool threaded = true; if (options.SingleFullUpdate) { controller.DoFullScanForAll(threaded); } else { controller.DoAll(new System.Threading.CancellationTokenSource(), threaded); } }