Create() public static method

public static Create ( Uri uri, bool computeHashes ) : FileData
uri System.Uri
computeHashes bool
return FileData
示例#1
0
        public void FileData_PersistTextFileContentsBigEndianUnicode()
        {
            Encoding encoding  = Encoding.BigEndianUnicode;
            string   filePath  = Path.GetTempFileName() + ".cs";
            string   textValue = "अचम्भा";

            byte[] fileContents = encoding.GetBytes(textValue);

            Uri uri = new Uri(filePath);

            try
            {
                File.WriteAllBytes(filePath, fileContents);
                FileData fileData = FileData.Create(uri, OptionallyEmittedData.TextFiles, mimeType: null, encoding: encoding);
                fileData.FileLocation.Should().Be(null);
                fileData.MimeType.Should().Be(MimeType.CSharp);
                fileData.Hashes.Should().BeNull();

                string encodedFileContents = encoding.GetString(fileContents);
                fileData.Contents.Text.Should().Be(encodedFileContents);
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
示例#2
0
        public void FileData_FileIsLocked()
        {
            string filePath = Path.GetTempFileName();
            Uri    uri      = new Uri(filePath);

            try
            {
                // Place an exclusive read lock on file, so that FileData cannot access its contents.
                // This raises an IOException, which is swallowed by FileData.Create
                using (var exclusiveAccessReader = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None))
                {
                    FileData fileData = FileData.Create(uri, OptionallyEmittedData.TextFiles);
                    fileData.FileLocation.Should().Be(null);
                    fileData.MimeType.Should().Be(MimeType.Binary);
                    fileData.Hashes.Should().BeNull();
                    fileData.Contents.Should().BeNull();
                }
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
示例#3
0
        public void FileData_PersistFileContentsUtf8()
        {
            string filePath  = Path.GetTempFileName() + ".cs";
            string textValue = "अचम्भा";

            byte[] fileContents = Encoding.BigEndianUnicode.GetBytes(textValue);

            Uri uri = new Uri(filePath);

            try
            {
                File.WriteAllBytes(filePath, fileContents);
                FileData fileData = FileData.Create(uri, LoggingOptions.PersistFileContents, mimeType: null, encoding: Encoding.BigEndianUnicode);
                fileData.Uri.Should().Be(null);
                fileData.MimeType.Should().Be(MimeType.CSharp);
                fileData.Hashes.Should().BeNull();

                string encodedFileContents = Convert.ToBase64String(Encoding.UTF8.GetBytes(textValue));
                fileData.Contents.Should().Be(encodedFileContents);
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
示例#4
0
        public void FileData_PersistFileContentsBinary()
        {
            string filePath     = Path.GetTempFileName();
            string fileContents = Guid.NewGuid().ToString();
            Uri    uri          = new Uri(filePath);

            try
            {
                File.WriteAllText(filePath, fileContents);
                FileData fileData = FileData.Create(uri, LoggingOptions.PersistFileContents);
                fileData.Uri.Should().Be(null);
                fileData.MimeType.Should().Be(MimeType.Binary);
                fileData.Hashes.Should().BeNull();

                string encodedFileContents = Convert.ToBase64String(File.ReadAllBytes(filePath));
                fileData.Contents.Should().Be(encodedFileContents);
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
示例#5
0
        public void FileData_FileDoesNotExist()
        {
            // If a file does not exist, and we request file contents
            // persistence, the logger will not raise an exception
            string   filePath = Path.GetTempFileName();
            Uri      uri      = new Uri(filePath);
            FileData fileData = FileData.Create(uri, OptionallyEmittedData.TextFiles);

            fileData.FileLocation.Should().Be(null);
            fileData.MimeType.Should().Be(MimeType.Binary);
            fileData.Hashes.Should().BeNull();
            fileData.Contents.Should().BeNull();
        }
示例#6
0
        public void FileData_FileDoesNotExist()
        {
            // If a file does not exist, and we request file contents
            // persistence, the logger will not raise an exception
            string   filePath = Path.GetTempFileName();
            Uri      uri      = new Uri(filePath);
            FileData fileData = FileData.Create(uri, LoggingOptions.PersistFileContents);

            fileData.Uri.Should().Be(null);
            fileData.MimeType.Should().Be(MimeType.Binary);
            fileData.Hashes.Should().BeNull();
            fileData.Contents.Should().Be(String.Empty);
        }
示例#7
0
        public void FileData_SerializeMultipleFileRoles()
        {
            FileData fileData = FileData.Create(new Uri("file:///foo.cs"), OptionallyEmittedData.None);

            fileData.Roles = FileRoles.ResponseFile | FileRoles.ResultFile;

            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                ContractResolver = SarifContractResolver.Instance
            };
            string actual = JsonConvert.SerializeObject(fileData);

            actual.Should().Be("{\"roles\":[\"responseFile\",\"resultFile\"],\"mimeType\":\"text/x-csharp\"}");
        }
示例#8
0
        public void FileData_SerializeSingleFileRole()
        {
            FileData fileData = FileData.Create(new Uri("file:///foo.cs"), OptionallyEmittedData.None);

            fileData.Roles = FileRoles.AnalysisTarget;

            JsonConvert.DefaultSettings = () => new JsonSerializerSettings
            {
                ContractResolver = SarifContractResolver.Instance
            };
            string result = JsonConvert.SerializeObject(fileData);

            result.Should().Be("{\"roles\":[\"analysisTarget\"],\"mimeType\":\"text/x-csharp\"}");
        }
示例#9
0
        public void FileData_PersistBinaryAndTextFileContents(
            string fileExtension,
            OptionallyEmittedData dataToInsert,
            bool shouldBePersisted)
        {
            string filePath     = Path.GetTempFileName() + fileExtension;
            string fileContents = Guid.NewGuid().ToString();
            Uri    uri          = new Uri(filePath);

            try
            {
                File.WriteAllText(filePath, fileContents);
                FileData fileData = FileData.Create(uri, dataToInsert);
                fileData.FileLocation.Should().BeNull();

                if (dataToInsert.Includes(OptionallyEmittedData.Hashes))
                {
                    fileData.Hashes.Should().NotBeNull();
                }
                else
                {
                    fileData.Hashes.Should().BeNull();
                }

                string encodedFileContents = Convert.ToBase64String(File.ReadAllBytes(filePath));

                if (shouldBePersisted)
                {
                    fileData.Contents.Binary.Should().Be(encodedFileContents);
                    fileData.Contents.Text.Should().BeNull();
                }
                else
                {
                    fileData.Contents.Should().BeNull();
                }
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
示例#10
0
        private static void RunUnauthorizedAccessTextForFile(bool isTextFile)
        {
            string extension = isTextFile ? ".cs" : ".dll";
            string filePath  = Path.GetFullPath(Guid.NewGuid().ToString()) + extension;
            Uri    uri       = new Uri(filePath);

            IFileSystem fileSystem = SetUnauthorizedAccessExceptionMock();

            FileData fileData = FileData.Create(
                uri,
                OptionallyEmittedData.TextFiles,
                mimeType: null,
                encoding: null,
                fileSystem: fileSystem);

            // We pass none here as the occurrence of UnauthorizedAccessException
            // should result in non-population of any file contents.
            Validate(fileData, OptionallyEmittedData.None);
        }
示例#11
0
        public void FileData_ComputeHashes()
        {
            string filePath     = Path.GetTempFileName();
            string fileContents = Guid.NewGuid().ToString();
            Uri    uri          = new Uri(filePath);

            try
            {
                File.WriteAllText(filePath, fileContents);
                FileData fileData = FileData.Create(uri, OptionallyEmittedData.Hashes);
                fileData.FileLocation.Should().Be(null);
                HashData hashes = HashUtilities.ComputeHashes(filePath);
                fileData.MimeType.Should().Be(MimeType.Binary);
                fileData.Contents.Should().BeNull();
                fileData.Hashes.Count.Should().Be(3);

                foreach (Hash hash in fileData.Hashes)
                {
                    switch (hash.Algorithm)
                    {
                    case "md5": { hash.Value.Should().Be(hashes.MD5); break; }

                    case "sha-1": { hash.Value.Should().Be(hashes.Sha1); break; }

                    case "sha-256": { hash.Value.Should().Be(hashes.Sha256); break; }

                    default: { true.Should().BeFalse(); break; /* unexpected algorithm kind */ }
                    }
                }
            }
            finally
            {
                if (File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
示例#12
0
        public void FileData_Create_NullUri()
        {
            Action action = () => { FileData.Create(null, OptionallyEmittedData.None); };

            action.ShouldThrow <ArgumentNullException>();
        }
示例#13
0
        public void FileData_Create_NullUri()
        {
            Action action = () => { FileData.Create(null, LoggingOptions.None); };

            action.ShouldThrow <ArgumentNullException>();
        }