VirtualBox

source: vbox/trunk/src/VBox/Devices/testcase/tstDeviceCfg.h@ 96407

Last change on this file since 96407 was 96407, checked in by vboxsync, 2 years ago

scm copyright and license note update

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1/** @file
2 * tstDevice: Configuration handling.
3 */
4
5/*
6 * Copyright (C) 2020-2022 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * SPDX-License-Identifier: GPL-3.0-only
25 */
26
27#ifndef VBOX_INCLUDED_SRC_testcase_tstDeviceCfg_h
28#define VBOX_INCLUDED_SRC_testcase_tstDeviceCfg_h
29#ifndef RT_WITHOUT_PRAGMA_ONCE
30# pragma once
31#endif
32
33#include <VBox/param.h>
34#include <VBox/types.h>
35#include <iprt/err.h>
36
37RT_C_DECLS_BEGIN
38
39/**
40 * Config item type.
41 */
42typedef enum TSTDEVCFGITEMTYPE
43{
44 /** Invalid type. */
45 TSTDEVCFGITEMTYPE_INVALID = 0,
46 /** String type. */
47 TSTDEVCFGITEMTYPE_STRING,
48 /** Integer value encoded in the string. */
49 TSTDEVCFGITEMTYPE_INTEGER,
50 /** Raw bytes. */
51 TSTDEVCFGITEMTYPE_BYTES,
52 /** 32bit hack. */
53 TSTDEVCFGITEMTYPE_32BIT_HACK = 0x7fffffff
54} TSTDEVCFGITEMTYPE;
55/** Pointer to a config item type. */
56typedef TSTDEVCFGITEMTYPE *PTSTDEVCFGITEMTYPE;
57
58
59/**
60 * Testcase config item.
61 */
62typedef struct TSTDEVCFGITEM
63{
64 /** The key of the item. */
65 const char *pszKey;
66 /** Type of the config item. */
67 TSTDEVCFGITEMTYPE enmType;
68 /** Type dependent data. */
69 union
70 {
71 /** String value. */
72 const char *psz;
73 /** Integer value. */
74 int64_t i64;
75 /** Raw bytes. */
76 struct
77 {
78 /** Size of the byte buffer. */
79 size_t cb;
80 /** Pointer to the raw buffer. */
81 const void *pv;
82 } RawBytes;
83 } u;
84} TSTDEVCFGITEM;
85/** Pointer to a testcase config item. */
86typedef TSTDEVCFGITEM *PTSTDEVCFGITEM;
87/** Pointer to a constant testcase config item. */
88typedef const TSTDEVCFGITEM *PCTSTDEVCFGITEM;
89
90
91/**
92 * A single test.
93 */
94typedef struct TSTDEVTEST
95{
96 /** Flag whether to enable the R0 part for testing. */
97 bool fR0Enabled;
98 /** Flag whether to enable the RC part for testing. */
99 bool fRCEnabled;
100 /** Number of configuration items for the device. */
101 uint32_t cCfgItems;
102 /** Pointer to array of configuration items for the device. */
103 PCTSTDEVCFGITEM paCfgItems;
104 /** Number of testcases to run with that device instance. */
105 uint32_t cTestcases;
106 /** Pointer to the array of testcase IDs. */
107 const char **papszTestcaseIds;
108 /** Pointer to the array of testcase configuration item numbers. */
109 uint32_t *pacTestcaseCfgItems;
110 /** Pointer to the array of configuration item array pointers for each testcase. */
111 PCTSTDEVCFGITEM *papTestcaseCfg;
112} TSTDEVTEST;
113/** Pointer to a single test. */
114typedef TSTDEVTEST *PTSTDEVTEST;
115/** Pointer to a const single test. */
116typedef const TSTDEVTEST *PCTSTDEVTEST;
117
118
119/**
120 * A device test configuration.
121 */
122typedef struct TSTDEVCFG
123{
124 /** The identifier of the device to test. */
125 const char *pszDevName;
126
127 /** R3 PDM module to load containing the device to test. */
128 const char *pszPdmR3Mod;
129 /** R0 PDM module to load containing the device to test. */
130 const char *pszPdmR0Mod;
131 /** RC PDM module to load containing the device to test. */
132 const char *pszPdmRCMod;
133
134 /** Testcase module to load. */
135 const char *pszTstDevMod;
136
137 /** Number of tests configured in the config. */
138 uint32_t cTests;
139 /** The array of tests to execute for the given device - variable in size. */
140 TSTDEVTEST aTests[1];
141} TSTDEVCFG;
142/** Pointer to a device test configuration. */
143typedef TSTDEVCFG *PTSTDEVCFG;
144/** Pointer to a const device test configuration. */
145typedef const TSTDEVCFG *PCTSTDEVCFG;
146/** Pointer to a device test configuration pointer. */
147typedef TSTDEVCFG *PPTSTDEVCFG;
148
149
150/**
151 * Loads the config from the given file returning the configuration structure on success.
152 *
153 * @returns VBox status code.
154 * @param pszCfgFilename The configuration file path to load.
155 * @param pErrInfo Where to store additional error information if loading the config fails, optional.
156 * @param ppDevTstCfg Where to store the pointer to the created test configuration on success.
157 */
158DECLHIDDEN(int) tstDevCfgLoad(const char *pszCfgFilename, PRTERRINFO pErrInfo, PCTSTDEVCFG *ppDevTstCfg);
159
160/**
161 * Destroys the given test configuration freeing all allocated resources.
162 *
163 * @returns nothing.
164 * @param pDevTstCfg The test configuration to destroy.
165 */
166DECLHIDDEN(void) tstDevCfgDestroy(PCTSTDEVCFG pDevTstCfg);
167
168RT_C_DECLS_END
169
170#endif /* !VBOX_INCLUDED_SRC_testcase_tstDeviceCfg_h */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette