Exemplo n.º 1
0
        public void CreateOperation_Access_ReadAccessDenied()
        {
            var fileSystemState = new FileSystemState();
            var readAccessList  = new List <Path>()
            {
                new Path("C:/WorkingDir/ReadAccess/")
            };
            var writeAccessList = new List <Path>()
            {
                new Path("C:/WorkingDir/WriteAccess/")
            };
            var uut = new OperationGraphGenerator(fileSystemState, readAccessList, writeAccessList);

            Assert.Throws <InvalidOperationException>(
                () =>
            {
                uut.CreateOperation(
                    "Do Stuff",
                    new Path("DoStuff.exe"),
                    "do stuff",
                    new Path("C:/WorkingDir/"),
                    new List <Path>()
                {
                    new Path("ReadFile.txt"),
                },
                    new List <Path>());
            });
        }
Exemplo n.º 2
0
        public void CreateOperation_NoInputOrOutput()
        {
            // Register the test listener
            var testListener = new TestTraceListener();

            using var scopedTraceListener = new ScopedTraceListenerRegister(testListener);

            var fileSystemState = new FileSystemState();
            var readAccessList  = new List <Path>();
            var writeAccessList = new List <Path>();
            var uut             = new OperationGraphGenerator(fileSystemState, readAccessList, writeAccessList);

            uut.CreateOperation(
                "Do Stuff",
                new Path("DoStuff.exe"),
                "do stuff",
                new Path("C:/WorkingDir/"),
                new List <Path>(),
                new List <Path>());

            // Verify expected logs
            Assert.Equal(
                new List <string>()
            {
                "DIAG: Create Operation: Do Stuff",
                "DIAG: Read Access Subset:",
                "DIAG: Write Access Subset:",
            },
                testListener.GetMessages());
        }
Exemplo n.º 3
0
        public void BuildGraph_NoNodes()
        {
            var fileSystemState = new FileSystemState();
            var readAccessList  = new List <Path>()
            {
                new Path("C:/WorkingDir/ReadAccess/")
            };
            var writeAccessList = new List <Path>()
            {
                new Path("C:/WorkingDir/WriteAccess/")
            };
            var uut = new OperationGraphGenerator(fileSystemState, readAccessList, writeAccessList);

            var graph = uut.BuildGraph();

            Assert.Equal(new Dictionary <OperationId, OperationInfo>(), graph.GetOperations());
            Assert.Equal(new List <OperationId>(), graph.GetRootOperationIds());
            Assert.Equal(new List <(FileId, Path)>(), graph.GetReferencedFiles());
        }
