[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 03/11] libqos/qgraph: add qos_dump_graph()
From: |
Christian Schoenebeck |
Subject: |
[PATCH v3 03/11] libqos/qgraph: add qos_dump_graph() |
Date: |
Fri, 2 Oct 2020 18:15:05 +0200 |
This new function is purely for debugging purposes. It prints the
current qos graph to stdout and allows to identify problems in the
created qos graph e.g. when writing new qos tests.
Coloured output is used to mark available nodes in green colour,
whereas unavailable nodes are marked in red colour.
Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
---
tests/qtest/libqos/qgraph.c | 54 +++++++++++++++++++++++++++++++++++++
tests/qtest/libqos/qgraph.h | 20 ++++++++++++++
2 files changed, 74 insertions(+)
diff --git a/tests/qtest/libqos/qgraph.c b/tests/qtest/libqos/qgraph.c
index 61faf6b27d..e70635750e 100644
--- a/tests/qtest/libqos/qgraph.c
+++ b/tests/qtest/libqos/qgraph.c
@@ -805,3 +805,57 @@ void qos_delete_cmd_line(const char *name)
node->command_line = NULL;
}
}
+
+#define RED(txt) ( \
+ "\033[0;91m" txt \
+ "\033[0m" \
+)
+
+#define GREEN(txt) ( \
+ "\033[0;92m" txt \
+ "\033[0m" \
+)
+
+void qos_dump_graph(void)
+{
+ GList *keys;
+ GList *l;
+ QOSGraphEdgeList *list;
+ QOSGraphEdge *e, *next;
+ QOSGraphNode *dest_node, *node;
+
+ printf("ALL QGRAPH EDGES: {\n");
+ keys = g_hash_table_get_keys(edge_table);
+ for (l = keys; l != NULL; l = l->next) {
+ const gchar *key = l->data;
+ printf("\t src='%s'\n", key);
+ list = get_edgelist(key);
+ QSLIST_FOREACH_SAFE(e, list, edge_list, next) {
+ dest_node = g_hash_table_lookup(node_table, e->dest);
+ printf("\t\t|-> dest='%s' type=%d (node=%p)",
+ e->dest, e->type, dest_node);
+ if (!dest_node) {
+ printf(RED(" <------- ERROR !"));
+ }
+ printf("\n");
+ }
+ }
+ g_list_free(keys);
+ printf("}\n");
+
+ printf("ALL QGRAPH NODES: {\n");
+ keys = g_hash_table_get_keys(node_table);
+ for (l = keys; l != NULL; l = l->next) {
+ const gchar *key = l->data;
+ node = g_hash_table_lookup(node_table, key);
+ printf("\t name='%s' ", key);
+ if (node->qemu_name) {
+ printf("qemu_name='%s' ", node->qemu_name);
+ }
+ printf("type=%d cmd_line='%s' [%s]\n",
+ node->type, node->command_line,
+ node->available ? GREEN("available") : RED("UNAVAILBLE"));
+ }
+ g_list_free(keys);
+ printf("}\n");
+}
diff --git a/tests/qtest/libqos/qgraph.h b/tests/qtest/libqos/qgraph.h
index f472949f68..07a32535f1 100644
--- a/tests/qtest/libqos/qgraph.h
+++ b/tests/qtest/libqos/qgraph.h
@@ -586,5 +586,25 @@ QOSGraphObject *qos_machine_new(QOSGraphNode *node,
QTestState *qts);
QOSGraphObject *qos_driver_new(QOSGraphNode *node, QOSGraphObject *parent,
QGuestAllocator *alloc, void *arg);
+/**
+ * Just for debugging purpose: prints all currently existing nodes and
+ * edges to stdout.
+ *
+ * All qtests add themselves to the overall qos graph by calling qgraph
+ * functions that add device nodes and edges between the individual graph
+ * nodes for tests. As the actual graph is assmbled at runtime by the qos
+ * subsystem, it is sometimes not obvious how the overall graph looks like.
+ * E.g. when writing new tests it may happen that those new tests are simply
+ * ignored by the qtest framework.
+ *
+ * This function allows to identify problems in the created qgraph. Keep in
+ * mind: only tests with a path down from the actual test case node (leaf) up
+ * to the graph's root node are actually executed by the qtest framework. And
+ * the qtest framework uses QMP to automatically check which QEMU drivers are
+ * actually currently available, and accordingly qos marks certain pathes as
+ * 'unavailable' in such cases (e.g. when QEMU was compiled without support for
+ * a certain feature).
+ */
+void qos_dump_graph(void);
#endif
--
2.20.1
- Re: [PATCH v3 06/11] tests/qtest/qos-test: dump QEMU command if verbose, (continued)
- [PATCH v3 11/11] tests/9pfs: add local Tmkdir test, Christian Schoenebeck, 2020/10/02
- [PATCH v3 10/11] tests/9pfs: add virtio_9p_test_path(), Christian Schoenebeck, 2020/10/02
- [PATCH v3 09/11] tests/9pfs: wipe local 9pfs test directory, Christian Schoenebeck, 2020/10/02
- [PATCH v3 04/11] tests/qtest/qos-test: dump qos graph if verbose, Christian Schoenebeck, 2020/10/02
- [PATCH v3 07/11] tests/9pfs: change qtest name prefix to synth, Christian Schoenebeck, 2020/10/02
- [PATCH v3 02/11] libqos/qgraph: add qos_node_create_driver_named(), Christian Schoenebeck, 2020/10/02
- [PATCH v3 03/11] libqos/qgraph: add qos_dump_graph(),
Christian Schoenebeck <=
- [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Christian Schoenebeck, 2020/10/02
- Re: [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Paolo Bonzini, 2020/10/08
- Re: [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Christian Schoenebeck, 2020/10/08
- Re: [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Paolo Bonzini, 2020/10/08
- Re: [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Christian Schoenebeck, 2020/10/08
- Re: [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Paolo Bonzini, 2020/10/08
- Re: [PATCH v3 05/11] tests/qtest/qos-test: dump environment variables if verbose, Christian Schoenebeck, 2020/10/08
[PATCH v3 08/11] tests/9pfs: introduce local tests, Christian Schoenebeck, 2020/10/02
[PATCH v3 01/11] libqos/qgraph: add qemu_name to QOSGraphNode, Christian Schoenebeck, 2020/10/02