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