Exemplo n.º 4
0
        public void BuildGraph_DependencyNodes_FlattenGraph()
        {
            // Register the test listener
            var testListener = new TestTraceListener();

            using var scopedTraceListener = new ScopedTraceListenerRegister(testListener);

            var fileSystemState = new FileSystemState();
            var readAccessList  = new List <Path>()
            {
                new Path("C:/WorkingDir/ReadAccess/"),
                new Path("C:/WorkingDir/WriteAccess/"),
            };
            var writeAccessList = new List <Path>()
            {
                new Path("C:/WorkingDir/WriteAccess/"),
            };
            var uut = new OperationGraphGenerator(fileSystemState, readAccessList, writeAccessList);

            uut.CreateOperation(
                "Do Stuff 1",
                new Path("DoStuff.exe"),
                "do stuff 1",
                new Path("C:/WorkingDir/"),
                new List <Path>()
            {
                new Path("./ReadAccess/ReadFile.txt"),
            },
                new List <Path>()
            {
                new Path("./WriteAccess/WriteFile1.txt"),
            });

            uut.CreateOperation(
                "Do Stuff 2",
                new Path("DoStuff.exe"),
                "do stuff 2",
                new Path("C:/WorkingDir/"),
                new List <Path>()
            {
                new Path("./WriteAccess/WriteFile1.txt"),
            },
                new List <Path>()
            {
                new Path("./WriteAccess/WriteFile2.txt"),
            });

            // Create a third operation that reads the output of the other two
            // The graph builder should flatten these references to be dependent on the single second node that already
            // is dependent on the first node.
            uut.CreateOperation(
                "Do Stuff 3",
                new Path("DoStuff.exe"),
                "do stuff 3",
                new Path("C:/WorkingDir/"),
                new List <Path>()
            {
                new Path("./WriteAccess/WriteFile1.txt"),
                new Path("./WriteAccess/WriteFile2.txt"),
            },
                new List <Path>()
            {
                new Path("./WriteAccess/WriteFile3.txt"),
            });

            var graph = uut.BuildGraph();

            // Verify expected logs
            Assert.Equal(
                new List <string>()
            {
                "DIAG: Create Operation: Do Stuff 1",
                "DIAG: Read Access Subset:",
                "DIAG: C:/WorkingDir/ReadAccess/",
                "DIAG: Write Access Subset:",
                "DIAG: C:/WorkingDir/WriteAccess/",
                "DIAG: Create Operation: Do Stuff 2",
                "DIAG: Read Access Subset:",
                "DIAG: C:/WorkingDir/WriteAccess/",
                "DIAG: Write Access Subset:",
                "DIAG: C:/WorkingDir/WriteAccess/",
                "DIAG: Create Operation: Do Stuff 3",
                "DIAG: Read Access Subset:",
                "DIAG: C:/WorkingDir/WriteAccess/",
                "DIAG: Write Access Subset:",
                "DIAG: C:/WorkingDir/WriteAccess/",
            },
                testListener.GetMessages());

            Assert.Equal(
                new Dictionary <OperationId, OperationInfo>()
            {
                {
                    new OperationId(1),
                    new OperationInfo()
                    {
                        Id      = new OperationId(1),
                        Title   = "Do Stuff 1",
                        Command = new CommandInfo()
                        {
                            Executable       = new Path("DoStuff.exe"),
                            Arguments        = "do stuff 1",
                            WorkingDirectory = new Path("C:/WorkingDir/"),
                        },
                        DeclaredInput = new List <FileId>()
                        {
                            new FileId(1),
                        },
                        DeclaredOutput = new List <FileId>()
                        {
                            new FileId(2),
                        },
                        ReadAccess = new List <FileId>()
                        {
                            new FileId(3),
                        },
                        WriteAccess = new List <FileId>()
                        {
                            new FileId(4),
                        },
                        DependencyCount = 1,
                        Children        = new List <OperationId>()
                        {
                            new OperationId(2),
                        },
                    }
                },
                {
                    new OperationId(2),
                    new OperationInfo()
                    {
                        Id      = new OperationId(2),
                        Title   = "Do Stuff 2",
                        Command = new CommandInfo()
                        {
                            Executable       = new Path("DoStuff.exe"),
                            Arguments        = "do stuff 2",
                            WorkingDirectory = new Path("C:/WorkingDir/"),
                        },
                        DeclaredInput = new List <FileId>()
                        {
                            new FileId(2),
                        },
                        DeclaredOutput = new List <FileId>()
                        {
                            new FileId(5),
                        },
                        ReadAccess = new List <FileId>()
                        {
                            new FileId(4),
                        },
                        WriteAccess = new List <FileId>()
                        {
                            new FileId(4),
                        },
                        DependencyCount = 1,
                        Children        = new List <OperationId>()
                        {
                            new OperationId(3),
                        },
                    }
                },
                {
                    new OperationId(3),
                    new OperationInfo()
                    {
                        Id      = new OperationId(3),
                        Title   = "Do Stuff 3",
                        Command = new CommandInfo()
                        {
                            Executable       = new Path("DoStuff.exe"),
                            Arguments        = "do stuff 3",
                            WorkingDirectory = new Path("C:/WorkingDir/"),
                        },
                        DeclaredInput = new List <FileId>()
                        {
                            new FileId(2), new FileId(5),
                        },
                        DeclaredOutput = new List <FileId>()
                        {
                            new FileId(6),
                        },
                        ReadAccess = new List <FileId>()
                        {
                            new FileId(4),
                        },
                        WriteAccess = new List <FileId>()
                        {
                            new FileId(4),
                        },
                        DependencyCount = 1,
                    }
                },
            },
                graph.GetOperations());
            Assert.Equal(
                new List <OperationId>()
            {
                new OperationId(1),
            },
                graph.GetRootOperationIds());
            Assert.Equal(
                new List <(FileId, Path)>(),
                graph.GetReferencedFiles());
        }
Exemplo n.º 5
0
        public void BuildGraph_SingleNodes()
        {
            // Register the test listener
            var testListener = new TestTraceListener();

            using var scopedTraceListener = new ScopedTraceListenerRegister(testListener);

            var fileSystemState = new FileSystemState();
            var readAccessList  = new List <Path>()
            {
                new Path("C:/WorkingDir/ReadAccess/")
            };
            var writeAccessList = new List <Path>()
            {
                new Path("C:/WorkingDir/WriteAccess/")
            };
            var uut = new OperationGraphGenerator(fileSystemState, readAccessList, writeAccessList);

            uut.CreateOperation(
                "Do Stuff",
                new Path("DoStuff.exe"),
                "do stuff",
                new Path("C:/WorkingDir/"),
                new List <Path>()
            {
                new Path("./ReadAccess/ReadFile.txt"),
            },
                new List <Path>()
            {
                new Path("./WriteAccess/WriteFile.txt"),
            });

            var graph = uut.BuildGraph();

            // Verify expected logs
            Assert.Equal(
                new List <string>()
            {
                "DIAG: Create Operation: Do Stuff",
                "DIAG: Read Access Subset:",
                "DIAG: C:/WorkingDir/ReadAccess/",
                "DIAG: Write Access Subset:",
                "DIAG: C:/WorkingDir/WriteAccess/",
            },
                testListener.GetMessages());

            Assert.Equal(
                new Dictionary <OperationId, OperationInfo>()
            {
                {
                    new OperationId(1),
                    new OperationInfo()
                    {
                        Id      = new OperationId(1),
                        Title   = "Do Stuff",
                        Command = new CommandInfo()
                        {
                            Executable       = new Path("DoStuff.exe"),
                            Arguments        = "do stuff",
                            WorkingDirectory = new Path("C:/WorkingDir/"),
                        },
                        DeclaredInput = new List <FileId>()
                        {
                            new FileId(1),
                        },
                        DeclaredOutput = new List <FileId>()
                        {
                            new FileId(2),
                        },
                        ReadAccess = new List <FileId>()
                        {
                            new FileId(3),
                        },
                        WriteAccess = new List <FileId>()
                        {
                            new FileId(4),
                        },
                        DependencyCount = 1,
                    }
                },
            },
                graph.GetOperations());
            Assert.Equal(
                new List <OperationId>()
            {
                new OperationId(1),
            },
                graph.GetRootOperationIds());
            Assert.Equal(
                new List <(FileId, Path)>(),
                graph.GetReferencedFiles());
        }