public void WhenParseStringCreatedByToString_ResultIsSame()
        {
            var settings = VmInstanceConnectionSettings.CreateNew("project-1", "instance-1");

            settings.Username.Value                     = "user";
            settings.Domain.Value                       = "domain";
            settings.ConnectionBar.Value                = RdpConnectionBarState.Off;
            settings.DesktopSize.Value                  = RdpDesktopSize.ScreenSize;
            settings.AuthenticationLevel.Value          = RdpAuthenticationLevel.RequireServerAuthentication;
            settings.ColorDepth.Value                   = RdpColorDepth.TrueColor;
            settings.AudioMode.Value                    = RdpAudioMode.PlayOnServer;
            settings.RedirectClipboard.Value            = RdpRedirectClipboard.Disabled;
            settings.CredentialGenerationBehavior.Value = RdpCredentialGenerationBehavior.Disallow;

            var url = new IapRdpUrl(
                new InstanceLocator("project-1", "us-central1-a", "instance-1"),
                settings.ToUrlQuery());

            var copy = VmInstanceConnectionSettings.FromUrl(url);

            Assert.AreEqual("user", copy.Username.Value);
            Assert.AreEqual("domain", copy.Domain.Value);
            Assert.AreEqual(RdpConnectionBarState.Off, copy.ConnectionBar.Value);
            Assert.AreEqual(RdpDesktopSize.ScreenSize, copy.DesktopSize.Value);
            Assert.AreEqual(RdpAuthenticationLevel.RequireServerAuthentication, copy.AuthenticationLevel.Value);
            Assert.AreEqual(RdpColorDepth.TrueColor, copy.ColorDepth.Value);
            Assert.AreEqual(RdpAudioMode.PlayOnServer, copy.AudioMode.Value);
            Assert.AreEqual(RdpRedirectClipboard.Disabled, copy.RedirectClipboard.Value);
            Assert.AreEqual(RdpCredentialGenerationBehavior.Disallow, copy.CredentialGenerationBehavior.Value);
        }
        public void WhenQueryStringContainsValidUserOrDomain_ThenSettingsUseDecodedValues()
        {
            var url = IapRdpUrl.FromString("iap-rdp:///my-project/us-central1-a/my-instance?" +
                                           "userNAME=John%20Doe&PassworD=ignore&Domain=%20%20mydomain&");
            var settings = VmInstanceConnectionSettings.FromUrl(url);

            Assert.AreEqual("John Doe", settings.Username.Value);
            Assert.IsNull(settings.Password.Value);
            Assert.AreEqual("  mydomain", settings.Domain.Value);
        }
        public void WhenQueryStringContainsValidSettings_ThenSettingsUseDecodedValues()
        {
            var url = IapRdpUrl.FromString("iap-rdp:///my-project/us-central1-a/my-instance?" +
                                           "ConnectionBar=1&DesktopSize=1&AuthenticationLevel=0&ColorDepth=2&" +
                                           "AudioMode=2&RedirectClipboard=0&CredentialGenerationBehavior=0&Rdpport=13389");
            var settings = VmInstanceConnectionSettings.FromUrl(url);

            Assert.AreEqual(RdpConnectionBarState.Pinned, settings.ConnectionBar.Value);
            Assert.AreEqual(RdpDesktopSize.ScreenSize, settings.DesktopSize.Value);
            Assert.AreEqual(RdpAuthenticationLevel.AttemptServerAuthentication, settings.AuthenticationLevel.Value);
            Assert.AreEqual(RdpColorDepth.DeepColor, settings.ColorDepth.Value);
            Assert.AreEqual(RdpAudioMode.DoNotPlay, settings.AudioMode.Value);
            Assert.AreEqual(RdpRedirectClipboard.Disabled, settings.RedirectClipboard.Value);
            Assert.AreEqual(RdpCredentialGenerationBehavior.Allow, settings.CredentialGenerationBehavior.Value);
            Assert.AreEqual(13389, settings.RdpPort.Value);
        }
        public void WhenQueryStringContainsNonsense_ThenSettingsUsesDefaults()
        {
            var url      = IapRdpUrl.FromString("iap-rdp:///my-project/us-central1-a/my-instance?a=b&user=wrongcase&_");
            var settings = VmInstanceConnectionSettings.FromUrl(url);

            Assert.IsNull(settings.Username.Value);
            Assert.IsNull(settings.Password.Value);
            Assert.IsNull(settings.Domain.Value);
            Assert.AreEqual(RdpConnectionBarState._Default, settings.ConnectionBar.Value);
            Assert.AreEqual(RdpDesktopSize._Default, settings.DesktopSize.Value);
            Assert.AreEqual(RdpAuthenticationLevel._Default, settings.AuthenticationLevel.Value);
            Assert.AreEqual(RdpColorDepth._Default, settings.ColorDepth.Value);
            Assert.AreEqual(RdpAudioMode._Default, settings.AudioMode.Value);
            Assert.AreEqual(RdpRedirectClipboard._Default, settings.RedirectClipboard.Value);
            Assert.AreEqual(RdpCredentialGenerationBehavior._Default, settings.CredentialGenerationBehavior.Value);
        }
        public void WhenQueryStringContainsOutOfRangeValues_ThenSettingsUsesDefaults()
        {
            var url = IapRdpUrl.FromString("iap-rdp:///my-project/us-central1-a/my-instance?" +
                                           "ConnectionBar=-1&DesktopSize=a&AuthenticationLevel=null&ColorDepth=&" +
                                           "AudioMode=9999&RedirectClipboard=b&RedirectClipboard=c&" +
                                           "CredentialGenerationBehavior=-11");
            var settings = VmInstanceConnectionSettings.FromUrl(url);

            Assert.IsNull(settings.Username.Value);
            Assert.IsNull(settings.Password.Value);
            Assert.IsNull(settings.Domain.Value);
            Assert.AreEqual(RdpConnectionBarState._Default, settings.ConnectionBar.Value);
            Assert.AreEqual(RdpDesktopSize._Default, settings.DesktopSize.Value);
            Assert.AreEqual(RdpAuthenticationLevel._Default, settings.AuthenticationLevel.Value);
            Assert.AreEqual(RdpColorDepth._Default, settings.ColorDepth.Value);
            Assert.AreEqual(RdpAudioMode._Default, settings.AudioMode.Value);
            Assert.AreEqual(RdpRedirectClipboard._Default, settings.RedirectClipboard.Value);
            Assert.AreEqual(RdpCredentialGenerationBehavior._Default, settings.CredentialGenerationBehavior.Value);
        }