diff options
| author | Amitay Isaacs <amitay@ozlabs.org> | 2018-08-21 17:54:40 +1000 |
|---|---|---|
| committer | Alistair Popple <alistair@popple.id.au> | 2018-09-07 13:42:52 +1000 |
| commit | d4d9a621af9d54d71f8b212bec50109cd161992b (patch) | |
| tree | 7e8ad8f4dd5f176a33df5d979cb0adc237145490 /src/tests | |
| parent | fd0c7c1e3f937e2e8306ae783e47c11926968188 (diff) | |
| download | pdbg-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.c | 256 |
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; +} |

