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