Track inserted node IDs and sometimes reuse them in ForNode() so the successful lookup path is exercised more reliably. Replace no-op callbacks with lightweight CNode accessor calls to make ForEachNode() and ForNode() cover previously unreached callback code paths.
This addresses feedback from #34830 (comment) where it was noted that the callbacks had “neither the return type checked nor its side-effect”.
Coverage reports from the connman fuzz corpus, before and after the change:
diff cov_show_before.txt cov_show_after.txt filtered to ForNode/ForEachNode/IsFullOutboundConn/ConnectionTypeAsString:
IsFullOutboundConn — net.h:786-788
0- 786| 0| bool IsFullOutboundConn() const {
1- 787| 0| return m_conn_type == ConnectionType::OUTBOUND_FULL_RELAY;
2- 788| 0| }
3+ 786| 1.13M| bool IsFullOutboundConn() const {
4+ 787| 1.13M| return m_conn_type == ConnectionType::OUTBOUND_FULL_RELAY;
5+ 788| 1.13M| }
ConnectionTypeAsString — net.h:967
0- 967| 0| std::string ConnectionTypeAsString() const { return ::ConnectionTypeAsString(m_conn_type); }
1+ 967| 1.11M| std::string ConnectionTypeAsString() const { return ::ConnectionTypeAsString(m_conn_type); }
ForNode — net.cpp:4126-4131
0- 4126| 1.08k| if(pnode->GetId() == id) {
1- | Branch (4126:12): [True: 0, False: 1.08k]
2- 4127| 0| found = pnode;
3- 4131| 39| return found != nullptr && NodeFullyConnected(found) && func(found);
4- ^0 ^0
5+ 4126| 602| if(pnode->GetId() == id) {
6+ | Branch (4126:12): [True: 1, False: 601]
7+ 4127| 1| found = pnode;
8+ 4131| 28| return found != nullptr && NodeFullyConnected(found) && func(found);
9+ ^1 ^1
ForEachNode — net.h:1270-1271
0- 1270| 1.13M| if (NodeFullyConnected(node))
1- | Branch (1270:17): [True: 0, False: 1.13M]
2- 1271| 0| func(node);
3+ 1270| 1.11M| if (NodeFullyConnected(node))
4+ | Branch (1270:17): [True: 1.11M, False: 0]
5+ 1271| 1.11M| func(node);
Two previously uncovered functions (IsFullOutboundConn, ConnectionTypeAsString) are now exercised through the iteration callbacks. ForNode finds matching nodes.