Add unit testing for DNS_Mgr and related classes

This commit is contained in:
Tim Wojtulewicz 2022-01-14 10:21:26 -07:00
parent 824bc372c5
commit e6e9144da6
8 changed files with 870 additions and 311 deletions

View file

@ -21,11 +21,13 @@ class RecordType;
class Val;
class ListVal;
class TableVal;
class StringVal;
template <class T> class IntrusivePtr;
using ValPtr = IntrusivePtr<Val>;
using ListValPtr = IntrusivePtr<ListVal>;
using TableValPtr = IntrusivePtr<TableVal>;
using StringValPtr = IntrusivePtr<StringVal>;
} // namespace zeek
@ -65,7 +67,7 @@ public:
// a set of addr.
TableValPtr LookupHost(const char* host);
ValPtr LookupAddr(const IPAddr& addr);
StringValPtr LookupAddr(const IPAddr& addr);
// Define the directory where to store the data.
void SetDir(const char* arg_dir) { dir = util::copy_string(arg_dir); }
@ -109,6 +111,14 @@ public:
void Terminate();
static TableValPtr empty_addr_set();
/**
* This method is used to call the private Process() method during unit testing
* and shouldn't be used otherwise.
*/
void TestProcess();
protected:
friend class LookupCallback;
friend class DNS_Mgr_Request;
@ -183,38 +193,9 @@ protected:
bool IsAddrReq() const { return name.empty(); }
void Resolved(const char* name)
{
for ( CallbackList::iterator i = callbacks.begin(); i != callbacks.end(); ++i )
{
(*i)->Resolved(name);
delete *i;
}
callbacks.clear();
processed = true;
}
void Resolved(TableVal* addrs)
{
for ( CallbackList::iterator i = callbacks.begin(); i != callbacks.end(); ++i )
{
(*i)->Resolved(addrs);
delete *i;
}
callbacks.clear();
processed = true;
}
void Timeout()
{
for ( CallbackList::iterator i = callbacks.begin(); i != callbacks.end(); ++i )
{
(*i)->Timeout();
delete *i;
}
callbacks.clear();
processed = true;
}
void Resolved(const char* name);
void Resolved(TableVal* addrs);
void Timeout();
};
using AsyncRequestAddrMap = std::map<IPAddr, AsyncRequest*>;