Exemplo n.º 1
0
        public async Task StartNgrok_ShouldStartNgrok_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();

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

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

            Assert.False(string.IsNullOrWhiteSpace(downloadedString));
        }
Exemplo n.º 2
0
        public async Task RegisterAuthToken_ThrowsExptionUsingRegisterAuthTokenWhileAlreadyStarted_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();

            // ACT

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

            // ASSERT
            var ex = await Assert.ThrowsAsync <Exception>(async() =>
                                                          await ngrokManager.RegisterAuthTokenAsync("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"));

            Assert.Equal(
                "The Ngrok process is already running. Please use StopNgrok() and then register the AuthToken again.",
                ex.Message);
        }
Exemplo n.º 3
0
        public async Task StartTunnel_StartTunnelDTOIsNullArgumentNullException_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();

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

            var ex = await Assert.ThrowsAsync <ArgumentNullException>(async() => await ngrokManager.StartTunnelAsync(null));

            // ASSERT

            Assert.Equal("Value cannot be null. (Parameter 'startTunnelDto')", ex.Message);
        }
Exemplo n.º 4
0
        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    this.ngrokManager?.Dispose();
                    this.ngrokManager = null;
                }

                // TODO: free unmanaged resources (unmanaged objects) and override finalizer
                // TODO: set large fields to null
                disposedValue = true;
            }
        }
Exemplo n.º 5
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);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Creates ServiceManager.
        /// </summary>
        /// <param name="notification">Notification manager.</param>
        /// <param name="ngrokApiPort">Ngrok Api port.</param>
        /// <param name="playAudioLimitsPerApp">Play Audio Limit per application.</param>
        /// <param name="playAudioLimitsPerUser">Play Audio Limit per user.</param>
        /// <param name="dispatcher">Dispather.</param>
        /// <param name="autoCloseAction">Action for auto close.</param>
        public ServiceManager(NotificationManager notification, int ngrokApiPort, int playAudioLimitsPerApp, int playAudioLimitsPerUser, Dispatcher dispatcher, Action autoCloseAction)
        {
            this.notification     = notification;
            this.ngrokManager     = new NgrokManager(ngrokApiPort);
            this.rateLimitManager = new RateLimitManager()
            {
                GlobalLimit = playAudioLimitsPerApp,
                UserLimit   = playAudioLimitsPerUser,
            };

            this.dispatcher      = dispatcher;
            this.autoCloseAction = autoCloseAction;

            this.IsRunning        = false;
            this.isStopProcessing = false;
        }
Exemplo n.º 7
0
        public async Task RegisterAuthToken_AddNewAuthTokenAfterStop_True()
        {
            // ARRANGE
            if (!Directory.Exists(_downloadFolder))
            {
                Directory.CreateDirectory(_downloadFolder);
            }
            var are = new AutoResetEvent(false);

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

            var fastZip = new FastZip();

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

            DirectoryInfo path = SetNgrokYml();

            var ngrokManager = new NgrokManager();

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

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

            await ngrokManager.RegisterAuthTokenAsync("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

            // ASSERT
            are.WaitOne(TimeSpan.FromSeconds(1)); // wait for the ngrok process to start and write the file

            string acualNgrokYml = null;

            if (OperatingSystem.IsWindows())
            {
                acualNgrokYml = File.ReadAllText($"{path.FullName + Path.DirectorySeparatorChar}ngrok.yml");
            }

            if (OperatingSystem.IsLinux())
            {
                acualNgrokYml = File.ReadAllText($"{path.FullName + Path.DirectorySeparatorChar}ngrok.yml");
            }

            Assert.Equal("authtoken: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n", acualNgrokYml);
        }
Exemplo n.º 8
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());
        }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
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
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
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);
        }
Exemplo n.º 13
0
        public async Task DownloadNgrok_CheckIfNgrokIsDownloaded_True()
        {
            // ARRANGE
            var are = new AutoResetEvent(false);

            var ngrokManager = new NgrokManager();
            // ACT

            await ngrokManager.DownloadAndUnzipNgrokAsync();

            // ASSERT

            are.WaitOne(TimeSpan.FromSeconds(30));

            if (OperatingSystem.IsWindows())
            {
                Assert.True(File.Exists($"{_downloadFolder}ngrok.exe"));
            }

            if (OperatingSystem.IsLinux())
            {
                Assert.True(File.Exists($"{_downloadFolder}ngrok"));
            }
        }
Exemplo n.º 14
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);
        }