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" 14*f1e547c7SEvan Lojewski #include "backend.h" 15e0cdd3eaSAndrew Jeffery 162dfc2a22SAndrew 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 { 302dfc2a22SAndrew 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 392dfc2a22SAndrew Jeffery system_set_mtd_sizes(TEST_SIZE, TEST_SIZE); 402dfc2a22SAndrew 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 72*f1e547c7SEvan Lojewski assert(!backend_probe_mtd(&context.backend, tmp.path)); 73e0cdd3eaSAndrew Jeffery 74e0cdd3eaSAndrew Jeffery flash_copy(&context, 0, dst, TEST_SIZE); 75e0cdd3eaSAndrew Jeffery assert(0 == memcmp(src, dst, TEST_SIZE)); 76e0cdd3eaSAndrew Jeffery 77*f1e547c7SEvan Lojewski backend_free(&context.backend); 78*f1e547c7SEvan Lojewski 79e0cdd3eaSAndrew Jeffery free: 80*f1e547c7SEvan Lojewski 81e0cdd3eaSAndrew Jeffery free(src); 82e0cdd3eaSAndrew Jeffery free(dst); 83e0cdd3eaSAndrew Jeffery 84e0cdd3eaSAndrew Jeffery return rc; 85e0cdd3eaSAndrew Jeffery } 86