Пример #1
0
        static void Main(string[] args)
        {
            string sErrorString = "";

            PluginParser parser = new PluginParser();
            Plugin       plugin = parser.ParsePlugin("..\\..\\FacebookPlugin.xml", ref sErrorString);

            Sequence setup    = plugin.GetSequence("setup");
            Sequence login    = plugin.GetSequence("login");
            Sequence mainPage = plugin.GetSequence("main page");

            plugin.SetVariable("userName", "*****@*****.**");
            plugin.SetVariable("password", "chabon1975");

            setup.Run(ref sErrorString);
            login.Run(ref sErrorString);
            mainPage.Run(ref sErrorString);

            System.Console.WriteLine("All sequences are finished!");

            if (sErrorString != "")
            {
                System.Console.WriteLine(sErrorString);
            }

            System.Console.ReadLine();
            //Testing Git :D
        }
Пример #2
0
        public void PluginParser_FromFilePath_CanParsePluginsWithoutExtensionAndWeirdFileNames(string filePath, string name)
        {
            // Given, When
            var plugin = PluginParser.FromFilePath(filePath);

            // Then
            Assert.Equal(PluginType.Unknown, plugin.Type);
            Assert.Equal(name, plugin.Name);
        }
Пример #3
0
        public void PluginParser_FromFilePath_UnderscoreDisablesAPlugin(string filePath, string name, bool disabled)
        {
            // Given, When
            var plugin = PluginParser.FromFilePath(filePath);

            // Then
            Assert.Equal(name, plugin.Name);
            Assert.Equal(disabled, plugin.Disabled);
        }
Пример #4
0
        public void PluginParser_FromFilePath_CreatesAPluginWithTheCorrectType(string filePath, string name, PluginType pluginType)
        {
            // Given, When
            var plugin = PluginParser.FromFilePath(filePath);

            // Then
            Assert.Equal(name, plugin.Name);
            Assert.Equal(pluginType, plugin.Type);
        }
Пример #5
0
        public void PluginParser_FromFilePath_CreatesAPluginWithCorrectInterval(string filePath, string name, string schedule, CronExpression expression)
        {
            // Given, When
            var plugin = PluginParser.FromFilePath(filePath);

            // Then
            Assert.Equal(name, plugin.Name);
            Assert.Equal(schedule, plugin.Schedule);
            Assert.Equal(expression, plugin.Cron);
        }
Пример #6
0
        private async Task OnExecute()
        {
            System.Diagnostics.Debug.WriteLine($"Executing plugin {Metadata.Name}");

            var info = new ProcessStartInfo
            {
                FileName               = Metadata.FilePath,
                UseShellExecute        = false,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                StandardOutputEncoding = System.Text.Encoding.UTF8,
            };

            (string Data, string Error)result;

            try
            {
                using var process = Process.Start(info);
                var data = await process.StandardOutput.ReadToEndAsync();

                var error = await process.StandardError.ReadToEndAsync();

                process.WaitForExit();

                result = (Data : data, Error : error);
            }
            catch (Exception ex)
            {
                result = (Data : "", Error : ex.ToString());
            }

            var execution = new PluginExecutionResult
            {
                LastExecution = DateTime.UtcNow,
            };

            if (!string.IsNullOrEmpty(result.Data))
            {
                var items = PluginParser.ParseExecution(result.Data, Metadata.Name);
                execution.Items   = items;
                execution.Success = true;
            }
            else
            {
                execution.Items   = ImmutableList.CreateBuilder <ImmutableList <Item> >().ToImmutableList();
                execution.Success = false;
            }

            System.Diagnostics.Debug.WriteLine($"Executed plugin {Metadata.Name}, Items: {execution.Items.Count}, Success: {execution.Success}");

            _results.OnNext(execution);

            _machine.Fire(Trigger.Ready);
        }
Пример #7
0
        public void PluginParser_FromFilePath_CreatesAPluginWithCorrectDefaultSettings()
        {
            // Given
            var path = "emoji.sh";

            // When
            var plugin = PluginParser.FromFilePath(path);

            // Then
            Assert.Equal(path, plugin.FilePath);
            Assert.Equal("emoji", plugin.Name);
            Assert.Equal("", plugin.Schedule);
            Assert.Equal(PluginType.Shell, plugin.Type);
            Assert.Equal(Cron.MinuteInterval(1), plugin.Cron);
            Assert.False(plugin.Disabled);
        }
Пример #8
0
        private void OnSynchronizePlugins()
        {
            var files = _fileProvider.GetDirectoryContents("");

            if (!files.Exists)
            {
                _machine.Fire(Trigger.Stop);
                return;
            }

            var builder = ImmutableList.CreateBuilder <PluginMetadata>();

            foreach (var file in files)
            {
                if (file.IsDirectory)
                {
                    continue;
                }

                var metadata = PluginParser.FromFilePath(file.PhysicalPath);
                metadata.Checksum = GetChecksum(file.PhysicalPath);

                builder.Add(metadata);
            }

            var previous = Plugins.Select(p => p.Metadata);
            var current  = builder.ToImmutableList();

            var added   = current.Except(previous).ToImmutableList();
            var removed = previous.Except(current).ToImmutableList();

            _machine.Fire(_startTrigger, new PluginUpdate
            {
                Added   = added,
                Removed = removed,
                Rest    = previous.Except(removed).ToImmutableList(),
            });
        }