Esempio n. 1
0
        private async void btnMenuItemAddNew_OnClick(object sender, RoutedEventArgs e)
        {
            var addNewTunnelWindow = new AddNewTunnelWindow();

            addNewTunnelWindow.ShowDialog();

            if (addNewTunnelWindow.DialogResult != null && addNewTunnelWindow.DialogResult.Value)
            {
                var startTunnelDto = new StartTunnelDTO
                {
                    name     = addNewTunnelWindow.tbName.Text,
                    proto    = addNewTunnelWindow.cobProtocol.SelectionBoxItem.ToString(),
                    addr     = addNewTunnelWindow.tbLocalPort.Text,
                    bind_tls = "false"
                };

                // bind_tls http bind an HTTPS or HTTP endpoint or both true, false, or both
                if (startTunnelDto.proto == "https")
                {
                    startTunnelDto.proto    = "http";
                    startTunnelDto.bind_tls = "true";
                }

                var httpResponseMessage = await _ngrokManager.StartTunnel(startTunnelDto);

                if ((int)httpResponseMessage.StatusCode == 201)
                {
                    var tunnelDetail =
                        JsonConvert.DeserializeObject <TunnelDetail>(
                            await httpResponseMessage.Content.ReadAsStringAsync());

                    var tunnel = new TunnelDescription
                    {
                        Name     = addNewTunnelWindow.tbName.Text,
                        Protocol = addNewTunnelWindow.cobProtocol.SelectionBoxItem.ToString(),
                        Port     = Convert.ToInt32(addNewTunnelWindow.tbLocalPort.Text),
                        Url      = tunnelDetail.PublicUrl
                    };
                    _tunnelDescriptions.Add(tunnel);
                }
                else
                {
                    var tunnelError =
                        JsonConvert.DeserializeObject <TunnelError>(
                            await httpResponseMessage.Content.ReadAsStringAsync());
                    MessageBox.Show(tunnelError.Details.Err);
                }
            }
        }
Esempio n. 2
0
        public async Task ListTunnels_StartTunnel8080AndCheckTheList_True()
        {
            // ARRANGE
            var are = new AutoResetEvent(false);

            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var ngrokManager = new NgrokManager();

            ngrokManager.StartNgrok();
            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            var startTunnelDto = new StartTunnelDTO
            {
                name     = "foundryvtt",
                proto    = "http",
                addr     = "30000",
                bind_tls = "false"
            };

            await ngrokManager.StartTunnelAsync(startTunnelDto);

            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            // ACT
            are.WaitOne(TimeSpan.FromSeconds(1));
            var httpResponseMessage = await ngrokManager.ListTunnelsAsync();

            var tunnelDetail =
                JsonSerializer.Deserialize <TunnelsDetailsDTO>(
                    await httpResponseMessage.Content.ReadAsStringAsync());

            // ASSERT

            Assert.Equal("foundryvtt", tunnelDetail.Tunnels[0].Name);
        }
Esempio n. 3
0
        public async Task StartTunnel_TestOptionalRegions_True(string regionNameShort, string regionNameFull)
        {
            // ARRANGE
            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var parsedEnum = (NgrokManager.Region)Enum.Parse(typeof(NgrokManager.Region), regionNameFull, true);

            var ngrokManager = new NgrokManager();

            // ACT
            ngrokManager.StartNgrok(parsedEnum);
            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            var startTunnelDto = new StartTunnelDTO
            {
                name     = "test",
                proto    = "http",
                addr     = "30000",
                bind_tls = "false"
            };


            var httpResponseMessage = await ngrokManager.StartTunnelAsync(startTunnelDto);

            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            // ASSERT
            var tunnelDetail =
                JsonSerializer.Deserialize <TunnelDetailDTO>(
                    await httpResponseMessage.Content.ReadAsStringAsync());

            Assert.Contains($".{regionNameShort}.", tunnelDetail.PublicUrl.ToString());
        }
Esempio n. 4
0
        public async Task DeleteCapturedRequests_Return204WithNoBody_True()
        {
            // ARRANGE
            var are = new AutoResetEvent(false);

            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var ngrokManager = new NgrokManager();

            ngrokManager.StartNgrok();
            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            var startTunnelDto = new StartTunnelDTO
            {
                name     = "foundryvtt",
                proto    = "http",
                addr     = "30000",
                bind_tls = "false"
            };

            await ngrokManager.StartTunnelAsync(startTunnelDto);

            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            // ACT
            are.WaitOne(TimeSpan.FromSeconds(1));
            var httpResponseMessage = await ngrokManager.DeleteCapturedRequests();

            // ASSERT
            Assert.Equal(HttpStatusCode.NoContent, httpResponseMessage.StatusCode);
        }
