xref: /freebsd/sys/contrib/openzfs/tests/unit/mock_dmu.h (revision d9497217456002b0ddad3cd319570d0b098daa29)
1*d9497217SMartin Matuska // SPDX-License-Identifier: CDDL-1.0
2*d9497217SMartin Matuska /*
3*d9497217SMartin Matuska  * This file and its contents are supplied under the terms of the
4*d9497217SMartin Matuska  * Common Development and Distribution License ("CDDL"), version 1.0.
5*d9497217SMartin Matuska  * You may only use this file in accordance with the terms of version
6*d9497217SMartin Matuska  * 1.0 of the CDDL.
7*d9497217SMartin Matuska  *
8*d9497217SMartin Matuska  * A full copy of the text of the CDDL should have accompanied this
9*d9497217SMartin Matuska  * source.  A copy of the CDDL is also available via the Internet at
10*d9497217SMartin Matuska  * http://www.illumos.org/license/CDDL.
11*d9497217SMartin Matuska  */
12*d9497217SMartin Matuska 
13*d9497217SMartin Matuska /*
14*d9497217SMartin Matuska  * Copyright (c) 2026, TrueNAS.
15*d9497217SMartin Matuska  */
16*d9497217SMartin Matuska 
17*d9497217SMartin Matuska #ifndef _MOCK_DMU_H
18*d9497217SMartin Matuska #define	_MOCK_DMU_H
19*d9497217SMartin Matuska 
20*d9497217SMartin Matuska /*
21*d9497217SMartin Matuska  * In-memory mock of the core DMU types for unit testing.
22*d9497217SMartin Matuska  *
23*d9497217SMartin Matuska  * Provides mock_dnode_t carrying a flat array of fixed-size blocks.
24*d9497217SMartin Matuska  */
25*d9497217SMartin Matuska 
26*d9497217SMartin Matuska #include <sys/types.h>
27*d9497217SMartin Matuska 
28*d9497217SMartin Matuska typedef struct mock_dnode mock_dnode_t;
29*d9497217SMartin Matuska typedef struct mock_dmu_tx mock_dmu_tx_t;
30*d9497217SMartin Matuska 
31*d9497217SMartin Matuska /* Create a mock dnode with the given block size and object type. */
32*d9497217SMartin Matuska mock_dnode_t *mock_dnode_create(size_t blksize, dmu_object_type_t type);
33*d9497217SMartin Matuska 
34*d9497217SMartin Matuska /* Free a mock dnode and all its blocks. */
35*d9497217SMartin Matuska void mock_dnode_destroy(mock_dnode_t *mdn);
36*d9497217SMartin Matuska 
37*d9497217SMartin Matuska /* Returns the current number of blocks underlying this dnode. */
38*d9497217SMartin Matuska size_t mock_dnode_block_count(mock_dnode_t *mdn);
39*d9497217SMartin Matuska 
40*d9497217SMartin Matuska /* Returns a pointer to the data under the given block id. */
41*d9497217SMartin Matuska const void *mock_dnode_block_data(mock_dnode_t *mdn, uint64_t blkid);
42*d9497217SMartin Matuska 
43*d9497217SMartin Matuska /* Returns the current dnode ref (hold) count. */
44*d9497217SMartin Matuska uint64_t mock_dnode_refcount(mock_dnode_t *mdn);
45*d9497217SMartin Matuska 
46*d9497217SMartin Matuska /* Create/destroy a mock transaction handle. */
47*d9497217SMartin Matuska mock_dmu_tx_t *mock_tx_create(void);
48*d9497217SMartin Matuska void mock_tx_destroy(mock_dmu_tx_t *tx);
49*d9497217SMartin Matuska 
50*d9497217SMartin Matuska #endif /* _MOCK_DMU_H */
51