1 /*
2 * Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <cstring>
8 #include <config/interface/config_store.h>
9 #include <config/ramstore/config_ramstore.h>
10 #include <config/interface/config_blob.h>
11 #include <platform/interface/device_region.h>
12 #include <CppUTest/TestHarness.h>
13
TEST_GROUP(ConfigRamstoreTests)14 TEST_GROUP(ConfigRamstoreTests)
15 {
16 void setup()
17 {
18 config_ramstore_init();
19 }
20
21 void teardown()
22 {
23 config_ramstore_deinit();
24 }
25 };
26
TEST(ConfigRamstoreTests,checkEmptyConfig)27 TEST(ConfigRamstoreTests, checkEmptyConfig)
28 {
29 struct config_blob blob;
30
31 /* Expect queries to an empty store to return gracefully */
32 bool query_result = config_store_query(CONFIG_CLASSIFIER_BLOB, "flash", 0,
33 &blob, sizeof(blob));
34
35 CHECK_FALSE(query_result);
36 UNSIGNED_LONGS_EQUAL(0, config_store_count(CONFIG_CLASSIFIER_DEVICE_REGION));
37 UNSIGNED_LONGS_EQUAL(0, config_store_count(CONFIG_CLASSIFIER_MEMORY_REGION));
38 UNSIGNED_LONGS_EQUAL(0, config_store_count(CONFIG_CLASSIFIER_BLOB));
39 }
40
TEST(ConfigRamstoreTests,checkSingleConfig)41 TEST(ConfigRamstoreTests, checkSingleConfig)
42 {
43 struct device_region config;
44
45 /* This would be external configuration, obtained say from device tree */
46 strcpy(config.dev_class, "fs");
47 config.dev_instance = 2;
48 config.base_addr = (uintptr_t)0x0f000010;
49 config.io_region_size = 0x100;
50
51 /* Add the configuration object */
52 bool success = config_store_add(CONFIG_CLASSIFIER_DEVICE_REGION,
53 config.dev_class, config.dev_instance,
54 &config, sizeof(config));
55
56 CHECK_TRUE(success);
57
58 /* Expect query find the config object */
59 struct device_region query_result;
60 success = config_store_query(CONFIG_CLASSIFIER_DEVICE_REGION,
61 config.dev_class, config.dev_instance,
62 &query_result, sizeof(query_result));
63
64 CHECK_TRUE(success);
65 STRCMP_EQUAL(config.dev_class, query_result.dev_class);
66 UNSIGNED_LONGS_EQUAL(config.dev_instance, query_result.dev_instance);
67 UNSIGNED_LONGS_EQUAL(config.base_addr, query_result.base_addr);
68 UNSIGNED_LONGS_EQUAL(config.io_region_size, query_result.io_region_size);
69 }
70
TEST(ConfigRamstoreTests,checkMultipleConfig)71 TEST(ConfigRamstoreTests, checkMultipleConfig)
72 {
73 /* Add first config object */
74 struct device_region config1;
75
76 strcpy(config1.dev_class, "flash");
77 config1.dev_instance = 0;
78 config1.base_addr = (uintptr_t)0x0f000010;
79 config1.io_region_size = 0x100;
80
81 bool success = config_store_add(CONFIG_CLASSIFIER_DEVICE_REGION,
82 config1.dev_class, config1.dev_instance,
83 &config1, sizeof(config1));
84
85 CHECK_TRUE(success);
86
87 /* Add second config object */
88 struct config_blob config2;
89
90 uint8_t config2_data[100];
91 config2.data = config2_data;
92 config2.data_len = sizeof(config2_data);
93
94 success = config_store_add(CONFIG_CLASSIFIER_BLOB,
95 "a_config_blob", 0,
96 &config2, sizeof(config2));
97
98 CHECK_TRUE(success);
99 UNSIGNED_LONGS_EQUAL(1, config_store_count(CONFIG_CLASSIFIER_DEVICE_REGION));
100 UNSIGNED_LONGS_EQUAL(1, config_store_count(CONFIG_CLASSIFIER_BLOB));
101
102 /* Expect queries for both objects to work */
103 struct device_region query1_result;
104 CHECK_TRUE(config_store_query(CONFIG_CLASSIFIER_DEVICE_REGION,
105 config1.dev_class, config1.dev_instance,
106 &query1_result, sizeof(query1_result)));
107
108 struct config_blob query2_result;
109 CHECK_TRUE(config_store_query(CONFIG_CLASSIFIER_BLOB,
110 "a_config_blob", 0,
111 &query2_result, sizeof(query2_result)));
112 }
113