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" 1326558dbbSAndrew Jeffery #include "mboxd.h" 14e0cdd3eaSAndrew Jeffery #include "flash.h" 15e0cdd3eaSAndrew Jeffery 16*2dfc2a22SAndrew Jeffery #include "test/system.h" 17e0cdd3eaSAndrew Jeffery #include "test/tmpf.h" 18e0cdd3eaSAndrew Jeffery 19e0cdd3eaSAndrew Jeffery #define TEST_SIZE 4096 20e0cdd3eaSAndrew Jeffery 21e0cdd3eaSAndrew Jeffery static struct tmpf tmp; 22e0cdd3eaSAndrew Jeffery 23e0cdd3eaSAndrew Jeffery void cleanup(void) 24e0cdd3eaSAndrew Jeffery { 25e0cdd3eaSAndrew Jeffery tmpf_destroy(&tmp); 26e0cdd3eaSAndrew Jeffery } 27e0cdd3eaSAndrew Jeffery 28e0cdd3eaSAndrew Jeffery int main(void) 29e0cdd3eaSAndrew Jeffery { 30*2dfc2a22SAndrew Jeffery struct mbox_context context = {0}; 31e0cdd3eaSAndrew Jeffery ssize_t processed; 32e0cdd3eaSAndrew Jeffery int rand_fd; 33e0cdd3eaSAndrew Jeffery char *src; 34e0cdd3eaSAndrew Jeffery char *dst; 35e0cdd3eaSAndrew Jeffery int rc; 36e0cdd3eaSAndrew Jeffery 37e0cdd3eaSAndrew Jeffery atexit(cleanup); 38e0cdd3eaSAndrew Jeffery 39*2dfc2a22SAndrew Jeffery system_set_mtd_sizes(TEST_SIZE, TEST_SIZE); 40*2dfc2a22SAndrew Jeffery 41e0cdd3eaSAndrew Jeffery mbox_vlog = &mbox_log_console; 42e0cdd3eaSAndrew Jeffery 43e0cdd3eaSAndrew Jeffery src = malloc(TEST_SIZE); 44e0cdd3eaSAndrew Jeffery dst = malloc(TEST_SIZE); 45e0cdd3eaSAndrew Jeffery if (!(src && dst)) { 46e0cdd3eaSAndrew Jeffery rc = -1; 47e0cdd3eaSAndrew Jeffery goto free; 48e0cdd3eaSAndrew Jeffery } 49e0cdd3eaSAndrew Jeffery 50e0cdd3eaSAndrew Jeffery rand_fd = open("/dev/urandom", O_RDONLY); 51e0cdd3eaSAndrew Jeffery if (rand_fd < 0) { 52e0cdd3eaSAndrew Jeffery rc = rand_fd; 53e0cdd3eaSAndrew Jeffery goto free; 54e0cdd3eaSAndrew Jeffery } 55e0cdd3eaSAndrew Jeffery 56e0cdd3eaSAndrew Jeffery rc = tmpf_init(&tmp, "flash-store.XXXXXX"); 57e0cdd3eaSAndrew Jeffery if (rc < 0) 58e0cdd3eaSAndrew Jeffery goto free; 59e0cdd3eaSAndrew Jeffery 60e0cdd3eaSAndrew Jeffery processed = read(rand_fd, src, TEST_SIZE); 61e0cdd3eaSAndrew Jeffery if (processed != TEST_SIZE) { 62e0cdd3eaSAndrew Jeffery rc = -1; 63e0cdd3eaSAndrew Jeffery goto free; 64e0cdd3eaSAndrew Jeffery } 65e0cdd3eaSAndrew Jeffery 66e0cdd3eaSAndrew Jeffery processed = write(tmp.fd, src, TEST_SIZE); 67e0cdd3eaSAndrew Jeffery if (processed != TEST_SIZE) { 68e0cdd3eaSAndrew Jeffery rc = -1; 69e0cdd3eaSAndrew Jeffery goto free; 70e0cdd3eaSAndrew Jeffery } 71e0cdd3eaSAndrew Jeffery 72e0cdd3eaSAndrew Jeffery context.fds[MTD_FD].fd = tmp.fd; 73e0cdd3eaSAndrew Jeffery 74e0cdd3eaSAndrew Jeffery flash_copy(&context, 0, dst, TEST_SIZE); 75e0cdd3eaSAndrew Jeffery assert(0 == memcmp(src, dst, TEST_SIZE)); 76e0cdd3eaSAndrew Jeffery 77e0cdd3eaSAndrew Jeffery free: 78e0cdd3eaSAndrew Jeffery free(src); 79e0cdd3eaSAndrew Jeffery free(dst); 80e0cdd3eaSAndrew Jeffery 81e0cdd3eaSAndrew Jeffery return rc; 82e0cdd3eaSAndrew Jeffery } 83