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); } } }
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); }
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()); }
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); }
/// <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)); }
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 }
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); }
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); }
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); }