1 From e76ec6107f63fbf17cc6daf00a9cdb21994e54c1 Mon Sep 17 00:00:00 2001
2 From: Wang Dong <dongdwdw@linux.vnet.ibm.com>
3 Date: Thu, 20 Apr 2017 10:20:07 +0200
4 Subject: [PATCH 75/75] libparted/dasd: add test cases for the new fdasd
7 The test case uses a temporary file in libparted/tests under
8 Check framwork.It can be issued by "make check" in the test dir.
10 Signed-off-by: Wang Dong <dongdwdw@linux.vnet.ibm.com>
11 Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
13 libparted/tests/t4000-volser.sh | 20 +++++
14 libparted/tests/volser.c | 188 ++++++++++++++++++++++++++++++++++++++++
15 2 files changed, 208 insertions(+)
16 create mode 100755 libparted/tests/t4000-volser.sh
17 create mode 100644 libparted/tests/volser.c
19 diff --git a/libparted/tests/t4000-volser.sh b/libparted/tests/t4000-volser.sh
21 index 0000000..89688ba
23 +++ b/libparted/tests/t4000-volser.sh
27 +# This program is free software; you can redistribute it and/or modify
28 +# it under the terms of the GNU General Public License as published by
29 +# the Free Software Foundation; either version 3 of the License, or
30 +# (at your option) any later version.
32 +# This program is distributed in the hope that it will be useful,
33 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
34 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35 +# GNU General Public License for more details.
37 +# You should have received a copy of the GNU General Public License
38 +# along with this program. If not, see <http://www.gnu.org/licenses/>.
40 +. "${top_srcdir=../..}/tests/init.sh"; path_prepend_ .
45 diff --git a/libparted/tests/volser.c b/libparted/tests/volser.c
47 index 0000000..9063821
49 +++ b/libparted/tests/volser.c
52 + * Author: Wang Dong <dongdwdw@cn.ibm.com>
59 +#include <parted/vtoc.h>
60 +#include <parted/device.h>
61 +#include <parted/fdasd.h>
62 +#include <parted/vtoc.h>
63 +#include "../arch/linux.h"
65 +#include "progname.h"
68 +static char vol_devno[7] = {0};
69 +static char *tmp_disk;
72 +static PedDisk *disk;
73 +static struct fdasd_anchor anc;
74 +static fdasd_anchor_t *anchor = &anc;
75 +static LinuxSpecific *arch_specific;
77 +/* set the enviroment */
78 +static void set_test (void)
82 + type = ped_disk_type_get ("dasd");
84 + tmp_disk = _create_disk (20*1024*1024);
85 + fail_if (tmp_disk == NULL, "Failed to create temporary disk");
86 + dev = ped_device_get (tmp_disk);
90 + disk = _create_disk_label (dev, type);
91 + if (!ped_device_open (disk->dev))
94 + fdasd_initialize_anchor (anchor);
95 + arch_specific = LINUX_SPECIFIC (disk->dev);
96 + fd = arch_specific->fd;
97 + if (!fdasd_get_geometry (dev, anchor, fd))
100 + fdasd_check_volume (anchor, fd);
101 + sprintf (vol_devno, "0X%04x", anchor->devno);
102 + ck_assert (strlen (vol_devno) == VOLSER_LENGTH);
105 +static void free_test (void)
107 + ped_device_close (disk->dev);
108 + ped_device_destroy (disk->dev);
111 + fdasd_cleanup (anchor);
114 +/* Test with default volser */
115 +START_TEST (test_get_volser)
117 + char volser[7] = {0};
118 + fdasd_change_volser (anchor, vol_devno);
119 + fdasd_write_labels (anchor, fd);
121 + fdasd_get_volser (anchor, volser, fd);
122 + ck_assert (!strcmp (volser, vol_devno));
126 +START_TEST (test_check_volser)
129 + char vol_long[] = "abcdefg";
130 + char vol_short[] = "ab_c ";
131 + char vol_null[] = " ";
132 + char *vol_input = NULL;
134 + vol_input = vol_long;
135 + fdasd_check_volser (vol_input, anchor->devno);
136 + ck_assert(!strcmp (vol_input, "ABCDEF"));
138 + vol_input = vol_short;
139 + fdasd_check_volser (vol_input, anchor->devno);
140 + ck_assert (!strcmp (vol_input, "ABC"));
142 + vol_input = vol_null;
143 + fdasd_check_volser (vol_input, anchor->devno);
144 + ck_assert (!strcmp (vol_input, vol_devno));
148 +START_TEST (test_change_volser)
151 + char vol[] = "000000";
152 + char volser[7] = {0};
154 + fdasd_change_volser (anchor, vol);
155 + fdasd_write_labels (anchor, fd);
157 + fdasd_get_volser (anchor, volser, fd);
158 + ck_assert (!strcmp (volser, vol));
163 + * fdsad_recreate_vtoc recreate the VTOC with existing one.
164 + * So the partition information should be not changed after recreating
167 +START_TEST (test_reuse_vtoc)
172 + memcpy (&before, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
174 + if (anchor->fspace_trk) {
175 + fdasd_reuse_vtoc (anchor);
176 + memcpy (&after, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
177 + if ((before.t != after.t) && (before.fc != after.fc) && (before.ft != after.ft))
180 + fdasd_reuse_vtoc (anchor);
181 + memcpy (&after, &anchor->f5->DS5AVEXT, sizeof(ds5ext_t));
182 + if ((before.t != after.t) && (before.fc != after.fc) && (before.ft != after.ft))
188 +int main (int argc, char **argv)
191 + set_program_name (argv[0]);
193 +#if defined __s390__ || defined __s390x__
195 + int number_failed = 0;
197 + Suite *suite = suite_create ("Volser");
199 + TCase *tcase_get = tcase_create ("Get");
200 + TCase *tcase_check = tcase_create ("Check");
201 + TCase *tcase_change = tcase_create ("Change");
202 + TCase *tcase_vtoc = tcase_create ("Vtoc");
204 + ped_exception_set_handler (_test_exception_handler);
206 + tcase_add_checked_fixture (tcase_check, set_test, free_test);
207 + tcase_add_test (tcase_check, test_check_volser);
208 + tcase_set_timeout (tcase_check, 0);
209 + suite_add_tcase (suite, tcase_check);
211 + tcase_add_checked_fixture (tcase_change, set_test, free_test);
212 + tcase_add_test (tcase_change, test_change_volser);
213 + tcase_set_timeout (tcase_change, 0);
214 + suite_add_tcase (suite, tcase_change);
216 + tcase_add_checked_fixture (tcase_get, set_test, free_test);
217 + tcase_add_test (tcase_get, test_get_volser);
218 + tcase_set_timeout (tcase_get, 0);
219 + suite_add_tcase (suite, tcase_get);
221 + tcase_add_checked_fixture (tcase_vtoc, set_test, free_test);
222 + tcase_add_test (tcase_vtoc, test_reuse_vtoc);
223 + tcase_set_timeout (tcase_vtoc, 0);
224 + suite_add_tcase (suite, tcase_vtoc);
226 + SRunner *srunner = srunner_create (suite);
227 + /* When to debug, uncomment this line */
228 + /* srunner_set_fork_status (srunner, CK_NOFORK); */
230 + srunner_run_all (srunner, CK_VERBOSE);
232 + number_failed = srunner_ntests_failed (srunner);
233 + srunner_free (srunner);
234 + return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;