summaryrefslogtreecommitdiff
path: root/src/ninep/testing.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/ninep/testing.zig')
-rw-r--r--src/ninep/testing.zig29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/ninep/testing.zig b/src/ninep/testing.zig
index ba26cb38..ad1d84e4 100644
--- a/src/ninep/testing.zig
+++ b/src/ninep/testing.zig
@@ -69,13 +69,30 @@ pub fn look_up(p: *Pardes, dir: u64, name: []const u8) Answer {
return call(p, .{ .tag = 3, .op = .lookup, .node = dir, .data = name });
}
-/// Opens /new once, as a client would, and returns the pane it made.
+/// Creates a pane in /pane, as a client's mkdir does, and returns its serial.
pub fn newPane(p: *Pardes) !u32 {
- const new = @intFromEnum(tree.TopFile.new);
- const opened = call(p, .{ .tag = 9, .op = .open, .node = new });
- if (opened.reply.status != .ok or opened.reply.handle == 0) return error.NoPane;
- _ = call(p, .{ .tag = 9, .op = .release, .node = new, .handle = opened.reply.handle });
- return opened.reply.handle;
+ const made = mkdir(p, "scratch");
+ if (made.reply.status != .ok) return error.NoPane;
+ const target = tree.Node.target(made.reply.attr.node) orelse return error.NoPane;
+ return switch (target) {
+ .pane => |t| t.serial,
+ .top => error.NoPane,
+ };
+}
+
+pub fn mkdir(p: *Pardes, name: []const u8) Answer {
+ return call(p, .{
+ .tag = 9,
+ .op = .open,
+ .node = @intFromEnum(tree.TopFile.pane),
+ .data = name,
+ .create = true,
+ .perm = 0x8000_0000 | 0o755,
+ });
+}
+
+pub fn rmdir(p: *Pardes, node: u64) Answer {
+ return call(p, .{ .tag = 9, .op = .release, .node = node, .remove = true });
}
pub fn withFile(gpa: std.mem.Allocator, text: []const u8) !*Pardes {