Esempio n. 1
0
        public void CreateZipShouldSetTimeOnEntriesFromConstructorTimeSetting(TimeSetting timeSetting)
        {
            var targetTime = TestTargetTime(timeSetting);
            var fastZip    = new FastZip(timeSetting);

            var alterTime = (Action <FileInfo>)null;

            switch (timeSetting)
            {
            case TimeSetting.LastWriteTime: alterTime = fi => fi.LastWriteTime = targetTime; break;

            case TimeSetting.LastWriteTimeUtc: alterTime = fi => fi.LastWriteTimeUtc = targetTime; break;

            case TimeSetting.CreateTime: alterTime = fi => fi.CreationTime = targetTime; break;

            case TimeSetting.CreateTimeUtc: alterTime = fi => fi.CreationTimeUtc = targetTime; break;
            }

            var target = CreateFastZipTestArchiveWithAnEntry(fastZip, alterTime);
            // Check that the file contents are correct in both cases
            var archive = new MemoryStream(target.ToArray());

            using (var zf = new ZipFile(archive))
            {
                var expectedTime = TestTargetTime(timeSetting);
                var actualTime   = zf[0].DateTime;
                // Assert that the time is within +/- 2s of the target time to allow for timing/rounding discrepancies
                Assert.LessOrEqual(Math.Abs((expectedTime - actualTime).TotalSeconds), 2);
            }
        }
Esempio n. 2
0
        private static DateTime TestTargetTime(TimeSetting ts)
        {
            var dtk = ts == TimeSetting.CreateTimeUtc ||
                      ts == TimeSetting.LastWriteTimeUtc ||
                      ts == TimeSetting.LastAccessTimeUtc
                                ? DateTimeKind.Utc
                                : DateTimeKind.Local;

            return(IsLastAccessTime(ts)
                   // AccessTime will be altered by reading/writing the file entry
                                ? CurrentTime(dtk)
                                : ExpectedFixedTime(dtk));
        }
Esempio n. 3
0
        private static DateTime FileTimeFromTimeSetting(FileInfo fi, TimeSetting timeSetting)
        {
            switch (timeSetting)
            {
            case TimeSetting.LastWriteTime: return(fi.LastWriteTime);

            case TimeSetting.LastWriteTimeUtc: return(fi.LastWriteTimeUtc);

            case TimeSetting.CreateTime: return(fi.CreationTime);

            case TimeSetting.CreateTimeUtc: return(fi.CreationTimeUtc);

            case TimeSetting.LastAccessTime: return(fi.LastAccessTime);

            case TimeSetting.LastAccessTimeUtc: return(fi.LastAccessTimeUtc);

            case TimeSetting.Fixed: return(fi.LastWriteTime);
            }

            throw new ArgumentException("Invalid TimeSetting", nameof(timeSetting));
        }
Esempio n. 4
0
        public void ExtractZipShouldSetTimeOnFilesFromConstructorTimeSetting(TimeSetting timeSetting)
        {
            var targetTime    = ExpectedFixedTime();
            var archiveStream = CreateFastZipTestArchiveWithAnEntry(new FastZip(targetTime));

            if (timeSetting == TimeSetting.Fixed)
            {
                Assert.Ignore("Fixed time without specifying a time is undefined");
            }

            var fastZip = new FastZip(timeSetting);

            using var extractDir = Utils.GetTempDir();
            fastZip.ExtractZip(archiveStream, extractDir.FullName, FastZip.Overwrite.Always,
                               _ => true, "", "", restoreDateTime: true, isStreamOwner: true, allowParentTraversal: false);
            var fi         = new FileInfo(Path.Combine(extractDir.FullName, SingleEntryFileName));
            var actualTime = FileTimeFromTimeSetting(fi, timeSetting);

            // Assert that the time is within +/- 2s of the target time to allow for timing/rounding discrepancies
            Assert.LessOrEqual(Math.Abs((targetTime - actualTime).TotalSeconds), 2);
        }
Esempio n. 5
0
 private static bool IsLastAccessTime(TimeSetting ts)
 => ts == TimeSetting.LastAccessTime || ts == TimeSetting.LastAccessTimeUtc;