Example #1
0
        public async Task WhenSetClientConnectionEncryptionLevelSetToLow_ThenConnectionSucceeds(
            [WindowsInstance(InitializeScript = @"
                & reg add ""HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"" /t REG_DWORD /v MinEncryptionLevel /d 1 /f | Out-Default
            ")] InstanceRequest testInstance,
            [Credential] CredentialRequest credential)
        {
            await testInstance.AwaitReady();

            using (var tunnel = RdpTunnel.Create(
                       testInstance.Locator,
                       await credential.GetCredentialAsync()))
            {
                var session = await Connect(tunnel, testInstance.Locator);

                AwaitEvent <RemoteDesktopConnectionSuceededEvent>();
                Assert.IsNull(this.ExceptionShown);

                RemoteDesktopWindowClosedEvent expectedEvent = null;

                this.serviceProvider.GetService <IEventService>()
                .BindHandler <RemoteDesktopWindowClosedEvent>(e =>
                {
                    expectedEvent = e;
                });

                Delay(TimeSpan.FromSeconds(5));
                session.Close();

                Assert.IsNotNull(expectedEvent);
            }
        }
 public CredentialsDialog(CredentialRequest request)
     : this()
 {
     messageLabel.Text = request.Message;
     try
     {
         foreach (var frame in request.StackTrace.GetFrames())
         {
             stackTraceListView.Items.Add(new ListViewItem(new string[]
             {
                 frame.GetMethod().ToString(),
                 frame.GetMethod().Module.Assembly.FullName,
                 frame.GetMethod().Module.FullyQualifiedName,
             }));
         }
     }
     catch (Exception ex)
     {
         stackTraceListView.Items.Add(new ListViewItem(new string[]
         {
             string.Format("Failed to read stack trace. {0}", ex.Message),
             ex.TargetSite.Module.Assembly.FullName,
             ex.TargetSite.Module.FullyQualifiedName,
         }));
     }
 }
        public async Task WhenUsingInvalidProjectId_ThenListEventsAsyncThrowsException(
            [Credential(Role = PredefinedRole.LogsViewer)] CredentialRequest credential)
        {
            var startDate = DateTime.UtcNow.AddDays(-30);
            var request   = new ListLogEntriesRequest()
            {
                ResourceNames = new[]
                {
                    "projects/invalid"
                },
                Filter = $"resource.type=\"gce_instance\" " +
                         $"AND protoPayload.methodName:{InsertInstanceEvent.Method} " +
                         $"AND timestamp > {startDate:yyyy-MM-dd}",
                PageSize = 1000,
                OrderBy  = "timestamp desc"
            };

            var adapter = new AuditLogAdapter(await credential.GetCredentialAsync());

            AssertEx.ThrowsAggregateException <GoogleApiException>(
                () => adapter.ListEventsAsync(
                    request,
                    _ => { },
                    new Apis.Util.ExponentialBackOff(),
                    CancellationToken.None).Wait());
        }
        public async Task WhenCredentialsInvalid_ThenErrorIsShownAndWindowIsClosed(
            [WindowsInstance] InstanceRequest testInstance,
            [Credential] CredentialRequest credential)
        {
            await testInstance.AwaitReady();

            using (var tunnel = RdpTunnel.Create(
                       testInstance.Locator,
                       await credential.GetCredentialAsync()))
            {
                var rdpService = new RemoteDesktopService(this.serviceProvider);
                var session    = rdpService.Connect(
                    testInstance.Locator,
                    "localhost",
                    (ushort)tunnel.LocalPort,
                    new VmInstanceConnectionSettings()
                {
                    Username                   = "******",
                    Password                   = SecureStringExtensions.FromClearText("wrong"),
                    AuthenticationLevel        = RdpAuthenticationLevel.NoServerAuthentication,
                    UserAuthenticationBehavior = RdpUserAuthenticationBehavior.AbortOnFailure,
                    DesktopSize                = RdpDesktopSize.ClientSize
                });

                AwaitEvent <RemoteDesktopConnectionFailedEvent>();
                Assert.IsNotNull(this.ExceptionShown);
                Assert.IsInstanceOf(typeof(RdpDisconnectedException), this.ExceptionShown);
                Assert.AreEqual(2055, ((RdpDisconnectedException)this.ExceptionShown).DisconnectReason);
            }
        }
        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));
        }