Esempio n. 5
0
 /// <summary>
 ///     Starts a Ngrok tunnel
 /// </summary>
 /// <param name="startTunnelDto"></param>
 /// <returns>A httpResponseMessage that can be parse into TunnelDetailDTO</returns>
 /// <exception cref="ArgumentNullException">The input, can't be null</exception>
 /// <exception cref="ArgumentException">Missing values in input</exception>
 public async Task <HttpResponseMessage> StartTunnelAsync(StartTunnelDTO startTunnelDto, CancellationToken cancellationToken = default)
 {
     if (startTunnelDto == null)
     {
         throw new ArgumentNullException(nameof(startTunnelDto));
     }
     if (string.IsNullOrWhiteSpace(startTunnelDto.addr))
     {
         throw new ArgumentException("Value cannot be null or whitespace.", nameof(startTunnelDto.addr));
     }
     if (string.IsNullOrWhiteSpace(startTunnelDto.name))
     {
         throw new ArgumentException("Value cannot be null or whitespace.", nameof(startTunnelDto.name));
     }
     if (string.IsNullOrWhiteSpace(startTunnelDto.proto))
     {
         throw new ArgumentException("Value cannot be null or whitespace.", nameof(startTunnelDto.proto));
     }
     return(await _httpClient.PostAsync($"{_ngrokLocalUrl}/tunnels", new StringContent(JsonSerializer.Serialize(startTunnelDto), Encoding.UTF8, "application/json"), cancellationToken));
 }
Esempio n. 6
0
        public async Task StopTunnel_StopATunnelThatIsRunning_True()
        {
            // ARRANGE
            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var ngrokManager = new NgrokManager();

            ngrokManager.StartNgrok();
            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            var startTunnelDto = new StartTunnelDTO
            {
                name     = "foundryvtt",
                proto    = "http",
                addr     = "30000",
                bind_tls = "false"
            };

            await ngrokManager.StartTunnelAsync(startTunnelDto);

            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            // ACT
            var stopTunnel = await ngrokManager.StopTunnelAsync("foundryvtt");

            // ASSERT
            Assert.Equal(HttpStatusCode.NoContent,
                         stopTunnel.StatusCode); // Should return 204 status code with no content
        }
Esempio n. 7
0
        public async Task StartTunnel_UseSubDomainGuid_True()
        {
            // ARRANGE
            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var newGuid = Guid.NewGuid().ToString();

            var ngrokManager = new NgrokManager();

            // ACT
            ngrokManager.StartNgrok();
            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);
            var startTunnelDto = new StartTunnelDTO
            {
                name      = "foundryvtt",
                proto     = "http",
                addr      = "30000",
                bind_tls  = "false",
                subdomain = newGuid
            };

            await ngrokManager.StartTunnelAsync(startTunnelDto);

            // ASSERT
            var downloadedString = await HttpClient.GetStringAsync("http://localhost:4040/api/tunnels/foundryvtt");

            Assert.Contains(newGuid, downloadedString);
        }
Esempio n. 8
0
        public async Task StopTunnel_StopTunnelNameIsNullArgumentNullException_True()
        {
            // ARRANGE
            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var ngrokManager = new NgrokManager();

            ngrokManager.StartNgrok();
            //Wait for ngrok to start, it can be slow on some systems.
            Thread.Sleep(1000);

            var startTunnelDto = new StartTunnelDTO
            {
                name     = "foundryvtt",
                proto    = "http",
                addr     = "30000",
                bind_tls = "false"
            };
            await ngrokManager.StartTunnelAsync(startTunnelDto);

            // ACT

            var ex = await Assert.ThrowsAsync <ArgumentException>(async() => await ngrokManager.StopTunnelAsync(""));

            // ASSERT

            Assert.Equal("Value cannot be null or whitespace. (Parameter 'name')", ex.Message);
        }
Esempio n. 9
0
        public async Task StartNgrokWithLogging_StartTunnel8080AndCheckLog_True()
        {
            // ARRANGE
            var are = new AutoResetEvent(false);

            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }

            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddFile("app.log");
            }
                                                     );

            _logger = loggerFactory.CreateLogger <NgrokManagerUnitTest>();

            File.WriteAllBytes($"{_downloadFolder}ngrok-stable-amd64.zip", _ngrokBytes);

            var fastZip = new FastZip();

            fastZip.ExtractZip($"{_downloadFolder}ngrok-stable-amd64.zip", _downloadFolder, null);

            SetNgrokYml();

            var ngrokManager = new NgrokManager(_logger);

            ngrokManager.StartNgrokWithLogging();
            //Wait for ngrok to start, it can be slow on some systems.
            await Task.Delay(1000);

            var startTunnelDto = new StartTunnelDTO
            {
                name     = "foundryvtt",
                proto    = "http",
                addr     = "30000",
                bind_tls = "false"
            };

            await ngrokManager.StartTunnelAsync(startTunnelDto);

            //Wait for ngrok to start, it can be slow on some systems.
            await Task.Delay(1000);

            string log;

            using (var fileStream = File.Open("app.log", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                using (var streamReader = new StreamReader(fileStream, Encoding.Default))
                {
                    log = streamReader.ReadToEnd();
                }
            }

            // ACT
            are.WaitOne(TimeSpan.FromSeconds(4));

            // ASSERT
            Assert.Contains("client session established", log);
        }