public SignalConfigurationControlViewModel( IAzureResourceManagerClient azureResourceManagerClient, ITracer tracer, SmartSignalManifest smartSignalManifest, SmartSignalRunner signalRunner) { this.azureResourceManagerClient = azureResourceManagerClient; this.smartSignalManifes = smartSignalManifest; this.tracer = tracer; this.SignalRunner = signalRunner; this.SignalName = this.smartSignalManifes.Name; this.ShouldShowStatusControl = false; // Initialize cadences combo box IEnumerable <SignalCadence> cadences = this.smartSignalManifes.SupportedCadencesInMinutes .Select(cadence => new SignalCadence(TimeSpan.FromMinutes(cadence))); this.Cadences = new ObservableCollection <SignalCadence>(cadences); // Initialize combo boxes read tasks this.ReadSubscriptionsTask = new ObservableTask <ObservableCollection <AzureSubscription> >( this.GetSubscriptionsAsync()); this.ReadResourceGroupsTask = new ObservableTask <ObservableCollection <string> >( Task.FromResult(new ObservableCollection <string>())); this.ReadResourceTypesTask = new ObservableTask <ObservableCollection <string> >( Task.FromResult(new ObservableCollection <string>())); this.ReadResourcesTask = new ObservableTask <ObservableCollection <ResourceIdentifier> >( Task.FromResult(new ObservableCollection <ResourceIdentifier>())); }
public async Task WhenRunningSignalThenCustomExceptionsAreHandledCorrectly() { // Notify the signal that it should throw a custom exception this.signal.ShouldThrowCustom = true; // Run the signal ISmartSignalRunner runner = new SmartSignalRunner(this.smartSignalsRepositoryMock.Object, this.smartSignalLoaderMock.Object, this.analysisServicesFactoryMock.Object, this.azureResourceManagerClientMock.Object, this.queryRunInfoProviderMock.Object, this.tracerMock.Object); await runner.RunAsync(this.request, default(CancellationToken)); }
public SignalsResultsControlViewModel(SmartSignalRunner signalRunner) { this.SignalRunner = signalRunner; this.SignalResultDetailsControlViewModel = null; this.ResultDetailsControlClosed += () => { this.SelectedResult = null; }; }
public async Task WhenRunningSignalThenTheCorrectResultItemIsReturned() { // Run the signal and validate results ISmartSignalRunner runner = new SmartSignalRunner(this.smartSignalsRepositoryMock.Object, this.smartSignalLoaderMock.Object, this.analysisServicesFactoryMock.Object, this.azureResourceManagerClientMock.Object, this.queryRunInfoProviderMock.Object, this.tracerMock.Object); List <SmartSignalResultItemPresentation> resultItemPresentations = await runner.RunAsync(this.request, default(CancellationToken)); Assert.IsNotNull(resultItemPresentations, "Presentation list is null"); Assert.AreEqual(1, resultItemPresentations.Count); Assert.AreEqual("Test title", resultItemPresentations.Single().Title); Assert.AreEqual("Summary value", resultItemPresentations.Single().Summary.Value); }
/// <summary> /// Raises the <see cref="E:System.Windows.Application.Startup" /> event. /// </summary> /// <param name="e">A <see cref="T:System.Windows.StartupEventArgs" /> that contains the event data.</param> protected override void OnStartup(StartupEventArgs e) { ITracer stringTracer = new StringTracer(string.Empty); ITracer consoleTracer = new ConsoleTracer(string.Empty); var signalLoader = new SmartSignalLoader(consoleTracer); // *Temporary*: if package file path wasn't accepted, raise file selection window to allow package file selection. // This option should be removed before launching version for customers (bug for tracking: 1177247) string signalPackagePath = e.Args.Length != 1 ? this.GetSignalPackagePath() : Diagnostics.EnsureStringNotNullOrWhiteSpace(() => e.Args[0]); SmartSignalPackage signalPackage; using (var fileStream = new FileStream(signalPackagePath, FileMode.Open)) { signalPackage = SmartSignalPackage.CreateFromStream(fileStream, consoleTracer); } SmartSignalManifest signalManifest = signalPackage.Manifest; ISmartSignal signal = signalLoader.LoadSignal(signalPackage); // Authenticate the user to Active Directory var authenticationServices = new AuthenticationServices(); authenticationServices.AuthenticateUser(); ICredentialsFactory credentialsFactory = new ActiveDirectoryCredentialsFactory(authenticationServices); IAzureResourceManagerClient azureResourceManagerClient = new AzureResourceManagerClient(credentialsFactory, consoleTracer); // Create analysis service factory var queryRunInroProvider = new QueryRunInfoProvider(azureResourceManagerClient); var httpClientWrapper = new HttpClientWrapper(); IAnalysisServicesFactory analysisServicesFactory = new AnalysisServicesFactory(consoleTracer, httpClientWrapper, credentialsFactory, azureResourceManagerClient, queryRunInroProvider); var signalRunner = new SmartSignalRunner(signal, analysisServicesFactory, queryRunInroProvider, signalManifest, stringTracer); // Create a Unity container with all the required models and view models registrations Container = new UnityContainer(); Container .RegisterInstance(stringTracer) .RegisterInstance(new SignalsResultsRepository()) .RegisterInstance(authenticationServices) .RegisterInstance(azureResourceManagerClient) .RegisterInstance(signal) .RegisterInstance(signalManifest) .RegisterInstance(analysisServicesFactory) .RegisterInstance(signalRunner); }
public async Task WhenRunningSignalThenExceptionsAreHandledCorrectly() { // Notify the signal that it should throw an exception this.signal.ShouldThrow = true; // Run the signal ISmartSignalRunner runner = new SmartSignalRunner(this.smartSignalsRepositoryMock.Object, this.smartSignalLoaderMock.Object, this.analysisServicesFactoryMock.Object, this.azureResourceManagerClientMock.Object, this.queryRunInfoProviderMock.Object, this.tracerMock.Object); try { await runner.RunAsync(this.request, default(CancellationToken)); } catch (SmartSignalCustomException e) when(e.SignalExceptionType == typeof(DivideByZeroException).ToString()) { // Expected exception } }
public void WhenRunningSignalThenCancellationIsHandledGracefully() { // Notify the signal that it should get stuck and wait for cancellation this.signal.ShouldStuck = true; // Run the signal asynchronously ISmartSignalRunner runner = new SmartSignalRunner(this.smartSignalsRepositoryMock.Object, this.smartSignalLoaderMock.Object, this.analysisServicesFactoryMock.Object, this.azureResourceManagerClientMock.Object, this.queryRunInfoProviderMock.Object, this.tracerMock.Object); CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); Task t = runner.RunAsync(this.request, cancellationTokenSource.Token); SpinWait.SpinUntil(() => this.signal.IsRunning); // Cancel and wait for expected result cancellationTokenSource.Cancel(); try { t.Wait(TimeSpan.FromSeconds(10)); } catch (AggregateException e) when((e.InnerExceptions.Single() as SmartSignalCustomException).SignalExceptionType == typeof(TaskCanceledException).ToString()) { Assert.IsTrue(this.signal.WasCanceled, "The signal was not canceled!"); } }
private async Task RunSignalWithResourceTypes(ResourceType requestResourceType, ResourceType signalResourceType, bool shouldFail) { this.TestInitialize(requestResourceType, signalResourceType); ISmartSignalRunner runner = new SmartSignalRunner(this.smartSignalsRepositoryMock.Object, this.smartSignalLoaderMock.Object, this.analysisServicesFactoryMock.Object, this.azureResourceManagerClientMock.Object, this.queryRunInfoProviderMock.Object, this.tracerMock.Object); try { List <SmartSignalResultItemPresentation> resultItemPresentations = await runner.RunAsync(this.request, default(CancellationToken)); if (shouldFail) { Assert.Fail("An exception should have been thrown - resource types are not compatible"); } Assert.AreEqual(1, resultItemPresentations.Count); } catch (IncompatibleResourceTypesException) { if (!shouldFail) { throw; } } }
public MainWindowViewModel(SignalsResultsRepository signalsResultsRepository, AuthenticationServices authenticationServices, SmartSignalRunner signalRunner) { this.NumberOfResultsFound = 0; signalsResultsRepository.Results.CollectionChanged += (sender, args) => { this.NumberOfResultsFound = args.NewItems.Count; }; this.UserName = authenticationServices.AuthenticationResult.UserInfo.GivenName; this.SignalRunner = signalRunner; }
public EmulationStatusControlViewModel(SmartSignalRunner signalRunner, ITracer tracer) { this.SignalRunner = signalRunner; this.Tracer = tracer; }