Example #6
0
        public async Task WhenServerClosesConnectionAfterSingleHttpRequest_ThenRelayEnds(
            [LinuxInstance(InitializeScript = InstallApache)] InstanceRequest vm,
            [Credential] CredentialRequest credential)
        {
            await vm.AwaitReady();

            var stream = ConnectToWebServer(
                vm.Locator,
                await credential.GetCredentialAsync());

            byte[] request = new ASCIIEncoding().GetBytes(
                "GET / HTTP/1.0\r\n\r\n");
            await stream.WriteAsync(request, 0, request.Length, this.tokenSource.Token);

            byte[] buffer = new byte[stream.MinReadSize];

            var response = new HttpResponseAccumulator();
            int bytesRead;

            while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length, this.tokenSource.Token)) > 0)
            {
                response.Accumulate(buffer, 0, bytesRead);
            }

            await stream.CloseAsync(this.tokenSource.Token);

            Assert.AreEqual(response.ExpectedBytes, response.TotalBytesRead);
        }
        /// <summary>
        /// Get a credential for detailed display
        /// </summary>
        /// <param name="id"></param>
        /// <param name="user"></param>
        /// <param name="skippingCache">If true, do not use the cached version</param>
        /// <returns></returns>
        public static ThisEntity GetDetail(int id, bool skippingCache = false)
        {
            CredentialRequest cr = new CredentialRequest();

            cr.IsDetailRequest();

            return(GetDetail(id, cr, skippingCache));
        }
Example #8
0
        public void HandleRegisterButton()
        {
            CredentialRequest credentialRequest = registerScreen.GetRegisterCredentials();

            if (credentialRequest != null)
            {
                loginManager.LoginServerClient.Register(credentialRequest, HandleRegisterResponse);
            }
        }
Example #9
0
        public void HandleLoginButton()
        {
            CredentialRequest credentialRequest = loginScreen.GetLoginCredentials();

            if (credentialRequest != null)
            {
                loginManager.LoginServerClient.Authenticate(credentialRequest, HandleAuthenticateResponse);
            }
        }
        public async Task WhenUserNotInRole_ThenGetImageThrowsResourceAccessDeniedException(
            [Credential(Role = PredefinedRole.IapTunnelUser)] CredentialRequest credential)
        {
            var adapter = new ComputeEngineAdapter(await credential.GetCredentialAsync());

            AssertEx.ThrowsAggregateException <ResourceAccessDeniedException>(
                () => adapter.GetImageAsync(
                    new ImageLocator(TestProject.ProjectId, "someimage"),
                    CancellationToken.None).Wait());
        }
Example #11
0
        public static WMA.CredentialDetail GetDetailForAPI(int id, bool skippingCache = false)
        {
            CredentialRequest cr = new CredentialRequest();

            cr.IsDetailRequest();
            cr.IncludingProcessProfiles = false;
            var entity = EntityHelper.GetDetail(id, cr, skippingCache);

            return(MapToAPI(entity));
        }
Example #12
0
        public async Task WhenSwitchingToCloudNode_ThenControlsAreDisabled(
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential)
        {
            var viewModel = CreateViewModel(await credential.GetCredentialAsync());
            var node      = new Mock <IProjectExplorerCloudNode>();
            await viewModel.SwitchToModelAsync(node.Object);

            Assert.IsFalse(viewModel.IsEnableTailingButtonEnabled);
            Assert.IsFalse(viewModel.IsOutputBoxEnabled);
            StringAssert.Contains(SerialOutputViewModel.DefaultWindowTitle, viewModel.WindowTitle);
        }
Example #13
0
        public async Task WhenUserNotInRole_ThenIsGrantedPermissionReturnsFalse(
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential)
        {
            var adapter = new ResourceManagerAdapter(await credential.GetCredentialAsync());

            var result = await adapter.IsGrantedPermission(
                TestProject.ProjectId,
                "compute.disks.create");

            Assert.IsFalse(result);
        }
