public static string Unpack(this TempDirectory tempDirectory, ProcessRuntime runtime)
        {
            var name = runtime switch
            {
                ProcessRuntime.Net461 => "net4.6.1.zip",
                ProcessRuntime.Net48 => "net4.8.zip",
                ProcessRuntime.NetCore31 => "netcoreapp3.1.zip",
                ProcessRuntime.Net50 => "net5.0.zip",
                _ => throw new ArgumentException($"Runtime is not supported: {runtime}"),
            };
            var zipBytes = ResourcesUtilities.ReadFileAsBytes(name);

            var zipPath = Path.Combine(tempDirectory.Folder, name);

            File.WriteAllBytes(zipPath, zipBytes);

            try
            {
                ZipFile.ExtractToDirectory(zipPath, tempDirectory.Folder);
            }
            finally
            {
                File.Delete(zipPath);
            }

            return(Path.Combine(tempDirectory.Folder, ExeName));
        }
示例#2
0
        public static async Task ConvertTest(IRecognizer recognizer, string name, string expected)
        {
            var bytes  = ResourcesUtilities.ReadFileAsBytes(name);
            var actual = await recognizer.ConvertAsync(bytes);

            Assert.AreEqual(expected, actual);
        }
示例#3
0
        /// <summary>
        ///
        /// </summary>
        public void Sound(string name)
        {
            using var stream = ResourcesUtilities.ReadFileAsStream($"{name}.wav");
            using var player = new SoundPlayer(stream);

            player.Play();
        }
示例#4
0
        public static async Task StartStreamingRecognitionTest(IRecognizer recognizer, string name, string expected, int bytesPerWrite = 8000)
        {
            using var recognition = await recognizer.StartStreamingRecognitionAsync();

            recognition.PreviewReceived += (_, value) =>
            {
                Console.WriteLine($"{DateTime.Now:h:mm:ss.fff} {nameof(recognition.PreviewReceived)}: {value}");
            };
            recognition.Stopped += (_, value) =>
            {
                Console.WriteLine($"{DateTime.Now:h:mm:ss.fff} {nameof(recognition.Stopped)}: {value}");

                Assert.AreEqual(expected, value);
            };

            var bytes = ResourcesUtilities.ReadFileAsBytes(name);

            // 44 - is default wav header length
            for (var i = 44; i < bytes.Length; i += bytesPerWrite)
            {
                var chunk = new ArraySegment <byte>(bytes, i, i < bytes.Length - bytesPerWrite ? bytesPerWrite : bytes.Length - i).ToArray();
                await recognition.WriteAsync(chunk);

                await Task.Delay(TimeSpan.FromMilliseconds(500));
            }

            await recognition.StopAsync();
        }
示例#5
0
        public static async Task ConvertTest(IConverter converter, string name, string expected, CancellationToken cancellationToken = default)
        {
            var bytes  = ResourcesUtilities.ReadFileAsBytes(name);
            var actual = await converter.ConvertAsync(bytes, cancellationToken);

            Assert.AreEqual(expected, actual);
        }
示例#6
0
        public static async Task StartStreamingRecognitionTest(IConverter converter, string name, string expected, int bytesPerWrite = 8000)
        {
            using var recognition = await converter.StartStreamingRecognitionAsync();

            recognition.AfterPartialResults += (_, args) => Console.WriteLine($"{DateTime.Now:h:mm:ss.fff} AfterPartialResults: {args.Text}");
            recognition.AfterFinalResults   += (_, args) =>
            {
                Console.WriteLine($"{DateTime.Now:h:mm:ss.fff} AfterFinalResults: {args.Text}");

                Assert.AreEqual(expected, args.Text);
            };

            var bytes = ResourcesUtilities.ReadFileAsBytes(name);

            // 44 - is default wav header length
            for (var i = 44; i < bytes.Length; i += bytesPerWrite)
            {
                var chunk = new ArraySegment <byte>(bytes, i, i < bytes.Length - bytesPerWrite ? bytesPerWrite : bytes.Length - i).ToArray();
                await recognition.WriteAsync(chunk);

                await Task.Delay(TimeSpan.FromMilliseconds(500));
            }

            await recognition.StopAsync();
        }
