Pure Erlang implementation of 9p2000 protocol
filesystem
fs
9p2000
erlang
9p
1% SPDX-FileCopyrightText: 2026 Łukasz Niemier <~@hauleth.dev>
2%
3% SPDX-License-Identifier: Apache-2.0
4
5-module(e9p_msg_SUITE).
6
7-compile(export_all).
8
9-include("e9p_internal.hrl").
10
11-include_lib("stdlib/include/assert.hrl").
12-include_lib("common_test/include/ct.hrl").
13
14all() -> [
15 stat_encode_decode,
16 rstat_encode_decode,
17 rclunk_encode_decode,
18 rflush_encode_decode,
19 rwstat_encode_decode,
20 rremove_encode_decode
21 ].
22
23stat_encode_decode(_Conf) ->
24 Stat = #{
25 type => 0,
26 dev => 0,
27 qid => e9p:make_qid(regular, 0, 0),
28 mode => 0,
29 atime => 0,
30 mtime => 0,
31 length => 0,
32 name => <<>>,
33 uid => <<>>,
34 gid => <<>>,
35 muid => <<>>
36 },
37 Out = iolist_to_binary(e9p_msg:encode_stat(Stat)),
38 Decoded = e9p_msg:parse_stat(Out),
39 ?assertEqual({ok, Stat}, Decoded).
40
41rstat_encode_decode(_Conf) ->
42 Stat = #{
43 type => 0,
44 dev => 0,
45 qid => e9p:make_qid(regular, 0, 0),
46 mode => 0,
47 atime => 0,
48 mtime => 0,
49 length => 0,
50 name => <<>>,
51 uid => <<>>,
52 gid => <<>>,
53 muid => <<>>
54 },
55 Msg = #rstat{stat = Stat},
56 Tag = 1,
57 Out = e9p_msg:encode(Tag, Msg),
58 Decoded = e9p_msg:parse(iolist_to_binary(Out)),
59 ?assertEqual({ok, Tag, Msg}, Decoded).
60
61rclunk_encode_decode(_Conf) ->
62 enc_dec(#rclunk{}).
63
64rflush_encode_decode(_Conf) ->
65 enc_dec(#rflush{}).
66
67rwstat_encode_decode(_Conf) ->
68 enc_dec(#rwstat{}).
69
70rremove_encode_decode(_Conf) ->
71 enc_dec(#rremove{}).
72
73enc_dec(Data) ->
74 Tag = 1,
75 Out = e9p_msg:encode(Tag, Data),
76 Encoded = iolist_to_binary(Out),
77 ?assertEqual({ok, Tag, Data}, e9p_msg:parse(Encoded)).