public async Task WhenInstanceCreated_ThenListInstanceEventsAsyncCanFeedHistorySetBuilder( [LinuxInstance] InstanceRequest testInstance) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var loggingService = new LoggingService(new BaseClientService.Initializer { HttpClientInitializer = Defaults.GetCredential() }); var computeService = new ComputeService(new BaseClientService.Initializer { HttpClientInitializer = Defaults.GetCredential() }); var instanceBuilder = new InstanceSetHistoryBuilder( DateTime.UtcNow.AddDays(-7), DateTime.UtcNow); await instanceBuilder.AddExistingInstances( computeService.Instances, computeService.Disks, Defaults.ProjectId); await loggingService.Entries.ListInstanceEventsAsync( new[] { Defaults.ProjectId }, instanceBuilder.StartDate, instanceBuilder); var set = instanceBuilder.Build(); var testInstanceHistory = set.Instances.FirstOrDefault(i => i.Reference == instanceRef); Assert.IsNotNull(testInstanceHistory, "Instance found in history"); }
public async Task WhenLinuxInstanceCreated_ThenReportContainsInstanceAndLicenseInfoFromItsDisk( [LinuxInstance] InstanceRequest testInstance, [Credential(Roles = new[] { PredefinedRole.ComputeViewer, PredefinedRole.LogsViewer })] CredentialRequest credential) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var startDate = DateTime.UtcNow.AddDays(-1); var builder = new AuditLogReportBuilder( new AuditLogAdapter(await credential.GetCredentialAsync()), new ComputeEngineAdapter(await credential.GetCredentialAsync()), new[] { TestProject.ProjectId }, startDate); var report = await builder.BuildAsync(CancellationToken.None); var instance = report.History.Instances.First(i => i.Reference == instanceRef); Assert.IsTrue(report.IsInstanceAnnotatedAs( instance, OperatingSystemTypes.Linux, LicenseTypes.Unknown)); }
public async Task WhenInstanceCreated_ThenListInstanceEventsAsyncCanFeedHistorySetBuilder( [LinuxInstance] InstanceRequest testInstance) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var instanceBuilder = new InstanceSetHistoryBuilder( DateTime.UtcNow.AddDays(-7), DateTime.UtcNow); var computeAdapter = new ComputeEngineAdapter(Defaults.GetCredential()); instanceBuilder.AddExistingInstances( await computeAdapter.ListInstancesAsync(Defaults.ProjectId, CancellationToken.None), await computeAdapter.ListDisksAsync(Defaults.ProjectId, CancellationToken.None), Defaults.ProjectId); var adapter = new AuditLogAdapter(Defaults.GetCredential()); await adapter.ListInstanceEventsAsync( new[] { Defaults.ProjectId }, null, // all zones. null, // all instances. instanceBuilder.StartDate, instanceBuilder, CancellationToken.None); var set = instanceBuilder.Build(); var testInstanceHistory = set.Instances.FirstOrDefault(i => i.Reference == instanceRef); Assert.IsNotNull(testInstanceHistory, "Instance found in history"); }
public async Task WhenInstanceCreated_ThenListLogEntriesReturnsInsertEvent( [LinuxInstance] InstanceRequest testInstance) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var loggingService = new LoggingService(new BaseClientService.Initializer { HttpClientInitializer = Defaults.GetCredential() }); var startDate = DateTime.UtcNow.AddDays(-30); var endDate = DateTime.UtcNow; var request = new ListLogEntriesRequest() { ResourceNames = new[] { "projects/" + Defaults.ProjectId }, Filter = $"resource.type=\"gce_instance\" " + $"AND protoPayload.methodName:{InsertInstanceEvent.Method} " + $"AND timestamp > {startDate:yyyy-MM-dd}", PageSize = 1000, OrderBy = "timestamp desc" }; var events = new List <EventBase>(); var instanceBuilder = new InstanceSetHistoryBuilder(startDate, endDate); // Creating the VM might be quicker than the logs become available. for (int retry = 0; retry < 4 && !events.Any(); retry++) { await loggingService.Entries.ListEventsAsync( request, events.Add, new Apis.Util.ExponentialBackOff()); if (!events.Any()) { await Task.Delay(20 * 1000); } } var insertEvent = events.OfType <InsertInstanceEvent>() .First(e => e.InstanceReference == instanceRef); Assert.IsNotNull(insertEvent); }
public async Task WhenLoadAsyncCompletes_ThenOutputContainsExistingData( [WindowsInstance] InstanceRequest testInstance) { await testInstance.AwaitReady(); var model = await SerialOutputModel.LoadAsync( new ComputeEngineAdapter(Defaults.GetCredential()), await testInstance.GetInstanceAsync(), SerialPortStream.ConsolePort, CancellationToken.None); Assert.IsFalse(string.IsNullOrWhiteSpace(model.Output)); StringAssert.Contains("Instance setup finished", model.Output); }
public async Task WhenUserNotInRole_ThenGetInstanceAsyncThrowsResourceAccessDeniedException( [LinuxInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.IapTunnelUser)] CredentialRequest credential) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var adapter = new ComputeEngineAdapter(await credential.GetCredentialAsync()); AssertEx.ThrowsAggregateException <ResourceAccessDeniedException>( () => adapter.GetInstanceAsync( testInstance.Locator, CancellationToken.None).Wait()); }
public async Task WhenInstanceCreated_ThenListLogEntriesReturnsInsertEvent( [LinuxInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.LogsViewer)] CredentialRequest credential) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var startDate = DateTime.UtcNow.AddDays(-30); var endDate = DateTime.UtcNow; var adapter = new AuditLogAdapter(await credential.GetCredentialAsync()); var request = new ListLogEntriesRequest() { ResourceNames = new[] { "projects/" + TestProject.ProjectId }, Filter = $"resource.type=\"gce_instance\" " + $"AND protoPayload.methodName:{InsertInstanceEvent.Method} " + $"AND timestamp > {startDate:yyyy-MM-dd}", PageSize = 1000, OrderBy = "timestamp desc" }; var events = new List <EventBase>(); var instanceBuilder = new InstanceSetHistoryBuilder(startDate, endDate); // Creating the VM might be quicker than the logs become available. for (int retry = 0; retry < 4 && !events.Any(); retry++) { await adapter.ListEventsAsync( request, events.Add, new Apis.Util.ExponentialBackOff(), CancellationToken.None); if (!events.Any()) { await Task.Delay(20 * 1000); } } var insertEvent = events.OfType <InsertInstanceEvent>() .First(e => e.InstanceReference == instanceRef); Assert.IsNotNull(insertEvent); }
public async Task WhenUserNotInRole_ThenIsGrantedPermissionReturnsFalse( [LinuxInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var adapter = new ResourceManagerAdapter(await credential.GetCredentialAsync()); var result = await adapter.IsGrantedPermission( TestProject.ProjectId, "iam.serviceAccounts.actAs"); Assert.IsFalse(result); }
private static async Task <IProjectExplorerVmInstanceNode> CreateNode( InstanceRequest testInstance, bool markAsRunning) { await testInstance.AwaitReady(); var instanceLocator = await testInstance.GetInstanceAsync(); var node = new Mock <IProjectExplorerVmInstanceNode>(); node.SetupGet(n => n.IsRunning).Returns(markAsRunning); node.SetupGet(n => n.ProjectId).Returns(instanceLocator.ProjectId); node.SetupGet(n => n.ZoneId).Returns(instanceLocator.Zone); node.SetupGet(n => n.InstanceName).Returns(instanceLocator.Name); return(node.Object); }
public async Task WhenLoadAsyncCompletes_ThenOutputContainsExistingData( [WindowsInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential) { await testInstance.AwaitReady(); var model = await SerialOutputModel.LoadAsync( "display-name", new ComputeEngineAdapter(await credential.GetCredentialAsync()), await testInstance.GetInstanceAsync(), SerialPortStream.ConsolePort, CancellationToken.None); Assert.IsFalse(string.IsNullOrWhiteSpace(model.Output)); Assert.AreEqual("display-name", model.DisplayName); StringAssert.Contains("Instance setup finished", model.Output); }
public async Task WhenUserInViewerRole_ThenListInstancesAsyncReturnsInstances( [LinuxInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential) { // Make sure there is at least one instance. await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var adapter = new ComputeEngineAdapter(await credential.GetCredentialAsync()); var instances = await adapter.ListInstancesAsync( TestProject.ProjectId, CancellationToken.None); Assert.Greater(instances.Count(), 1); Assert.IsNotNull(instances.FirstOrDefault(i => i.Name == instanceRef.Name)); }
public async Task WhenLoadAsyncCompletes_ThenPropertiesArePopulated( [WindowsInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential) { await testInstance.AwaitReady(); var model = await InstanceDetailsModel.LoadAsync( await testInstance.GetInstanceAsync(), new ComputeEngineAdapter(await credential.GetCredentialAsync()), CancellationToken.None); Assert.AreEqual(testInstance.Locator.Name, model.InstanceName); Assert.IsNull(model.Hostname); Assert.AreEqual("RUNNING", model.Status); Assert.IsNotNull(model.InternalIp); Assert.IsNotNull(model.ExternalIp); Assert.IsNotNull(model.Licenses); Assert.IsFalse(model.IsSoleTenant); }
public async Task WhenWindowsInstanceCreated_ThenReportContainsInstanceAndLicenseInfoFromItsDisk( [WindowsInstance] InstanceRequest testInstance) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var startDate = DateTime.UtcNow.AddDays(-1); var builder = new AuditLogReportBuilder( new AuditLogAdapter(Defaults.GetCredential()), new ComputeEngineAdapter(Defaults.GetCredential()), new[] { Defaults.ProjectId }, startDate); var report = await builder.BuildAsync(CancellationToken.None); var instance = report.History.Instances.First(i => i.Reference == instanceRef); Assert.IsTrue(report.IsInstanceAnnotatedAs( instance, OperatingSystemTypes.Windows, LicenseTypes.Spla)); }
public async Task WhenUserNotInRole_ThenListInstanceEventsAsyncThrowsResourceAccessDeniedException( [LinuxInstance] InstanceRequest testInstance, [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential) { await testInstance.AwaitReady(); var instanceRef = await testInstance.GetInstanceAsync(); var instanceBuilder = new InstanceSetHistoryBuilder( DateTime.UtcNow.AddDays(-7), DateTime.UtcNow); var adapter = new AuditLogAdapter(await credential.GetCredentialAsync()); AssertEx.ThrowsAggregateException <ResourceAccessDeniedException>( () => adapter.ListInstanceEventsAsync( new[] { TestProject.ProjectId }, null, // all zones. null, // all instances. instanceBuilder.StartDate, instanceBuilder, CancellationToken.None).Wait()); }