Example #14
0
 /// <summary>
 /// CentCom call to log in and receive an authentication token.
 /// </summary>
 /// <param name="credentialRequest"></param>
 /// <param name="resultCallback"></param>
 public void Authenticate(CredentialRequest credentialRequest, Action <string, bool> resultCallback)
 {
     monoBehaviour.StartCoroutine(HandlePayloadRequest(
                                      UnityWebRequest.kHttpVerbPOST,
                                      connectionAddress + Post_Authenticate,
                                      JsonUtility.ToJson(credentialRequest),
                                      "Authenticate",
                                      false,
                                      resultCallback
                                      ));
 }
        public async Task <IActionResult> LoginAsync([FromBody] CredentialRequest credentials)
        {
            var command = new GenerateTokenCommand(_mapper.Map <CredentialsDto>(credentials));
            var result  = await _bus.Send(command);

            if (!string.IsNullOrEmpty(result.ErrorMessage))
            {
                throw new AuthenticationException(result.ErrorMessage);
            }

            return(Ok(_mapper.Map <TokenResponse>(result)));
        }
Example #16
0
        public CredentialRequest GetLoginCredentials()
        {
            if (IsInputValid())
            {
                CredentialRequest credentialRequest = new CredentialRequest();
                credentialRequest.email    = emailInput.text;
                credentialRequest.password = passwordInput.text;
                return(credentialRequest);
            }

            return(null);
        }
Example #17
0
        public async Task WhenApiReturns404_ThenExecuteAsStreamOrThrowAsyncThrowsException(
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential
            )
        {
            var computeService = new ComputeService(new BaseClientService.Initializer
            {
                HttpClientInitializer = await credential.GetCredentialAsync()
            });

            AssertEx.ThrowsAggregateException <GoogleApiException>(
                () => computeService.Instances.Get("invalid", "invalid", "invalid")
                .ExecuteAsStreamOrThrowAsync(CancellationToken.None).Wait());
        }
Example #18
0
        public async Task WhenSwitchingToStoppedInstanceNode_ThenControlsAreDisabled(
            [WindowsInstance] InstanceRequest testInstance,
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential)
        {
            var viewModel = CreateViewModel(await credential.GetCredentialAsync());
            var node      = await CreateNode(testInstance, false);

            await viewModel.SwitchToModelAsync(node);

            Assert.IsFalse(viewModel.IsEnableTailingButtonEnabled);
            Assert.IsFalse(viewModel.IsOutputBoxEnabled);
            StringAssert.Contains(SerialOutputViewModel.DefaultWindowTitle, viewModel.WindowTitle);
        }
Example #19
0
        public async Task WhenBlocked_ThenEnableHasNoImpactOnTailing(
            [WindowsInstance] InstanceRequest testInstance,
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential)
        {
            var viewModel = CreateViewModel(await credential.GetCredentialAsync());
            var node      = await CreateNode(testInstance, true);

            await viewModel.SwitchToModelAsync(node);

            viewModel.IsTailBlocked = true;
            viewModel.IsTailEnabled = true;

            Assert.IsNull(viewModel.TailCancellationTokenSource, "not tailing yet");
        }
Example #20
0
        public bool RequestCredential(CredentialRequest request, out System.Net.NetworkCredential credential)
        {
            credential = null;

            var dialog = new CredentialsDialog(request);

            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                credential = dialog.GetCredential();
                return(true);
            }

            return(false);
        }
Example #21
0
        public async Task WhenSendingMessagesToEchoServer_MessagesAreReceivedVerbatim(
            [LinuxInstance(InitializeScript = InstallEchoServer)] InstanceRequest vm,
            [Credential] CredentialRequest credential,
            [Values(
                 1,
                 (int)DataMessage.MaxDataLength - 1,
                 (int)DataMessage.MaxDataLength,
                 (int)DataMessage.MaxDataLength + 1,
                 (int)DataMessage.MaxDataLength * 10)] int length,
            [Values(1, 3)] int count)
        {
            var message = new byte[length];

            FillArray(message);

            await vm.AwaitReady();

            var stream = ConnectToEchoServer(
                vm.Locator,
                await credential.GetCredentialAsync());

            for (int i = 0; i < count; i++)
            {
                await stream.WriteAsync(message, 0, message.Length, this.tokenSource.Token);

                var response       = new byte[length];
                int totalBytesRead = 0;
                while (true)
                {
                    var bytesRead = await stream.ReadAsync(
                        response,
                        totalBytesRead,
                        response.Length - totalBytesRead,
                        this.tokenSource.Token);

                    totalBytesRead += bytesRead;

                    if (bytesRead == 0 || totalBytesRead >= length)
                    {
                        break;
                    }
                }

                Assert.AreEqual(length, totalBytesRead);
                Assert.AreEqual(message, response);
            }

            await stream.CloseAsync(this.tokenSource.Token);
        }
        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);
        }
