xref: /openbmc/hiomapd/test/flash_copy.c (revision 26558dbb00e439fb6ea18566361c0671ea6133f5)
1e0cdd3eaSAndrew Jeffery // SPDX-License-Identifier: Apache-2.0
2e0cdd3eaSAndrew Jeffery // Copyright (C) 2018 IBM Corp.
3e0cdd3eaSAndrew Jeffery 
4e0cdd3eaSAndrew Jeffery #include <assert.h>
5e0cdd3eaSAndrew Jeffery #include <fcntl.h>
6e0cdd3eaSAndrew Jeffery #include <stdlib.h>
7e0cdd3eaSAndrew Jeffery #include <string.h>
8e0cdd3eaSAndrew Jeffery #include <sys/types.h>
9e0cdd3eaSAndrew Jeffery #include <sys/stat.h>
10e0cdd3eaSAndrew Jeffery #include <unistd.h>
11e0cdd3eaSAndrew Jeffery 
12e0cdd3eaSAndrew Jeffery #include "common.h"
13*26558dbbSAndrew Jeffery #include "mboxd.h"
14e0cdd3eaSAndrew Jeffery #include "flash.h"
15e0cdd3eaSAndrew Jeffery 
16e0cdd3eaSAndrew Jeffery #include "test/tmpf.h"
17e0cdd3eaSAndrew Jeffery 
18e0cdd3eaSAndrew Jeffery #define TEST_SIZE 4096
19e0cdd3eaSAndrew Jeffery 
20e0cdd3eaSAndrew Jeffery static struct tmpf tmp;
21e0cdd3eaSAndrew Jeffery 
22e0cdd3eaSAndrew Jeffery void cleanup(void)
23e0cdd3eaSAndrew Jeffery {
24e0cdd3eaSAndrew Jeffery 	tmpf_destroy(&tmp);
25e0cdd3eaSAndrew Jeffery }
26e0cdd3eaSAndrew Jeffery 
27e0cdd3eaSAndrew Jeffery int main(void)
28e0cdd3eaSAndrew Jeffery {
29e0cdd3eaSAndrew Jeffery 	struct mbox_context context;
30e0cdd3eaSAndrew Jeffery 	ssize_t processed;
31e0cdd3eaSAndrew Jeffery 	int rand_fd;
32e0cdd3eaSAndrew Jeffery 	char *src;
33e0cdd3eaSAndrew Jeffery 	char *dst;
34e0cdd3eaSAndrew Jeffery 	int rc;
35e0cdd3eaSAndrew Jeffery 
36e0cdd3eaSAndrew Jeffery 	atexit(cleanup);
37e0cdd3eaSAndrew Jeffery 
38e0cdd3eaSAndrew Jeffery 	mbox_vlog = &mbox_log_console;
39e0cdd3eaSAndrew Jeffery 
40e0cdd3eaSAndrew Jeffery 	src = malloc(TEST_SIZE);
41e0cdd3eaSAndrew Jeffery 	dst = malloc(TEST_SIZE);
42e0cdd3eaSAndrew Jeffery 	if (!(src && dst)) {
43e0cdd3eaSAndrew Jeffery 		rc = -1;
44e0cdd3eaSAndrew Jeffery 		goto free;
45e0cdd3eaSAndrew Jeffery 	}
46e0cdd3eaSAndrew Jeffery 
47e0cdd3eaSAndrew Jeffery 	rand_fd = open("/dev/urandom", O_RDONLY);
48e0cdd3eaSAndrew Jeffery 	if (rand_fd < 0) {
49e0cdd3eaSAndrew Jeffery 		rc = rand_fd;
50e0cdd3eaSAndrew Jeffery 		goto free;
51e0cdd3eaSAndrew Jeffery 	}
52e0cdd3eaSAndrew Jeffery 
53e0cdd3eaSAndrew Jeffery 	rc = tmpf_init(&tmp, "flash-store.XXXXXX");
54e0cdd3eaSAndrew Jeffery 	if (rc < 0)
55e0cdd3eaSAndrew Jeffery 		goto free;
56e0cdd3eaSAndrew Jeffery 
57e0cdd3eaSAndrew Jeffery 	processed = read(rand_fd, src, TEST_SIZE);
58e0cdd3eaSAndrew Jeffery 	if (processed != TEST_SIZE) {
59e0cdd3eaSAndrew Jeffery 		rc = -1;
60e0cdd3eaSAndrew Jeffery 		goto free;
61e0cdd3eaSAndrew Jeffery 	}
62e0cdd3eaSAndrew Jeffery 
63e0cdd3eaSAndrew Jeffery 	processed = write(tmp.fd, src, TEST_SIZE);
64e0cdd3eaSAndrew Jeffery 	if (processed != TEST_SIZE) {
65e0cdd3eaSAndrew Jeffery 		rc = -1;
66e0cdd3eaSAndrew Jeffery 		goto free;
67e0cdd3eaSAndrew Jeffery 	}
68e0cdd3eaSAndrew Jeffery 
69e0cdd3eaSAndrew Jeffery 	context.fds[MTD_FD].fd = tmp.fd;
70e0cdd3eaSAndrew Jeffery 
71e0cdd3eaSAndrew Jeffery 	flash_copy(&context, 0, dst, TEST_SIZE);
72e0cdd3eaSAndrew Jeffery 	assert(0 == memcmp(src, dst, TEST_SIZE));
73e0cdd3eaSAndrew Jeffery 
74e0cdd3eaSAndrew Jeffery free:
75e0cdd3eaSAndrew Jeffery 	free(src);
76e0cdd3eaSAndrew Jeffery 	free(dst);
77e0cdd3eaSAndrew Jeffery 
78e0cdd3eaSAndrew Jeffery 	return rc;
79e0cdd3eaSAndrew Jeffery }
80