示例#7
0
        public static async Task BaseModuleTest <T1, T2>(
            string name1,
            string name2,
            Func <ExceptionsBag, T1, T2, CancellationToken, Task> testFunc)
            where T1 : class, IModule
            where T2 : class, IModule
        {
            using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(15));
            var cancellationToken = cancellationTokenSource.Token;

            var exceptions = new ExceptionsBag();

            await using var manager = new ModuleManager <IModule>(
                            Path.Combine(Path.GetTempPath(), $"H.Containers.Tests_{name1}_{name2}"));
            manager.ExceptionOccurred += (_, exception) =>
            {
                Console.WriteLine($"ExceptionOccurred: {exception}");
                exceptions.OnOccurred(exception);

                // ReSharper disable once AccessToDisposedClosure
                cancellationTokenSource.Cancel();
            };

            using var instance1 = await manager.AddModuleAsync <T1>(
                      CreateContainer (name1),
                      name1,
                      name1,
                      ResourcesUtilities.ReadFileAsBytes($"{name1}.zip"),
                      cancellationToken);

            using var instance2 = await manager.AddModuleAsync <T2>(
                      CreateContainer (name2),
                      name2,
                      name2,
                      ResourcesUtilities.ReadFileAsBytes($"{name2}.zip"),
                      cancellationToken);

            Assert.IsNotNull(instance1);
            Assert.IsNotNull(instance2);

            foreach (var instance in new IModule[] { instance1, instance2 })
            {
                instance.EnableLog();
            }

            await testFunc(exceptions, instance1, instance2, cancellationToken);

            try
            {
                await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
            }
            catch (OperationCanceledException)
            {
            }

            exceptions.EnsureNoExceptions();
        }
示例#8
0
        public static string Extract(this TempDirectory directory, string name)
        {
            var path = Path.Combine(directory.Folder, $"{name}.zip");
            var bytes = ResourcesUtilities.ReadFileAsBytes($"{name}.zip");
            File.WriteAllBytes(path, bytes);

            ZipFile.ExtractToDirectory(path, directory.Folder, true);

            return Path.Combine(directory.Folder, $"{name}.dll");
        }
示例#9
0
        public async Task SendAudioToTest()
        {
            using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30));
            var cancellationToken = cancellationTokenSource.Token;

            using var runner = CreateTelegramRunner();
            using var stream = ResourcesUtilities.ReadFileAsStream("test.mp3");

            await runner.SendAudioAsync(stream, "482553595", nameof(SendAudioToTest), cancellationToken);
        }
示例#10
0
        public static async Task BaseModuleTest <T>(
            string name,
            Func <T, CancellationToken, Task> testFunc)
            where T : class, IModule
        {
            using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(15));
            var cancellationToken = cancellationTokenSource.Token;

            var receivedException = (Exception?)null;

            await using var manager = new ModuleManager <IModule>(
                            Path.Combine(Path.GetTempPath(), $"H.Containers.Tests_{name}"));
            manager.ExceptionOccurred += (_, exception) =>
            {
                Console.WriteLine($"ExceptionOccurred: {exception}");
                receivedException = exception;

                // ReSharper disable once AccessToDisposedClosure
                cancellationTokenSource.Cancel();
            };

            var bytes = ResourcesUtilities.ReadFileAsBytes($"{name}.zip");

            using var instance = await manager.AddModuleAsync <T>(
                      new ProcessContainer (name),
                      name,
                      name,
                      bytes,
                      cancellationToken);

            Assert.IsNotNull(instance);

            instance.EnableLog();
            (await manager.GetTypesAsync(cancellationToken)).Log("Available types");
            instance.ShortName.Log(nameof(instance.ShortName));
            instance.GetAvailableSettings().Log("Available settings");

            await testFunc(instance, cancellationToken);

            try
            {
                await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
            }
            catch (OperationCanceledException)
            {
            }

            if (receivedException != null)
            {
                Assert.Fail(receivedException.ToString());
            }
        }
