diff options
author | Ratan Gupta <ratagupt@in.ibm.com> | 2017-05-11 08:58:19 +0530 |
---|---|---|
committer | Ratan Gupta <ratagupt@in.ibm.com> | 2017-06-29 00:57:46 +0530 |
commit | 3214b5137d5152f1201d1c551c8bacacac5fd10e (patch) | |
tree | d4a6b35cc3ac6c5a264fe9289069e1feda256be2 /test | |
parent | 8441a3958a70ea9980adc02bc85af28dc5ac7f92 (diff) | |
download | phosphor-mboxd-3214b5137d5152f1201d1c551c8bacacac5fd10e.tar.gz phosphor-mboxd-3214b5137d5152f1201d1c551c8bacacac5fd10e.zip |
test: read window from partition file
Resolves openbmc/openbmc#1440
Change-Id: I8e6ae35e4c5ba2936a578349e6cea464de6ab40d
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/create_read_window_vpnor.cpp | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/test/create_read_window_vpnor.cpp b/test/create_read_window_vpnor.cpp new file mode 100644 index 0000000..855d88d --- /dev/null +++ b/test/create_read_window_vpnor.cpp @@ -0,0 +1,89 @@ +#include "config.h" +#include "mboxd_pnor_partition_table.h" + +extern "C" { +#include "test/mbox.h" +#include "test/system.h" +} + +#include <assert.h> +#include <string.h> + +#include <vector> +#include <fstream> +#include <experimental/filesystem> + +constexpr auto line = "partition01=HBB,00000000,00000400,ECC,PRESERVED"; +constexpr auto partition = "HBB"; +char tmplt[] = "/tmp/create_read_test.XXXXXX"; +uint8_t data[8] = { 0xaa, 0x55, 0xaa, 0x66, 0x77, 0x88, 0x99, 0xab }; + +#define BLOCK_SIZE 4096 +#define MEM_SIZE (BLOCK_SIZE *2) +#define ERASE_SIZE BLOCK_SIZE +#define N_WINDOWS 1 +#define WINDOW_SIZE BLOCK_SIZE + +static const uint8_t get_info[] = { + 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; +// offset 1 and size 6 +static const uint8_t create_read_window[] = { + 0x04, 0x01, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +static const uint8_t response[] = { + 0x04, 0x01, 0xfe, 0xff, 0x01, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 +}; + +namespace fs = std::experimental::filesystem; + +int main() +{ + char* tmpdir = mkdtemp(tmplt); + assert(tmpdir != nullptr); + + // create the toc file + fs::path tocFilePath{tmpdir}; + tocFilePath /= PARTITION_TOC_FILE; + std::ofstream tocFile(tocFilePath.c_str()); + tocFile.write(line, strlen(line)); + tocFile.close(); + + // create the partition file + fs::path partitionFilePath{tmpdir}; + partitionFilePath /= partition; + std::ofstream partitionFile(partitionFilePath.c_str()); + + partitionFile.write((char*)data,sizeof(data)); + partitionFile.close(); + + system_set_reserved_size(MEM_SIZE); + system_set_mtd_sizes(MEM_SIZE, ERASE_SIZE); + + struct mbox_context *ctx = mbox_create_test_context(N_WINDOWS, WINDOW_SIZE); + strcpy(ctx->paths.ro_loc,tmpdir); + + vpnor_create_partition_table_from_path(ctx, tmpdir); + + int rc = mbox_command_dispatch(ctx, get_info, sizeof(get_info)); + assert(rc == 1); + + // send the request for partition1 + rc = mbox_command_dispatch(ctx, create_read_window, + sizeof(create_read_window)); + assert(rc == 1); + + rc = mbox_cmp(ctx, response, sizeof(response)); + assert(rc == 0); + + // Compare the reserved memory to the pnor + rc = memcmp(ctx->mem, data, 6); + assert(rc == 0); + + fs::remove_all(fs::path{tmpdir}); + return rc; +} |