Beispiel #1
0
        private static bool ChecksumMatches(string raw, string outputFile, AssertContext context)
        {
            if (AssertConfigure.ChecksumFileResolver == null)
            {
                return(false);
            }

            var hash = sha.ComputeHash(Encoding.ASCII.GetBytes(raw));

            var checksumFilePath = GetChecksumFilePath(context);

            var checksumKey = Path.GetRelativePath(checksumFilePath, outputFile);

            var checksumDict = checksums.GetOrAdd(checksumFilePath, ReadChecksumFile);

            if (!checksumDict.TryGetValue(checksumKey, out var checksum))
            {
                return(false);
            }

            if (checksum != Convert.ToBase64String(hash))
            {
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        public static string MatchesRaw(string rawData, string step, string fileType = "raw")
        {
            var    context    = new AssertContext(step);
            var    basePath   = AssertConfigure.GlobalPath ?? AssertConfigure.DefaultGlobalPath;
            string outputFile = null;

            if (AssertConfigure.PathResolver != null)
            {
                outputFile = Path.GetFullPath(Path.Combine(basePath, AssertConfigure.PathResolver(context), step + "." + fileType));
                Directory.CreateDirectory(Path.GetDirectoryName(outputFile));
            }
            else
            {
                Directory.CreateDirectory(basePath);
                outputFile = Path.Combine(step + "." + fileType);
            }


            if (AssertConfigure.WriteMode)
            {
                AssertConfigure.EnsureDevMode();

                if (ChecksumMatches(rawData, outputFile, context))
                {
                    return(rawData); // The file already matches; don't write to disk and save a few write cycles
                }
                WriteChecksumFile(rawData, outputFile, context);
                File.WriteAllText(outputFile, rawData);
            }
            else
            {
                if (!File.Exists(outputFile))
                {
                    throw new FileNotFoundException($"Could not find file '{outputFile}'. Is this a new test? Enable {nameof(AssertConfigure.WriteMode)} in {nameof(AssertConfigure)} to fix");
                }

                if (ChecksumMatches(rawData, outputFile, context))
                {
                    return(rawData);
                }

                if (!File.ReadAllText(outputFile).Equals(rawData))
                {
                    throw new InvalidProgramException($"Difference in step {step}"); // TODO better error, with where and what
                }
            }

            return(rawData);
        }
Beispiel #3
0
        public static void WriteChecksumFile(string raw, string outputFile, AssertContext context)
        {
            var checksumFilePath = GetChecksumFilePath(context);

            Directory.CreateDirectory(Path.GetDirectoryName(checksumFilePath));

            var hash = sha.ComputeHash(Encoding.ASCII.GetBytes(raw));

            var checksumKey = Path.GetRelativePath(checksumFilePath, outputFile);

            var checksumDict = checksums.GetOrAdd(checksumFilePath, ReadChecksumFile);

            checksumDict[checksumKey] = Convert.ToBase64String(hash);

            var serialized = JsonSerializer.Serialize(checksumDict, options);

            File.WriteAllText(checksumFilePath, serialized);
        }
Beispiel #4
0
        public static string GetChecksumFilePath(AssertContext context)
        {
            var basePath = AssertConfigure.GlobalPath ?? AssertConfigure.DefaultGlobalPath;

            return(Path.Combine(basePath, AssertConfigure.ChecksumFileResolver(context)));
        }