d1d453ac29
It works, but is very slow.
90 lines
2.6 KiB
Zig
90 lines
2.6 KiB
Zig
const std = @import("std");
|
|
const Io = std.Io;
|
|
const io = std.testing.io;
|
|
const alloc = std.testing.allocator;
|
|
const stuff = @import("builtin");
|
|
|
|
const Archive = @import("archive.zig");
|
|
const Superblock = Archive.Superblock;
|
|
|
|
const TestArchive = "testing/LinuxPATest.sfs";
|
|
|
|
test "Basics" {
|
|
std.debug.print("Starting test: Basics...\n", .{});
|
|
|
|
var fil = try Io.Dir.cwd().openFile(io, TestArchive, .{});
|
|
defer fil.close(io);
|
|
var sfs: Archive = try .init(io, fil, 0);
|
|
try std.testing.expectEqualDeep(sfs.super, LinuxPATestCorrectSuperblock);
|
|
const root_file = try sfs.root(alloc, io);
|
|
defer root_file.deinit();
|
|
}
|
|
|
|
const TestFile = "Start.exe";
|
|
const TestFileExtractLocation = "testing/Start.exe";
|
|
|
|
test "ExtractSingleFile" {
|
|
std.debug.print("Starting test: ExtractSingleFile...\n", .{});
|
|
|
|
Io.Dir.cwd().deleteFile(io, TestFileExtractLocation) catch {};
|
|
var fil = try Io.Dir.cwd().openFile(io, TestArchive, .{});
|
|
defer fil.close(io);
|
|
var sfs: Archive = try .init(io, fil, 0);
|
|
var test_fil = try sfs.open(alloc, io, TestFile);
|
|
defer test_fil.deinit();
|
|
try test_fil.extract(alloc, io, TestFileExtractLocation, try .Default());
|
|
//TODO: validate extracted file.
|
|
}
|
|
|
|
const TestFullExtractLocation = "testing/TestExtract";
|
|
|
|
test "ExtractCompleteArchive" {
|
|
std.debug.print("Starting test: ExtractCompleteArchive...\n", .{});
|
|
|
|
Io.Dir.cwd().deleteTree(io, TestFullExtractLocation) catch {};
|
|
var fil = try Io.Dir.cwd().openFile(io, TestArchive, .{});
|
|
defer fil.close(io);
|
|
var sfs: Archive = try .init(io, fil, 0);
|
|
try sfs.extract(alloc, io, TestFullExtractLocation, try .Default());
|
|
}
|
|
|
|
const LinuxPATestCorrectSuperblock: Superblock = .{
|
|
.magic = std.mem.readInt(u32, "hsqs", .little),
|
|
.inode_count = 2974,
|
|
.mod_time = 1632696724,
|
|
.block_size = 131072,
|
|
.frag_count = 264,
|
|
.compression = .zstd,
|
|
.block_log = 17,
|
|
.flags = .{
|
|
.inode_uncompressed = false,
|
|
.data_uncompressed = false,
|
|
.check = false,
|
|
.frag_uncompressed = false,
|
|
.fragment_never = false,
|
|
.fragment_always = false,
|
|
.duplicates = true,
|
|
.exportable = true,
|
|
.xattr_uncompressed = false,
|
|
.xattr_never = false,
|
|
.compression_options = false,
|
|
.ids_uncompressed = false,
|
|
._ = 0,
|
|
},
|
|
.id_count = 1,
|
|
.ver_maj = 4,
|
|
.ver_min = 0,
|
|
.root_ref = .{
|
|
.block_offset = 1363,
|
|
.block_start = 29237,
|
|
._ = 0,
|
|
},
|
|
.size = 106841744,
|
|
.id_start = 106841632,
|
|
.xattr_start = 106841720,
|
|
.inode_start = 106778274,
|
|
.dir_start = 106807998,
|
|
.frag_start = 106837747,
|
|
.export_start = 106841602,
|
|
};
|