blob: 1d4b12687ff3798f5aa7444bfd6830b11f6adc7d [file] [log] [blame]
Andrew Jeffery4fe996c2018-02-27 12:16:48 +10301// SPDX-License-Identifier: Apache-2.0
2// Copyright (C) 2018 IBM Corp.
Deepak Kodihalli393821d2017-04-28 04:44:38 -05003#include "pnor_partition_table.hpp"
4#include "config.h"
5#include <assert.h>
6#include <string.h>
7#include <vector>
8#include <fstream>
9#include <experimental/filesystem>
10
Andrew Jefferyd083efd2018-02-21 21:19:00 +103011#include "test/vpnor/tmpd.hpp"
12
Andrew Jeffery9ecef792018-02-21 17:13:20 +103013static const auto BLOCK_SIZE = 4 * 1024;
14static const auto PNOR_SIZE = 64 * 1024 * 1024;
15
16const std::string toc[] = {
17 "partition01=HBB,00000000,00000400,80,ECC,PRESERVED",
18};
Deepak Kodihalli393821d2017-04-28 04:44:38 -050019constexpr auto partitionName = "HBB";
Andrew Jeffery9ecef792018-02-21 17:13:20 +103020
21namespace fs = std::experimental::filesystem;
22
Deepak Kodihalli393821d2017-04-28 04:44:38 -050023int main()
24{
Andrew Jeffery9ecef792018-02-21 17:13:20 +103025 char tmplt[] = "/tmp/vpnor_partitions.XXXXXX";
Deepak Kodihalli393821d2017-04-28 04:44:38 -050026 char* tmpdir = mkdtemp(tmplt);
27 assert(tmpdir != nullptr);
Andrew Jeffery9ecef792018-02-21 17:13:20 +103028 fs::path root{tmpdir};
Deepak Kodihalli393821d2017-04-28 04:44:38 -050029
Andrew Jefferyd083efd2018-02-21 21:19:00 +103030 openpower::virtual_pnor::test::createVpnorTree(root, toc, BLOCK_SIZE);
Deepak Kodihalli393821d2017-04-28 04:44:38 -050031
Andrew Jefferyf34db312018-03-09 15:27:03 +103032 const openpower::virtual_pnor::partition::Table table(
Andrew Jeffery9ecef792018-02-21 17:13:20 +103033 fs::path{tmpdir}, BLOCK_SIZE, PNOR_SIZE);
Deepak Kodihalli393821d2017-04-28 04:44:38 -050034
35 pnor_partition_table expectedTable{};
36 expectedTable.data.magic = PARTITION_HEADER_MAGIC;
37 expectedTable.data.version = PARTITION_VERSION_1;
38 expectedTable.data.size = 1; // 1 block
39 expectedTable.data.entry_size = sizeof(pnor_partition);
40 expectedTable.data.entry_count = 1; // 1 partition
Andrew Jeffery9ecef792018-02-21 17:13:20 +103041 expectedTable.data.block_size = BLOCK_SIZE;
Deepak Kodihallid1d79302017-07-11 23:01:39 -050042 expectedTable.data.block_count =
Andrew Jeffery9ecef792018-02-21 17:13:20 +103043 (PNOR_SIZE) / expectedTable.data.block_size;
Deepak Kodihalli393821d2017-04-28 04:44:38 -050044 expectedTable.checksum =
45 openpower::virtual_pnor::details::checksum(expectedTable.data);
46
47 pnor_partition expectedPartition{};
48 strcpy(expectedPartition.data.name, partitionName);
Andrew Jefferyf34db312018-03-09 15:27:03 +103049 expectedPartition.data.base = 0; // starts at offset 0
50 expectedPartition.data.size = 1; // 1 block
Deepak Kodihalli393821d2017-04-28 04:44:38 -050051 expectedPartition.data.actual = 0x400; // 1024 bytes
52 expectedPartition.data.id = 1;
53 expectedPartition.data.pid = PARENT_PATITION_ID;
54 expectedPartition.data.type = PARTITION_TYPE_DATA;
55 expectedPartition.data.flags = 0;
56 expectedPartition.data.user.data[0] = PARTITION_ECC_PROTECTED;
57 expectedPartition.data.user.data[1] |= PARTITION_PRESERVED;
Deepak Kodihallie8b0e8a2017-07-12 10:01:31 -050058 expectedPartition.data.user.data[1] |= PARTITION_VERSION_CHECK_SHA512;
Deepak Kodihalli393821d2017-04-28 04:44:38 -050059 expectedPartition.checksum =
60 openpower::virtual_pnor::details::checksum(expectedPartition.data);
61
62 const pnor_partition_table& result = table.getNativeTable();
63
64 fs::remove_all(fs::path{tmpdir});
65
66 auto rc = memcmp(&expectedTable, &result, sizeof(pnor_partition_table));
67 assert(rc == 0);
68
69 rc = memcmp(&expectedPartition, &result.partitions[0],
70 sizeof(pnor_partition));
71 assert(rc == 0);
72
Adriana Kobylak2ad21322017-11-28 14:59:19 -060073 const pnor_partition& first = table.partition(0); // Partition at offset 0
Deepak Kodihalli393821d2017-04-28 04:44:38 -050074 rc = memcmp(&first, &result.partitions[0], sizeof(pnor_partition));
75 assert(rc == 0);
76
77 return 0;
78}