示例#11
0
        public async Task WitAiConverterTest()
        {
            await BaseModuleTest <IRecognizer>(
                "H.Converters.WitAiConverter",
                async (instance, cancellationToken) =>
            {
                instance.SetSetting("Token", "XZS4M3BUYV5LBMEWJKAGJ6HCPWZ5IDGY");

                var bytes  = ResourcesUtilities.ReadFileAsBytes("проверка_проверка_8000.wav");
                var actual = await instance.ConvertAsync(bytes, cancellationToken);

                Assert.AreEqual("проверка", actual);
            });
        }
        public void BaseTest(string name)
        {
            var json  = ResourcesUtilities.ReadFileAsString(name);
            var paths = DepsJsonDependenciesSearcher.Search(json);

            Console.WriteLine("Dependencies:");
            foreach (var path in paths)
            {
                Console.WriteLine($" - {path}");
            }

            Assert.IsNotNull(paths);
            Assert.IsTrue(paths.Any(), "paths.Any()");
        }
示例#13
0
        public async Task TelegramAudioTest()
        {
            using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30));
            var cancellationToken = cancellationTokenSource.Token;

            await using var moduleService = new StaticModuleService(
                            TestModules.CreateTelegramRunner()
                            );
            await using var runnerService = new RunnerService(moduleService);

            using var exceptions = new IServiceBase[]
                  {
                      moduleService, runnerService
                  }.EnableLogging(cancellationTokenSource);

            await runnerService.RunAsync(
                new Command("telegram audio", new Value(string.Empty, nameof(TelegramAudioTest))
            {
                Data = ResourcesUtilities.ReadFileAsBytes("test.mp3"),
            }), cancellationToken);
        }
示例#14
0
        public void SilenceDetectorTest()
        {
            var bytes = ResourcesUtilities
                        .ReadFileAsBytes("test_test_rus_8000.wav")
                        .Skip(44)
                        .ToArray();

            var isDetected = false;
            var detector   = new SilenceDetector(requiredCount: 200);

            detector.Detected += (_, _) => isDetected = true;

            var partLength = bytes.Length / 500; // One part is 10 milliseconds.

            for (var i = 0; i < bytes.Length / partLength; i++)
            {
                var part = bytes.Skip(i * partLength).Take(partLength).ToArray();

                detector.Write(part);
            }

            Assert.IsTrue(isDetected);
        }
        public async Task RealTest()
        {
            var receivedException = (Exception?)null;

            using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(15));
            await using var container         = new ProcessContainer(nameof(ProcessContainerTests))
                        {
                            MethodsCancellationToken = cancellationTokenSource.Token,
                        };
            container.ExceptionOccurred += (_, exception) =>
            {
                Console.WriteLine($"ExceptionOccurred: {exception}");
                receivedException = exception;

                // ReSharper disable once AccessToDisposedClosure
                cancellationTokenSource.Cancel();
            };

            await container.InitializeAsync(cancellationTokenSource.Token);

            await container.StartAsync(cancellationTokenSource.Token);

            var directory = Path.Combine(Path.GetTempPath(), "H.Containers.Tests_WitAiConverter");

            Directory.CreateDirectory(directory);
            var path  = Path.Combine(directory, "WitAiConverter.zip");
            var bytes = ResourcesUtilities.ReadFileAsBytes("WitAiConverter.zip");

            File.WriteAllBytes(path, bytes);

            ZipFile.ExtractToDirectory(path, directory, true);

            await container.LoadAssemblyAsync(Path.Combine(directory, "WitAiConverter.dll"), cancellationTokenSource.Token);

            var instance = await container.CreateObjectAsync <IConverter>("H.NET.Converters.WitAiConverter", cancellationTokenSource.Token);

            Assert.IsNotNull(instance);

            Assert.AreEqual("WitAiConverter", instance.ShortName);

            var availableSettings = instance.GetAvailableSettings().ToArray();

            Console.WriteLine("AvailableSettings:");
            foreach (var setting in availableSettings)
            {
                Console.WriteLine($" - {setting}");
            }
            CollectionAssert.AreEqual(
                new[] { "Token" },
                availableSettings);

            instance.SetSetting("Token", "XZS4M3BUYV5LBMEWJKAGJ6HCPWZ5IDGY");

            await BaseConvertersTests.ConvertTest(instance, "проверка_проверка_8000.wav", "проверка", cancellationTokenSource.Token);

            try
            {
                await Task.Delay(TimeSpan.FromSeconds(1), cancellationTokenSource.Token);
            }
            catch (OperationCanceledException)
            {
            }

            if (receivedException != null)
            {
                Assert.Fail(receivedException.ToString());
            }
        }