public async Task GetOrCreateAsync_ThrowsIfCancelled()
        {
            var factory = new PluginFactory(Timeout.InfiniteTimeSpan);

            await Assert.ThrowsAsync <OperationCanceledException>(
                () => factory.GetOrCreateAsync(
                    filePath: "a",
                    arguments: PluginConstants.PluginArguments,
                    requestHandlers: new RequestHandlers(),
                    options: ConnectionOptions.CreateDefault(),
                    sessionCancellationToken: new CancellationToken(canceled: true)));
        }
        public async Task GetOrCreateAsync_ThrowsForNullConnectionOptions()
        {
            var factory = new PluginFactory(Timeout.InfiniteTimeSpan);

            var exception = await Assert.ThrowsAsync <ArgumentNullException>(
                () => factory.GetOrCreateAsync(
                    filePath: "a",
                    arguments: PluginConstants.PluginArguments,
                    requestHandlers: new RequestHandlers(),
                    options: null,
                    sessionCancellationToken: CancellationToken.None));

            Assert.Equal("options", exception.ParamName);
        }
        public async Task GetOrCreateAsync_ThrowsForNullOrEmptyFilePath(string filePath)
        {
            var factory = new PluginFactory(Timeout.InfiniteTimeSpan);

            var exception = await Assert.ThrowsAsync <ArgumentException>(
                () => factory.GetOrCreateAsync(
                    filePath,
                    PluginConstants.PluginArguments,
                    new RequestHandlers(),
                    ConnectionOptions.CreateDefault(),
                    CancellationToken.None));

            Assert.Equal("filePath", exception.ParamName);
        }
Пример #4
0
            internal static async Task <PluginTest> CreateAsync()
            {
                var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(10));
                var pluginFactory           = new PluginFactory(PluginConstants.IdleTimeout);
                var options = ConnectionOptions.CreateDefault();
                var plugin  = await pluginFactory.GetOrCreateAsync(
                    PluginFile.FullName,
                    PluginArguments,
                    new RequestHandlers(),
                    options,
                    cancellationTokenSource.Token);

                var responseSender = new ResponseSender(PortNumber);

                return(new PluginTest(pluginFactory, plugin, responseSender, cancellationTokenSource));
            }
        public async Task GetOrCreateAsync_ThrowsIfDisposed()
        {
            var factory = new PluginFactory(Timeout.InfiniteTimeSpan);

            factory.Dispose();

            var exception = await Assert.ThrowsAsync <ObjectDisposedException>(
                () => factory.GetOrCreateAsync(
                    filePath: "a",
                    arguments: PluginConstants.PluginArguments,
                    requestHandlers: new RequestHandlers(),
                    options: ConnectionOptions.CreateDefault(),
                    sessionCancellationToken: CancellationToken.None));

            Assert.Equal(nameof(PluginFactory), exception.ObjectName);
        }
Пример #6
0
        public async Task GetOrCreateAsync_WhenPluginFreezes_Throws()
        {
            using (var cancellationTokenSource = new CancellationTokenSource(TestTimeout))
                using (var pluginFactory = new PluginFactory(PluginConstants.IdleTimeout))
                {
                    var exception = await Assert.ThrowsAsync <PluginException>(() => pluginFactory.GetOrCreateAsync(
                                                                                   PluginFile.FullName,
                                                                                   PluginConstants.PluginArguments.Concat(new[] { "-Freeze" }),
                                                                                   new RequestHandlers(),
                                                                                   ConnectionOptions.CreateDefault(),
                                                                                   cancellationTokenSource.Token));

                    Assert.True(
                        Regex.IsMatch(
                            exception.Message,
                            "^Plugin 'Plugin.Testable' failed within \\d.\\d{3} seconds with exit code -1.$"),
                        exception.Message);
                }
        }
Пример #7
0
        public async Task GetOrCreateAsync_WhenPluginCausesProtocolException_Throws()
        {
            using (var cancellationTokenSource = new CancellationTokenSource(TestTimeout))
                using (var pluginFactory = new PluginFactory(PluginConstants.IdleTimeout))
                {
                    var exception = await Assert.ThrowsAsync <ProtocolException>(() => pluginFactory.GetOrCreateAsync(
                                                                                     PluginFile.FullName,
                                                                                     PluginConstants.PluginArguments.Concat(new[] { "-CauseProtocolException" }),
                                                                                     new RequestHandlers(),
                                                                                     ConnectionOptions.CreateDefault(),
                                                                                     cancellationTokenSource.Token));

                    Assert.Equal("Plugin 'Plugin.Testable' failed with the exception:  The plugin handshake failed.", exception.Message);
                }
        }