Example #25
0
        public async Task WhenSwitchingToRunningInstanceNode_ThenOutputIsPopulated(
            [WindowsInstance] InstanceRequest testInstance,
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential)
        {
            var viewModel = CreateViewModel(await credential.GetCredentialAsync());
            var node      = await CreateNode(testInstance, true);

            await viewModel.SwitchToModelAsync(node);

            Assert.IsTrue(viewModel.IsEnableTailingButtonEnabled);
            Assert.IsTrue(viewModel.IsOutputBoxEnabled);
            StringAssert.Contains("Instance setup finished", viewModel.Output);

            StringAssert.Contains(SerialOutputViewModel.DefaultWindowTitle, viewModel.WindowTitle);
            StringAssert.Contains(testInstance.Locator.Name, viewModel.WindowTitle);
        }
        public async Task WhenImageNotFound_ThenAnnotationNotAdded(
            [Credential(Role = PredefinedRole.ComputeViewer)] CredentialRequest credential)
        {
            var annotatedSet = CreateSet(
                new ImageLocator("unknown", "beos"));

            Assert.AreEqual(0, annotatedSet.LicenseAnnotations.Count());

            var computeEngineAdapter = new ComputeEngineAdapter(
                await credential.GetCredentialAsync());
            await LicenseLoader.LoadLicenseAnnotationsAsync(
                annotatedSet,
                computeEngineAdapter,
                CancellationToken.None);

            Assert.AreEqual(0, annotatedSet.LicenseAnnotations.Count());
        }
Example #27
0
        public async Task WhenServerNotListening_ThenReadReturnsZero(
            [LinuxInstance] InstanceRequest vm,
            [Credential] CredentialRequest credential)
        {
            await vm.AwaitReady();

            var stream = ConnectToWebServer(
                vm.Locator,
                await credential.GetCredentialAsync());

            byte[] request = new ASCIIEncoding().GetBytes(
                $"GET / HTTP/1.1\r\nHost:www\r\nConnection: keep-alive\r\n\r\n");
            await stream.WriteAsync(request, 0, request.Length, CancellationToken.None);

            byte[] buffer = new byte[stream.MinReadSize];
            Assert.AreEqual(0, stream.ReadAsync(buffer, 0, buffer.Length, CancellationToken.None).Result);
        }
        public async Task WhenInstanceExistsAndIsListening_ThenProbeSucceeds(
            [WindowsInstance] InstanceRequest testInstance,
            [Credential] CredentialRequest credential)
        {
            await testInstance.AwaitReady();

            using (var stream = new SshRelayStream(
                       new IapTunnelingEndpoint(
                           await credential.GetCredentialAsync(),
                           testInstance.Locator,
                           3389,
                           IapTunnelingEndpoint.DefaultNetworkInterface,
                           TestProject.UserAgent)))
            {
                await stream.TestConnectionAsync(TimeSpan.FromSeconds(10));
            }
        }
        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 WhenInstanceDoesntExist_ThenProbeFailsWithUnauthorizedException(
     [Credential] CredentialRequest credential)
 {
     using (var stream = new SshRelayStream(
                new IapTunnelingEndpoint(
                    await credential.GetCredentialAsync(),
                    new InstanceLocator(
                        TestProject.ProjectId,
                        TestProject.Zone,
                        "invalid"),
                    80,
                    IapTunnelingEndpoint.DefaultNetworkInterface,
                    TestProject.UserAgent)))
     {
         AssertEx.ThrowsAggregateException <UnauthorizedException>(() =>
                                                                   stream.TestConnectionAsync(TimeSpan.FromSeconds(10)).Wait());
     }
 }