summaryrefslogtreecommitdiffstats
path: root/src/tests
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@ozlabs.org>2018-08-21 17:54:40 +1000
committerAlistair Popple <alistair@popple.id.au>2018-09-07 13:42:52 +1000
commitd4d9a621af9d54d71f8b212bec50109cd161992b (patch)
tree7e8ad8f4dd5f176a33df5d979cb0adc237145490 /src/tests
parentfd0c7c1e3f937e2e8306ae783e47c11926968188 (diff)
downloadpdbg-d4d9a621af9d54d71f8b212bec50109cd161992b.tar.gz
pdbg-d4d9a621af9d54d71f8b212bec50109cd161992b.zip
tests: Add tests for libpdbg target functions
Signed-off-by: Amitay Isaacs <amitay@ozlabs.org>
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/libpdbg_target_test.c256
1 files changed, 256 insertions, 0 deletions
diff --git a/src/tests/libpdbg_target_test.c b/src/tests/libpdbg_target_test.c
new file mode 100644
index 0000000..6b64326
--- /dev/null
+++ b/src/tests/libpdbg_target_test.c
@@ -0,0 +1,256 @@
+/* Copyright 2018 IBM Corp.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include <libpdbg.h>
+
+#include "fake.dt.h"
+
+static int count_target(struct pdbg_target *parent, const char *classname)
+{
+ struct pdbg_target *target;
+ int n = 0;
+
+ pdbg_for_each_target(classname, parent, target) {
+ n++;
+ }
+
+ return n;
+}
+
+static int count_class_target(const char *classname)
+{
+ struct pdbg_target *target;
+ int n = 0;
+
+ pdbg_for_each_class_target(classname, target) {
+ n++;
+ }
+
+ return n;
+}
+
+static int count_child_target(struct pdbg_target *parent)
+{
+ struct pdbg_target *child;
+ int n = 0;
+
+ pdbg_for_each_child_target(parent, child) {
+ n++;
+ }
+
+ return n;
+}
+
+int main(void)
+{
+ struct pdbg_target *root, *target, *parent, *parent2;
+ const char *name;
+ int count;
+
+ pdbg_targets_init(&_binary_fake_dtb_o_start);
+
+ root = pdbg_target_root();
+ assert(root);
+
+ count = count_class_target("fsi");
+ assert(count == 1);
+
+ count = count_class_target("pib");
+ assert(count == 8);
+
+ count = count_class_target("core");
+ assert(count == 32);
+
+ count = count_class_target("thread");
+ assert(count == 64);
+
+ pdbg_for_each_class_target("fsi", target) {
+ parent = pdbg_target_parent("fsi", target);
+ assert(parent == NULL);
+
+ parent = pdbg_target_parent("pib", target);
+ assert(parent == NULL);
+
+ parent = pdbg_target_parent("core", target);
+ assert(parent == NULL);
+
+ parent = pdbg_target_parent("thread", target);
+ assert(parent == NULL);
+
+ count = count_child_target(target);
+ assert(count == 8);
+
+ count = count_target(target, "fsi");
+ assert(count == 1);
+
+ count = count_target(target, "pib");
+ assert(count == 8);
+
+ count = count_target(target, "core");
+ assert(count == 32);
+
+ count = count_target(target, "thread");
+ assert(count == 64);
+
+ name = pdbg_target_name(target);
+ assert(!strcmp(name, "Fake FSI"));
+
+ name = pdbg_target_class_name(target);
+ assert(!strcmp(name, "fsi"));
+
+ name = pdbg_target_dn_name(target);
+ assert(!strncmp(name, "fsi", 3));
+ }
+
+ pdbg_for_each_class_target("pib", target) {
+ parent = pdbg_target_parent("fsi", target);
+ assert(parent);
+
+ parent2 = pdbg_target_require_parent("fsi", target);
+ assert(parent == parent2);
+
+ parent = pdbg_target_parent("pib", target);
+ assert(parent == NULL);
+
+ parent = pdbg_target_parent("core", target);
+ assert(parent == NULL);
+
+ parent = pdbg_target_parent("thread", target);
+ assert(parent == NULL);
+
+ count = count_child_target(target);
+ assert(count == 4);
+
+ count = count_target(target, "fsi");
+ assert(count == 0);
+
+ count = count_target(target, "pib");
+ assert(count == 1);
+
+ count = count_target(target, "core");
+ assert(count == 4);
+
+ count = count_target(target, "thread");
+ assert(count == 8);
+
+ name = pdbg_target_name(target);
+ assert(!strcmp(name, "Fake PIB"));
+
+ name = pdbg_target_class_name(target);
+ assert(!strcmp(name, "pib"));
+
+ name = pdbg_target_dn_name(target);
+ assert(!strncmp(name, "pib", 3));
+ }
+
+ pdbg_for_each_class_target("core", target) {
+ parent = pdbg_target_parent("fsi", target);
+ assert(parent);
+
+ parent2 = pdbg_target_require_parent("fsi", target);
+ assert(parent == parent2);
+
+ parent = pdbg_target_parent("pib", target);
+ assert(parent);
+
+ parent2 = pdbg_target_require_parent("pib", target);
+ assert(parent == parent2);
+
+ parent = pdbg_target_parent("core", target);
+ assert(parent == NULL);
+
+ parent = pdbg_target_parent("thread", target);
+ assert(parent == NULL);
+
+ count = count_child_target(target);
+ assert(count == 2);
+
+ count = count_target(target, "fsi");
+ assert(count == 0);
+
+ count = count_target(target, "pib");
+ assert(count == 0);
+
+ count = count_target(target, "core");
+ assert(count == 1);
+
+ count = count_target(target, "thread");
+ assert(count == 2);
+
+ name = pdbg_target_name(target);
+ assert(!strcmp(name, "Fake Core"));
+
+ name = pdbg_target_class_name(target);
+ assert(!strcmp(name, "core"));
+
+ name = pdbg_target_dn_name(target);
+ assert(!strncmp(name, "core", 4));
+ }
+
+ pdbg_for_each_class_target("thread", target) {
+ parent = pdbg_target_parent("fsi", target);
+ assert(parent);
+
+ parent2 = pdbg_target_require_parent("fsi", target);
+ assert(parent == parent2);
+
+ parent = pdbg_target_parent("pib", target);
+ assert(parent);
+
+ parent2 = pdbg_target_require_parent("pib", target);
+ assert(parent == parent2);
+
+ parent = pdbg_target_parent("core", target);
+ assert(parent);
+
+ parent2 = pdbg_target_require_parent("core", target);
+ assert(parent == parent2);
+
+ parent = pdbg_target_parent("thread", target);
+ assert(parent == NULL);
+
+ count = count_child_target(target);
+ assert(count == 0);
+
+ count = count_target(target, "fsi");
+ assert(count == 0);
+
+ count = count_target(target, "pib");
+ assert(count == 0);
+
+ count = count_target(target, "core");
+ assert(count == 0);
+
+ count = count_target(target, "thread");
+ assert(count == 1);
+
+ name = pdbg_target_name(target);
+ assert(!strcmp(name, "Fake Thread"));
+
+ name = pdbg_target_class_name(target);
+ assert(!strcmp(name, "thread"));
+
+ name = pdbg_target_dn_name(target);
+ assert(!strncmp(name, "thread", 6));
+ }
+
+ return 0;
+}
OpenPOWER on IntegriCloud